Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
NBEdge.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20// The representation of a single edge during network building
21/****************************************************************************/
22#pragma once
23#include <config.h>
24
25#include <map>
26#include <vector>
27#include <string>
28#include <set>
29#include <cassert>
30#include <utils/common/Named.h>
38#include "NBCont.h"
39#include "NBHelpers.h"
40#include "NBSign.h"
41
42
43// ===========================================================================
44// class declarations
45// ===========================================================================
46class NBNode;
47class NBConnection;
48class NBNodeCont;
49class NBEdgeCont;
50class OutputDevice;
51class GNELane;
52class NBVehicle;
53
54
55// ===========================================================================
56// class definitions
57// ===========================================================================
63public:
64 virtual ~NBRouterEdge() {}
65 virtual const std::string& getID() const = 0;
66 virtual double getSpeed() const = 0;
67 virtual double getLength() const = 0;
68 virtual const NBRouterEdge* getBidiEdge() const = 0;
69 virtual int getNumericalID() const = 0;
70 virtual const ConstRouterEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const = 0;
71 virtual bool isInternal() const {
72 return false;
73 }
74 inline bool prohibits(const NBVehicle* const /*veh*/) const {
75 return false;
76 }
77 inline bool restricts(const NBVehicle* const /*veh*/) const {
78 return false;
79 }
80
81
82 static inline double getTravelTimeStatic(const NBRouterEdge* const edge, const NBVehicle* const /*veh*/, double /*time*/) {
83 return edge->getLength() / edge->getSpeed();
84 }
85};
86
87
92class NBEdge : public Named, public Parameterised, public NBRouterEdge {
93 friend class NBEdgeCont;
94
96 friend class GNELane;
97 friend class GNEEdge;
98 friend class GNEJunction;
99
100public:
101
125
126
130 enum class Lane2LaneInfoType {
132 COMPUTED,
134 USER,
137 };
138
139
143 struct Lane final : public Parameterised {
145 Lane(NBEdge* e, const std::string& _origID);
146
149
151 double speed;
152
154 double friction;
155
158
161
164
167
169 double endOffset;
170
174
176 double width;
177
179 std::string oppositeID;
180
183
185 // @note (see NIImporter_DlrNavteq::ConnectedLanesHandler)
187
190
192 std::string type;
193
195 int turnSigns = 0;
196 };
197
201 struct Connection final : public Parameterised, public NBRouterEdge {
207 Connection(int fromLane_, NBEdge* toEdge_, int toLane_, const bool mayDefinitelyPass_ = false);
208
211
214
217
219 std::string tlID;
220
222 int tlLinkIndex = -1;
223
225 int tlLinkIndex2 = -1;
226
229
232
235
238
241
242 // @brief custom friction for connection
244
247
250
253
256
259
261 bool indirectLeft = false;
262
264 std::string edgeType;
265
267 std::string id;
268
271
274
276 bool haveVia = false;
277
279 std::string viaID;
280
283
285 double viaLength = 0.;
286
288 std::vector<int> foeInternalLinks;
289
291 std::vector<std::string> foeIncomingLanes;
292
296
298 bool uncontrolled = false;
299
301 std::string getInternalLaneID() const;
302
304 std::string getInternalViaLaneID() const;
305
307 std::string getDescription(const NBEdge* parent) const;
308
311
315 const std::string& getID() const {
316 return id;
317 }
318 double getSpeed() const {
319 return vmax;
320 }
321 // @brief needed for NBRouterEdge
322 double getLength() const {
323 return shape.length() + viaShape.length();
324 }
325 int getNumericalID() const {
326 throw ProcessError("NBEdge::Connection does not implement getNumericalID()");
327 }
328 const Connection* getBidiEdge() const {
329 return nullptr;
330 }
331 bool isInternal() const {
332 return true;
333 }
334 const ConstRouterEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const {
335 UNUSED_PARAMETER(vClass);
336 UNUSED_PARAMETER(ignoreTransientPermissions);
337 return myViaSuccessors;
338 }
340 };
341
344
346 static const double UNSPECIFIED_WIDTH;
347
349 static const double UNSPECIFIED_OFFSET;
350
352 static const double UNSPECIFIED_SPEED;
353
355 static const double UNSPECIFIED_FRICTION;
356
358 static const double UNSPECIFIED_CONTPOS;
359
362
364 static const double UNSPECIFIED_LOADED_LENGTH;
365
367 static const double UNSPECIFIED_SIGNAL_OFFSET;
368
370 static const double ANGLE_LOOKAHEAD;
371
374
377
379 static const int TURN_SIGN_SHIFT_BUS = 8;
380 static const int TURN_SIGN_SHIFT_TAXI = 16;
381 static const int TURN_SIGN_SHIFT_BICYCLE = 24;
382
389
390 static void setDefaultConnectionLength(double length) {
392 }
393
394public:
414 NBEdge(const std::string& id,
415 NBNode* from, NBNode* to, std::string type,
416 double speed, double friction, int nolanes, int priority,
417 double width, double endOffset,
418 LaneSpreadFunction spread,
419 const std::string& streetName = "");
420
443 NBEdge(const std::string& id,
444 NBNode* from, NBNode* to, std::string type,
445 double speed, double friction, int nolanes, int priority,
446 double width, double endOffset,
447 PositionVector geom,
448 LaneSpreadFunction spread,
449 const std::string& streetName = "",
450 const std::string& origID = "",
451 bool tryIgnoreNodePositions = false);
452
464 NBEdge(const std::string& id,
465 NBNode* from, NBNode* to,
466 const NBEdge* tpl,
467 const PositionVector& geom = PositionVector(),
468 int numLanes = -1);
469
471 ~NBEdge();
472
473
489 void reinit(NBNode* from, NBNode* to, const std::string& type,
490 double speed, double friction, int nolanes, int priority,
491 PositionVector geom, double width, double endOffset,
492 const std::string& streetName,
493 LaneSpreadFunction spread,
494 bool tryIgnoreNodePositions = false);
495
500 void reinitNodes(NBNode* from, NBNode* to);
501
504
508 void reshiftPosition(double xoff, double yoff);
509
511 void roundGeometry();
512
514 void roundSpeed();
515
517 void mirrorX();
519
521
522
526 int getNumLanes() const {
527 return (int)myLanes.size();
528 }
529
533 int getPriority() const {
534 return myPriority;
535 }
536
538 void setPriority(int priority) {
539 myPriority = priority;
540 }
541
545 inline NBNode* getFromNode() const {
546 return myFrom;
547 }
548
552 inline NBNode* getToNode() const {
553 return myTo;
554 }
555
561 inline double getStartAngle() const {
562 return myStartAngle;
563 }
564
570 inline double getEndAngle() const {
571 return myEndAngle;
572 }
573
578 double getShapeStartAngle() const;
579
580
586 double getShapeEndAngle() const;
587
592 inline double getTotalAngle() const {
593 return myTotalAngle;
594 }
595
599 double getLength() const {
600 return myLength;
601 }
602
603
608 double getLoadedLength() const {
610 }
611
613 double getFinalLength() const;
614
618 bool hasLoadedLength() const {
619 return myLoadedLength > 0;
620 }
621
625 double getSpeed() const {
626 return mySpeed;
627 }
628
632 double getFriction() const {
633 return myFriction;
634 }
635
642 return myStep;
643 }
644
648 double getLaneWidth() const {
649 return myLaneWidth;
650 }
651
655 double getLaneWidth(int lane) const;
656
666 const NBNode& node,
667 const NBEdge::Connection& connection,
668 const NBEdge::Lane& successor,
669 bool isVia) const;
670
672 double getTotalWidth() const;
673
675 const std::string& getStreetName() const {
676 return myStreetName;
677 }
678
680 void setStreetName(const std::string& name) {
681 myStreetName = name;
682 }
683
685 double getDistance() const {
686 return myDistance;
687 }
688
690 double getDistancAt(double pos) const;
691
695 double getEndOffset() const {
696 return myEndOffset;
697 }
698
702 double getEndOffset(int lane) const;
703
707 const StopOffset& getEdgeStopOffset() const;
708
712 const StopOffset& getLaneStopOffset(int lane) const;
713
715 double getSignalOffset() const;
716
719 return mySignalPosition;
720 }
721
723 const NBNode* getSignalNode() const {
724 return mySignalNode;
725 }
726
728 void setSignalPosition(const Position& pos, const NBNode* signalNode) {
729 mySignalPosition = pos;
730 mySignalNode = signalNode;
731 }
732
736 const std::vector<NBEdge::Lane>& getLanes() const {
737 return myLanes;
738 }
740
745 int getFirstNonPedestrianLaneIndex(int direction, bool exclusive = false) const;
746
751 int getFirstNonPedestrianNonBicycleLaneIndex(int direction, bool exclusive = false) const;
752
754 int getSpecialLane(SVCPermissions permissions) const;
755
759 int getFirstAllowedLaneIndex(int direction) const;
760
762 NBEdge::Lane getFirstNonPedestrianLane(int direction) const;
763
765 std::set<SVCPermissions> getPermissionVariants(int iStart, int iEnd) const;
766
767 /* @brief get lane indices that allow the given permissions
768 * @param[in] allPermissions: whether all the given permissions must be allowed (or just some of them)
769 */
770 int getNumLanesThatAllow(SVCPermissions permissions, bool allPermissions = true) const;
771
773 bool allowsChangingLeft(int lane, SUMOVehicleClass vclass) const;
774
776 bool allowsChangingRight(int lane, SUMOVehicleClass vclass) const;
777
779 double getCrossingAngle(NBNode* node);
780
782 std::string getSidewalkID();
783
785
786
790 return myGeom;
791 }
792
794 const PositionVector getInnerGeometry() const;
795
797 bool hasDefaultGeometry() const;
798
804 bool hasDefaultGeometryEndpoints() const;
805
811 bool hasDefaultGeometryEndpointAtNode(const NBNode* node) const;
812
813 Position getEndpointAtNode(const NBNode* node) const;
814
815 void resetEndpointAtNode(const NBNode* node);
816
827 void setGeometry(const PositionVector& g, bool inner = false);
828
838 void addGeometryPoint(int index, const Position& p);
839
841 void extendGeometryAtNode(const NBNode* node, double maxExtent);
842
844 void shortenGeometryAtNode(const NBNode* node, double reduction);
845
847 bool shiftPositionAtNode(NBNode* node, NBEdge* opposite);
848
850 Position geometryPositionAtOffset(double offset) const;
851
861 void computeEdgeShape(double smoothElevationThreshold = -1);
862
866 const PositionVector& getLaneShape(int i) const;
867
873
879
883 void reduceGeometry(const double minDist);
884
890 void checkGeometry(const double maxAngle, bool fixAngle, const double minRadius, bool fix, bool silent);
892
895
909 bool addEdge2EdgeConnection(NBEdge* dest, bool overrideRemoval = false, SVCPermissions permission = SVC_UNSPECIFIED);
910
931 bool addLane2LaneConnection(int fromLane, NBEdge* dest,
932 int toLane, Lane2LaneInfoType type,
933 bool mayUseSameDestination = false,
934 bool mayDefinitelyPass = false,
936 double contPos = UNSPECIFIED_CONTPOS,
937 double visibility = UNSPECIFIED_VISIBILITY_DISTANCE,
938 double speed = UNSPECIFIED_SPEED,
939 double friction = UNSPECIFIED_FRICTION,
940 double length = myDefaultConnectionLength,
941 const PositionVector& customShape = PositionVector::EMPTY,
942 const bool uncontrolled = UNSPECIFIED_CONNECTION_UNCONTROLLED,
943 SVCPermissions permissions = SVC_UNSPECIFIED,
944 const bool indirectLeft = false,
945 const std::string& edgeType = "",
946 SVCPermissions changeLeft = SVC_UNSPECIFIED,
947 SVCPermissions changeRight = SVC_UNSPECIFIED,
948 bool postProcess = false);
949
967 bool addLane2LaneConnections(int fromLane,
968 NBEdge* dest, int toLane, int no,
969 Lane2LaneInfoType type, bool invalidatePrevious = false,
970 bool mayDefinitelyPass = false);
971
982 bool setConnection(int lane, NBEdge* destEdge,
983 int destLane,
985 bool mayUseSameDestination = false,
986 bool mayDefinitelyPass = false,
988 double contPos = UNSPECIFIED_CONTPOS,
989 double visibility = UNSPECIFIED_VISIBILITY_DISTANCE,
990 double speed = UNSPECIFIED_SPEED,
991 double friction = UNSPECIFIED_FRICTION,
992 double length = myDefaultConnectionLength,
993 const PositionVector& customShape = PositionVector::EMPTY,
994 const bool uncontrolled = UNSPECIFIED_CONNECTION_UNCONTROLLED,
995 SVCPermissions permissions = SVC_UNSPECIFIED,
996 bool indirectLeft = false,
997 const std::string& edgeType = "",
998 SVCPermissions changeLeft = SVC_UNSPECIFIED,
999 SVCPermissions changeRight = SVC_UNSPECIFIED,
1000 bool postProcess = false);
1001
1012 std::vector<Connection> getConnectionsFromLane(int lane, const NBEdge* to = nullptr, int toLane = -1) const;
1013
1018 const Connection& getConnection(int fromLane, const NBEdge* to, int toLane) const;
1019
1024 Connection& getConnectionRef(int fromLane, const NBEdge* to, int toLane);
1025
1034 bool hasConnectionTo(const NBEdge* destEdge, int destLane, int fromLane = -1) const;
1035
1042 bool isConnectedTo(const NBEdge* e, const bool ignoreTurnaround = false) const;
1043
1047 const std::vector<Connection>& getConnections() const {
1048 return myConnections;
1049 }
1050
1054 std::vector<Connection>& getConnections() {
1055 return myConnections;
1056 }
1057
1062
1067
1072
1076 std::vector<int> getConnectionLanes(NBEdge* currentOutgoing, bool withBikes = true) const;
1077
1080
1083
1089 void remapConnections(const EdgeVector& incoming);
1090
1098 void removeFromConnections(NBEdge* toEdge, int fromLane = -1, int toLane = -1, bool tryLater = false, const bool adaptToLaneRemoval = false, const bool keepPossibleTurns = false);
1099
1101 bool removeFromConnections(const NBEdge::Connection& connectionToRemove);
1102
1104 void invalidateConnections(bool reallowSetting = false);
1105
1107 void replaceInConnections(NBEdge* which, NBEdge* by, int laneOff);
1108
1110 void replaceInConnections(NBEdge* which, const std::vector<NBEdge::Connection>& origConns);
1111
1113 void copyConnectionsFrom(NBEdge* src);
1114
1116 void shiftToLanesToEdge(NBEdge* to, int laneOff);
1118
1124 bool isTurningDirectionAt(const NBEdge* const edge) const;
1125
1130 void setTurningDestination(NBEdge* e, bool onlyPossible = false);
1131
1138
1144 }
1145
1147 void setInsideTLS(bool inside) {
1148 myAmInTLS = inside;
1149 }
1150
1154 bool isInsideTLS() const {
1155 return myAmInTLS;
1156 }
1158
1164 void setJunctionPriority(const NBNode* const node, int prio);
1165
1175 int getJunctionPriority(const NBNode* const node) const;
1176
1178 void setLoadedLength(double val);
1179
1181 void setAverageLengthWithOpposite(double val);
1182
1185
1187 const std::string& getTypeID() const {
1188 return myType;
1189 }
1190
1192 bool needsLaneSpecificOutput() const;
1193
1195 bool hasPermissions() const;
1196
1198 bool hasLaneSpecificPermissions() const;
1199
1201 bool hasLaneSpecificSpeed() const;
1202
1204 bool hasLaneSpecificFriction() const;
1205
1207 bool hasLaneSpecificWidth() const;
1208
1210 bool hasLaneSpecificType() const;
1211
1213 bool hasLaneSpecificEndOffset() const;
1214
1216 bool hasLaneSpecificStopOffsets() const;
1217
1219 bool hasAccelLane() const;
1220
1222 bool hasCustomLaneShape() const;
1223
1225 bool hasLaneParams() const;
1226
1228 bool prohibitsChanging() const;
1229
1231 bool computeEdge2Edges(bool noLeftMovers);
1232
1234 bool computeLanes2Edges();
1235
1237 bool recheckLanes();
1238
1240 void recheckOpposite(const NBEdgeCont& ec, bool fixOppositeLengths);
1241
1250 void appendTurnaround(bool noTLSControlled, bool noFringe, bool onlyDeadends, bool onlyTurnlane, bool noGeometryLike, bool checkPermissions);
1251
1255 NBNode* tryGetNodeAtPosition(double pos, double tolerance = 5.0) const;
1256
1258 double getMaxLaneOffset();
1259
1261 bool lanesWereAssigned() const;
1262
1264 bool mayBeTLSControlled(int fromLane, NBEdge* toEdge, int toLane) const;
1265
1267 bool setControllingTLInformation(const NBConnection& c, const std::string& tlID);
1268
1271
1273 PositionVector getCWBoundaryLine(const NBNode& n) const;
1274
1277
1279 bool expandableBy(NBEdge* possContinuation, std::string& reason) const;
1280
1282 void append(NBEdge* continuation);
1283
1285 void updateRemovedNodes(const std::string& removed);
1286
1288 bool hasSignalisedConnectionTo(const NBEdge* const e) const;
1289
1291 void moveOutgoingConnectionsFrom(NBEdge* e, int laneOff);
1292
1293 /* @brief return the turn destination if it exists
1294 * @param[in] possibleDestination Wether myPossibleTurnDestination should be returned if no turnaround connection
1295 * exists
1296 */
1297 NBEdge* getTurnDestination(bool possibleDestination = false) const;
1298
1300 std::string getLaneID(int lane) const;
1301
1303 double getLaneSpeed(int lane) const;
1304
1306 double getLaneFriction(int lane) const;
1307
1309 bool isNearEnough2BeJoined2(NBEdge* e, double threshold) const;
1310
1317 double getAngleAtNode(const NBNode* const node) const;
1318
1324 double getAngleAtNodeNormalized(const NBNode* const node) const;
1325
1334 double getAngleAtNodeToCenter(const NBNode* const node) const;
1335
1337 void incLaneNo(int by);
1338
1340 void decLaneNo(int by);
1341
1343 void deleteLane(int index, bool recompute, bool shiftIndices);
1344
1346 void addLane(int index, bool recomputeShape, bool recomputeConnections, bool shiftIndices);
1347
1350
1352 void addSidewalk(double width);
1353
1355 void restoreSidewalk(std::vector<NBEdge::Lane> oldLanes, PositionVector oldGeometry, std::vector<NBEdge::Connection> oldConnections);
1356
1358 void addBikeLane(double width);
1359
1361 void restoreBikelane(std::vector<NBEdge::Lane> oldLanes, PositionVector oldGeometry, std::vector<NBEdge::Connection> oldConnections);
1362
1364 void addRestrictedLane(double width, SUMOVehicleClass vclass);
1365
1367 void setPermissions(SVCPermissions permissions, int lane = -1);
1368
1370 void setPreferredVehicleClass(SVCPermissions permissions, int lane = -1);
1371
1373 void setPermittedChanging(int lane, SVCPermissions changeLeft, SVCPermissions changeRight);
1374
1376 void allowVehicleClass(int lane, SUMOVehicleClass vclass);
1377
1379 void disallowVehicleClass(int lane, SUMOVehicleClass vclass);
1380
1382 void preferVehicleClass(int lane, SVCPermissions vclasses);
1383
1385 void setLaneWidth(int lane, double width);
1386
1388 void setLaneType(int lane, const std::string& type);
1389
1391 void setEndOffset(int lane, double offset);
1392
1394 void setSpeed(int lane, double speed);
1395
1397 void setFriction(int lane, double friction);
1398
1401 bool setEdgeStopOffset(int lane, const StopOffset& offset, bool overwrite = false);
1402
1404 void setAcceleration(int lane, bool accelRamp);
1405
1409 }
1410
1411 bool isOffRamp() const {
1412 return myIsOffRamp;
1413 }
1414
1416 void setLaneShape(int lane, const PositionVector& shape);
1417
1419 SVCPermissions getPermissions(int lane = -1) const;
1420
1422 void setOrigID(const std::string origID, const bool append, const int laneIdx = -1);
1423
1425 void setDistance(double distance) {
1426 myDistance = distance;
1427 }
1428
1430 void setBidi(bool isBidi) {
1431 myIsBidi = isBidi;
1432 }
1433
1435 bool isBidi() {
1436 return myIsBidi;
1437 }
1438
1439 // @brief returns a reference to the internal structure for the convenience of netedit
1440 Lane& getLaneStruct(int lane) {
1441 assert(lane >= 0);
1442 assert(lane < (int)myLanes.size());
1443 return myLanes[lane];
1444 }
1445
1446 // @brief returns a reference to the internal structure for the convenience of netedit
1447 const Lane& getLaneStruct(int lane) const {
1448 assert(lane >= 0);
1449 assert(lane < (int)myLanes.size());
1450 return myLanes[lane];
1451 }
1452
1457
1458 /* @brief fill connection attributes shape, viaShape, ...
1459 *
1460 * @param[in,out] edgeIndex The number of connections already handled
1461 * @param[in,out] splitIndex The number of via edges already built
1462 * @param[in] tryIgnoreNodePositions Does not add node geometries if geom.size()>=2
1463 */
1464 double buildInnerEdges(const NBNode& n, int noInternalNoSplits, int& linkIndex, int& splitIndex);
1465
1467 inline const std::vector<NBSign>& getSigns() const {
1468 return mySigns;
1469 }
1470
1472 inline void addSign(NBSign sign) {
1473 mySigns.push_back(sign);
1474 }
1475
1478
1480 void setNodeBorder(const NBNode* node, const Position& p, const Position& p2, bool rectangularCut);
1481 const PositionVector& getNodeBorder(const NBNode* node) const;
1482 void resetNodeBorder(const NBNode* node);
1483
1485 bool isBidiRail(bool ignoreSpread = false) const;
1486
1488 bool isBidiEdge(bool checkPotential = false) const;
1489
1491 bool isRailDeadEnd() const;
1492
1494 void debugPrintConnections(bool outgoing = true, bool incoming = false) const;
1495
1497 static double firstIntersection(const PositionVector& v1, const PositionVector& v2, double width1, double width2, const std::string& error = "", bool secondIntersection = false);
1498
1502 static PositionVector startShapeAt(const PositionVector& laneShape, const NBNode* startNode, PositionVector nodeShape);
1503
1505
1506
1507 static inline double getTravelTimeStatic(const NBEdge* const edge, const NBVehicle* const /*veh*/, double /*time*/) {
1508 return edge->getLength() / edge->getSpeed();
1509 }
1510
1511 static int getLaneIndexFromLaneID(const std::string laneID);
1512
1514 void setNumericalID(int index) {
1515 myIndex = index;
1516 }
1517
1522 int getNumericalID() const {
1523 return myIndex;
1524 }
1525
1526 const NBEdge* getBidiEdge() const {
1527 return isBidiRail() || isBidiEdge() ? myPossibleTurnDestination : nullptr;
1528 }
1529
1533
1534
1537 const ConstRouterEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const;
1538
1540 const std::string& getID() const {
1541 return Named::getID();
1542 }
1543
1545 bool joinLanes(SVCPermissions perms);
1546
1548 void resetLaneShapes();
1549
1552
1555 NBEdge* getStraightContinuation(SVCPermissions permissions) const;
1556
1559 NBEdge* getStraightPredecessor(SVCPermissions permissions) const;
1560
1562 NBEdge* guessOpposite(bool reguess = false);
1563
1564
1565 const std::string& getTurnSignTarget() const {
1566 return myTurnSignTarget;
1567 }
1568
1569 void setTurnSignTarget(const std::string& target) {
1570 myTurnSignTarget = target;
1571 }
1572
1574 static EdgeVector filterByPermissions(const EdgeVector& edges, SVCPermissions permissions);
1575
1576private:
1581 private:
1583 std::map<NBEdge*, std::vector<int> > myConnections;
1584
1587
1588 public:
1591 : myTransitions(transitions) { }
1592
1595
1597 void execute(const int lane, const int virtEdge);
1598
1600 const std::map<NBEdge*, std::vector<int> >& getBuiltConnections() const {
1601 return myConnections;
1602 }
1603
1604 private:
1607
1610 };
1611
1612
1621 public:
1623 enum class Direction {
1624 RIGHTMOST,
1625 LEFTMOST,
1626 FORWARD
1627 };
1628
1629 public:
1631 MainDirections(const EdgeVector& outgoing, NBEdge* parent, NBNode* to, const std::vector<int>& availableLanes);
1632
1635
1637 int getStraightest() const {
1638 return myStraightest;
1639 }
1640
1642 bool empty() const;
1643
1645 bool includes(Direction d) const;
1646
1647 private:
1650
1652 std::vector<Direction> myDirs;
1653
1656
1659 };
1660
1662 PositionVector computeLaneShape(int lane, double offset) const;
1663
1665 void computeLaneShapes();
1666
1667private:
1684 void init(int noLanes, bool tryIgnoreNodePositions, const std::string& origID);
1685
1687 void divideOnEdges(const EdgeVector* outgoing);
1688
1690 void divideSelectedLanesOnEdges(const EdgeVector* outgoing, const std::vector<int>& availableLanes);
1691
1693 void addStraightConnections(const EdgeVector* outgoing, const std::vector<int>& availableLanes, const std::vector<int>& priorities);
1694
1696 const std::vector<int> prepareEdgePriorities(const EdgeVector* outgoing, const std::vector<int>& availableLanes);
1697
1700
1703 void moveConnectionToLeft(int lane);
1704
1708 void moveConnectionToRight(int lane);
1709
1711 bool canMoveConnection(const Connection& con, int newFromLane) const;
1713
1715 void computeAngle();
1716
1718 bool bothLeftTurns(LinkDirection dir, const NBEdge* otherFrom, LinkDirection dir2) const;
1719 bool haveIntersection(const NBNode& n, const PositionVector& shape, const NBEdge* otherFrom, const NBEdge::Connection& otherCon,
1720 int numPoints, double width1, double width2, int shapeFlag = 0) const;
1721
1723 bool hasRestrictedLane(SUMOVehicleClass vclass) const;
1724
1726 void restoreRestrictedLane(SUMOVehicleClass vclass, std::vector<NBEdge::Lane> oldLanes, PositionVector oldGeometry, std::vector<NBEdge::Connection> oldConnections);
1727
1729 double assignInternalLaneLength(std::vector<Connection>::iterator i, int numLanes, double lengthSum, bool averageLength);
1730
1732 static std::vector<LinkDirection> decodeTurnSigns(int turnSigns, int shift = 0);
1733 static void updateTurnPermissions(SVCPermissions& perm, LinkDirection dir, SVCPermissions spec, std::vector<LinkDirection> dirs);
1734
1736 bool applyTurnSigns();
1737
1738 /* @brief remove connections with incompatible permissions (should only be
1739 * called for guessed connections) */
1741
1742private:
1747
1749 std::string myType;
1750
1753
1755 std::string myTurnSignTarget;
1756
1758 double myLength;
1759
1766
1769
1771 double mySpeed;
1772
1775
1778
1782 std::vector<Connection> myConnections;
1783
1785 std::vector<Connection> myConnectionsToDelete;
1786
1789
1792
1795
1798
1801
1804
1807
1813
1816
1820 std::vector<Lane> myLanes;
1821
1824
1827
1830
1832 std::string myStreetName;
1833
1835 std::vector<NBSign> mySigns;
1836
1840
1846
1849
1852
1855
1856 // @brief a static list of successor edges. Set by NBEdgeCont and requires reset when the network changes
1858
1859 // @brief a static list of successor edges. Set by NBEdgeCont and requires reset when the network changes
1861
1862 // @brief default length for overriding connection lengths
1864
1865public:
1866
1869 public:
1871 connections_toedge_finder(const NBEdge* const edge2find, bool hasFromLane = false) :
1872 myHasFromLane(hasFromLane),
1873 myEdge2Find(edge2find) { }
1874
1876 bool operator()(const Connection& c) const {
1877 return c.toEdge == myEdge2Find && (!myHasFromLane || c.fromLane != -1);
1878 }
1879
1880 private:
1882 const bool myHasFromLane;
1883
1885 const NBEdge* const myEdge2Find;
1886 };
1887
1890 public:
1892 connections_toedgelane_finder(const NBEdge* const edge2find, int lane2find, int fromLane2find) :
1893 myEdge2Find(edge2find),
1894 myLane2Find(lane2find),
1895 myFromLane2Find(fromLane2find) { }
1896
1898 bool operator()(const Connection& c) const {
1899 return c.toEdge == myEdge2Find && c.toLane == myLane2Find && (myFromLane2Find < 0 || c.fromLane == myFromLane2Find);
1900 }
1901
1902 private:
1904 const NBEdge* const myEdge2Find;
1905
1908
1911 };
1912
1915 public:
1917 connections_finder(int fromLane, NBEdge* const edge2find, int lane2find, bool invertEdge2find = false) :
1918 myFromLane(fromLane), myEdge2Find(edge2find), myLane2Find(lane2find), myInvertEdge2find(invertEdge2find) { }
1919
1921 bool operator()(const Connection& c) const {
1922 return ((c.fromLane == myFromLane || myFromLane == -1)
1924 && (c.toLane == myLane2Find || myLane2Find == -1));
1925 }
1926
1927 private:
1930
1933
1936
1939 };
1940
1943 public:
1945 connections_conflict_finder(int fromLane, NBEdge* const edge2find, bool checkRight) :
1946 myFromLane(fromLane), myEdge2Find(edge2find), myCheckRight(checkRight) { }
1947
1949 bool operator()(const Connection& c) const {
1950 return (((myCheckRight && c.fromLane < myFromLane) || (!myCheckRight && c.fromLane > myFromLane))
1951 && c.fromLane >= 0 // already assigned
1952 && c.toEdge == myEdge2Find);
1953 }
1954
1955 private:
1958
1961
1964 };
1965
1968 public:
1970 connections_fromlane_finder(int lane2find) : myLane2Find(lane2find) { }
1971
1973 bool operator()(const Connection& c) const {
1974 return c.fromLane == myLane2Find;
1975 }
1976
1977 private:
1980
1981 private:
1984 };
1985
1987 static bool connections_sorter(const Connection& c1, const Connection& c2);
1988
1994 public:
1997
1998 public:
2000 int operator()(const Connection& c1, const Connection& c2) const;
2001
2002 private:
2005 };
2006
2007private:
2009 NBEdge(const NBEdge& s) = delete;
2010
2012 NBEdge& operator=(const NBEdge& s) = delete;
2013
2015 NBEdge();
2016};
std::vector< std::pair< const NBRouterEdge *, const NBRouterEdge * > > ConstRouterEdgePairVector
Definition NBCont.h:46
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
Definition NBCont.h:42
KeepClear
keepClear status of connections
Definition NBCont.h:58
@ KEEPCLEAR_UNSPECIFIED
Definition NBCont.h:61
const SVCPermissions SVC_UNSPECIFIED
permissions not specified
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
LaneSpreadFunction
Numbers representing special SUMO-XML-attribute values Information how the edge's lateral offset shal...
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)....
A road/street connecting two junctions (netedit-version)
Definition GNEEdge.h:53
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition GNELane.h:46
Holds (- relative to the edge it is build from -!!!) the list of main directions a vehicle that drive...
Definition NBEdge.h:1620
bool empty() const
returns the information whether no following street has a higher priority
Definition NBEdge.cpp:230
MainDirections(const MainDirections &)=delete
Invalidated copy constructor.
bool includes(Direction d) const
returns the information whether the street in the given direction has a higher priority
Definition NBEdge.cpp:236
int getStraightest() const
returns the index of the straightmost among the given outgoing edges
Definition NBEdge.h:1637
std::vector< Direction > myDirs
list of the main direction within the following junction relative to the edge
Definition NBEdge.h:1652
~MainDirections()
destructor
Definition NBEdge.cpp:226
MainDirections & operator=(const MainDirections &)=delete
Invalidated assignment operator.
int myStraightest
the index of the straightmost among the given outgoing edges
Definition NBEdge.h:1649
Direction
enum of possible directions
Definition NBEdge.h:1623
A class that being a bresenham-callback assigns the incoming lanes to the edges.
Definition NBEdge.h:1580
const std::map< NBEdge *, std::vector< int > > & getBuiltConnections() const
get built connections
Definition NBEdge.h:1600
ToEdgeConnectionsAdder(const ToEdgeConnectionsAdder &)=delete
Invalidated copy constructor.
ToEdgeConnectionsAdder & operator=(const ToEdgeConnectionsAdder &)=delete
Invalidated assignment operator.
~ToEdgeConnectionsAdder()
destructor
Definition NBEdge.h:1594
ToEdgeConnectionsAdder(const EdgeVector &transitions)
constructor
Definition NBEdge.h:1590
const EdgeVector & myTransitions
the transition from the virtual lane to the edge it belongs to
Definition NBEdge.h:1586
void execute(const int lane, const int virtEdge)
executes a bresenham - step
Definition NBEdge.cpp:142
std::map< NBEdge *, std::vector< int > > myConnections
map of edges to this edge's lanes that reach them
Definition NBEdge.h:1583
NBEdge *const myEdge2Find
edge to find
Definition NBEdge.h:1960
bool operator()(const Connection &c) const
operator ()
Definition NBEdge.h:1949
connections_conflict_finder(int fromLane, NBEdge *const edge2find, bool checkRight)
constructor
Definition NBEdge.h:1945
bool myCheckRight
check if is right
Definition NBEdge.h:1963
int myFromLane
index of from lane
Definition NBEdge.h:1957
int myLane2Find
lane to find
Definition NBEdge.h:1935
bool operator()(const Connection &c) const
operator ()
Definition NBEdge.h:1921
connections_finder(int fromLane, NBEdge *const edge2find, int lane2find, bool invertEdge2find=false)
constructor
Definition NBEdge.h:1917
NBEdge *const myEdge2Find
edge to find
Definition NBEdge.h:1932
int myFromLane
index of from lane
Definition NBEdge.h:1929
bool myInvertEdge2find
invert edge to find
Definition NBEdge.h:1938
int myLane2Find
index of lane to find
Definition NBEdge.h:1979
bool operator()(const Connection &c) const
operator ()
Definition NBEdge.h:1973
connections_fromlane_finder & operator=(const connections_fromlane_finder &s)=delete
invalidated assignment operator
connections_fromlane_finder(int lane2find)
@briefconstructor
Definition NBEdge.h:1970
Class to sort edges by their angle.
Definition NBEdge.h:1993
NBEdge * myEdge
the edge to compute the relative angle of
Definition NBEdge.h:2004
int operator()(const Connection &c1, const Connection &c2) const
comparing operation
Definition NBEdge.cpp:245
connections_relative_edgelane_sorter(NBEdge *e)
constructor
Definition NBEdge.h:1996
connections_toedge_finder(const NBEdge *const edge2find, bool hasFromLane=false)
constructor
Definition NBEdge.h:1871
const bool myHasFromLane
check if has from lane
Definition NBEdge.h:1882
bool operator()(const Connection &c) const
operator ()
Definition NBEdge.h:1876
const NBEdge *const myEdge2Find
edge to find
Definition NBEdge.h:1885
bool operator()(const Connection &c) const
operator ()
Definition NBEdge.h:1898
int myFromLane2Find
from lane to find
Definition NBEdge.h:1910
const NBEdge *const myEdge2Find
edge to find
Definition NBEdge.h:1904
connections_toedgelane_finder(const NBEdge *const edge2find, int lane2find, int fromLane2find)
constructor
Definition NBEdge.h:1892
Storage for edges, including some functionality operating on multiple edges.
Definition NBEdgeCont.h:59
The representation of a single edge during network building.
Definition NBEdge.h:92
void setStreetName(const std::string &name)
sets the street name of this edge
Definition NBEdge.h:680
void reinit(NBNode *from, NBNode *to, const std::string &type, double speed, double friction, int nolanes, int priority, PositionVector geom, double width, double endOffset, const std::string &streetName, LaneSpreadFunction spread, bool tryIgnoreNodePositions=false)
Resets initial values.
Definition NBEdge.cpp:386
void updateRemovedNodes(const std::string &removed)
update parameter with removed nodes
Definition NBEdge.cpp:4128
void addGeometryPoint(int index, const Position &p)
Adds a further geometry point.
Definition NBEdge.cpp:1025
static std::vector< LinkDirection > decodeTurnSigns(int turnSigns, int shift=0)
decode bitset
Definition NBEdge.cpp:2689
void mirrorX()
mirror coordinates along the x-axis
Definition NBEdge.cpp:591
void setPreferredVehicleClass(SVCPermissions permissions, int lane=-1)
set preferred Vehicle Class
Definition NBEdge.cpp:4500
static const int TURN_SIGN_SHIFT_BUS
shift values for decoding turn signs
Definition NBEdge.h:379
double getLaneSpeed(int lane) const
get lane speed
Definition NBEdge.cpp:2231
static const int TURN_SIGN_SHIFT_BICYCLE
Definition NBEdge.h:381
NBEdge * guessOpposite(bool reguess=false)
set oppositeID and return opposite edge if found
Definition NBEdge.cpp:5041
void setPermittedChanging(int lane, SVCPermissions changeLeft, SVCPermissions changeRight)
set allowed classes for changing to the left and right from the given lane
Definition NBEdge.cpp:4514
double getLength() const
Returns the computed length of the edge.
Definition NBEdge.h:599
double myLaneWidth
This width of this edge's lanes.
Definition NBEdge.h:1815
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
Definition NBEdge.cpp:4523
std::vector< Connection > myConnectionsToDelete
List of connections marked for delayed removal.
Definition NBEdge.h:1785
const EdgeVector * getConnectedSorted()
Returns the list of outgoing edges without the turnaround sorted in clockwise direction.
Definition NBEdge.cpp:1365
double getDistancAt(double pos) const
get distance at the given offset
Definition NBEdge.cpp:5072
double myEndOffset
This edges's offset to the intersection begin (will be applied to all lanes)
Definition NBEdge.h:1806
const std::vector< Connection > & getConnections() const
Returns the connections.
Definition NBEdge.h:1047
int myToJunctionPriority
The priority normalised for the node the edge is incoming in.
Definition NBEdge.h:1797
const Position & getSignalPosition() const
Returns the position of a traffic signal on this edge.
Definition NBEdge.h:718
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given
Definition NBEdge.cpp:4486
bool isInsideTLS() const
Returns whether this edge was marked as being within an intersection.
Definition NBEdge.h:1154
StopOffset myEdgeStopOffset
A vClass specific stop offset - assumed of length 0 (unspecified) or 1. For the latter case the int i...
Definition NBEdge.h:1812
JunctionPriority
junction priority values set by setJunctionPriority
Definition NBEdge.h:384
@ ROUNDABOUT
Definition NBEdge.h:387
@ PRIORITY_ROAD
Definition NBEdge.h:386
@ MINOR_ROAD
Definition NBEdge.h:385
double getLoadedLength() const
Returns the length was set explicitly or the computed length if it wasn't set.
Definition NBEdge.h:608
double getCrossingAngle(NBNode *node)
return the angle for computing pedestrian crossings at the given node
Definition NBEdge.cpp:4676
const Lane & getLaneStruct(int lane) const
Definition NBEdge.h:1447
void addBikeLane(double width)
add a bicycle lane of the given width and shift existing connctions
Definition NBEdge.cpp:4729
bool expandableBy(NBEdge *possContinuation, std::string &reason) const
Check if Node is expandable.
Definition NBEdge.cpp:3964
double getLaneFriction(int lane) const
get lane friction of specified lane
Definition NBEdge.cpp:2237
void recheckOpposite(const NBEdgeCont &ec, bool fixOppositeLengths)
recheck whether all opposite and bidi settings are consistent
Definition NBEdge.cpp:3186
const ConstRouterEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Returns the following edges for the given vClass.
Definition NBEdge.cpp:4932
void init(int noLanes, bool tryIgnoreNodePositions, const std::string &origID)
Initialization routines common to all constructors.
Definition NBEdge.cpp:463
void setSpeed(int lane, double speed)
set lane specific speed (negative lane implies set for all lanes)
Definition NBEdge.cpp:4438
void reinitNodes(NBNode *from, NBNode *to)
Resets nodes but keeps all other values the same (used when joining)
Definition NBEdge.cpp:437
double mySpeed
The maximal speed.
Definition NBEdge.h:1771
bool hasLaneSpecificFriction() const
whether lanes differ in friction
Definition NBEdge.cpp:2483
double getLaneWidth() const
Returns the default width of lanes of this edge.
Definition NBEdge.h:648
PositionVector getCWBoundaryLine(const NBNode &n) const
get the outer boundary of this edge when going clock-wise around the given node
Definition NBEdge.cpp:3928
NBNode * getToNode() const
Returns the destination node of the edge.
Definition NBEdge.h:552
void checkGeometry(const double maxAngle, bool fixAngle, const double minRadius, bool fix, bool silent)
Check the angles of successive geometry segments.
Definition NBEdge.cpp:1057
std::vector< Connection > myConnections
List of connections to following edges.
Definition NBEdge.h:1782
Connection & getConnectionRef(int fromLane, const NBEdge *to, int toLane)
Returns reference to the specified connection This method goes through "myConnections" and returns th...
Definition NBEdge.cpp:1334
NBEdge()
constructor for dummy edge
Definition NBEdge.cpp:363
void divideOnEdges(const EdgeVector *outgoing)
divides the lanes on the outgoing edges
Definition NBEdge.cpp:3345
ConstRouterEdgePairVector myViaSuccessors
Definition NBEdge.h:1860
PositionVector getCCWBoundaryLine(const NBNode &n) const
get the outer boundary of this edge when going counter-clock-wise around the given node
Definition NBEdge.cpp:3946
double buildInnerEdges(const NBNode &n, int noInternalNoSplits, int &linkIndex, int &splitIndex)
Definition NBEdge.cpp:1715
static const double UNSPECIFIED_FRICTION
unspecified lane friction
Definition NBEdge.h:355
void incLaneNo(int by)
increment lane
Definition NBEdge.cpp:4219
static EdgeVector filterByPermissions(const EdgeVector &edges, SVCPermissions permissions)
return only those edges that permit at least one of the give permissions
Definition NBEdge.cpp:4999
Lane & getLaneStruct(int lane)
Definition NBEdge.h:1440
const Connection & getConnection(int fromLane, const NBEdge *to, int toLane) const
Returns the specified connection (unmodifiable) This method goes through "myConnections" and returns ...
Definition NBEdge.cpp:1322
const std::vector< NBSign > & getSigns() const
get Signs
Definition NBEdge.h:1467
void addLane(int index, bool recomputeShape, bool recomputeConnections, bool shiftIndices)
add lane
Definition NBEdge.cpp:4175
void markOffRamp(bool isOffRamp)
marks this edge has being an offRamp or leading to one (used for connection computation)
Definition NBEdge.h:1407
bool hasLaneSpecificSpeed() const
whether lanes differ in speed
Definition NBEdge.cpp:2473
void setAverageLengthWithOpposite(double val)
patch average lane length in regard to the opposite edge
Definition NBEdge.cpp:4543
void disallowVehicleClass(int lane, SUMOVehicleClass vclass)
set disallowed class for the given lane or for all lanes if -1 is given
Definition NBEdge.cpp:4282
void removeInvalidConnections()
Definition NBEdge.cpp:3283
double getShapeStartAngle() const
Returns the angle at the start of the edge.
Definition NBEdge.cpp:2432
static const int UNSPECIFIED_INTERNAL_LANE_INDEX
internal lane computation not yet done
Definition NBEdge.h:373
bool isBidi()
return whether this edge should be a bidi edge
Definition NBEdge.h:1435
void appendTurnaround(bool noTLSControlled, bool noFringe, bool onlyDeadends, bool onlyTurnlane, bool noGeometryLike, bool checkPermissions)
Add a connection to the previously computed turnaround, if wished and a turning direction exists (myT...
Definition NBEdge.cpp:3715
static bool connections_sorter(const Connection &c1, const Connection &c2)
connections_sorter sort by fromLane, toEdge and toLane
Definition NBEdge.cpp:4558
std::string myType
The type of the edge.
Definition NBEdge.h:1749
const PositionVector & getGeometry() const
Returns the geometry of the edge.
Definition NBEdge.h:789
bool hasPermissions() const
whether at least one lane has restrictions
Definition NBEdge.cpp:2448
double myTotalAngle
Definition NBEdge.h:1764
std::vector< Connection > & getConnections()
Returns the connections.
Definition NBEdge.h:1054
LaneSpreadFunction getLaneSpreadFunction() const
Returns how this edge's lanes' lateral offset is computed.
Definition NBEdge.cpp:1019
bool hasDefaultGeometryEndpoints() const
Returns whether the geometry is terminated by the node positions This default may be violated by init...
Definition NBEdge.cpp:623
std::string myTurnSignTarget
node for which turnSign information applies
Definition NBEdge.h:1755
bool isBidiRail(bool ignoreSpread=false) const
whether this edge is part of a bidirectional railway
Definition NBEdge.cpp:770
static const bool UNSPECIFIED_CONNECTION_UNCONTROLLED
TLS-controlled despite its node controlled not specified.
Definition NBEdge.h:376
const EdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges for the given vClass.
Definition NBEdge.cpp:4914
void dismissVehicleClassInformation()
dimiss vehicle class information
Definition NBEdge.cpp:4549
bool computeEdge2Edges(bool noLeftMovers)
computes the edge (step1: computation of approached edges)
Definition NBEdge.cpp:2598
EdgeBuildingStep getStep() const
The building step of this edge.
Definition NBEdge.h:641
void setInsideTLS(bool inside)
Marks this edge being within an intersection.
Definition NBEdge.h:1147
LaneSpreadFunction myLaneSpreadFunction
The information about how to spread the lanes.
Definition NBEdge.h:1803
void moveConnectionToLeft(int lane)
moves a connection one place to the left;
Definition NBEdge.cpp:1681
void updateChangeRestrictions(SVCPermissions ignoring)
modify all existing restrictions on lane changing
Definition NBEdge.cpp:2249
void restoreBikelane(std::vector< NBEdge::Lane > oldLanes, PositionVector oldGeometry, std::vector< NBEdge::Connection > oldConnections)
restore an previously added BikeLane
Definition NBEdge.cpp:4735
Position getEndpointAtNode(const NBNode *node) const
Definition NBEdge.cpp:641
NBEdge * getStraightContinuation(SVCPermissions permissions) const
return the straightest follower edge for the given permissions or nullptr (never returns turn-arounds...
Definition NBEdge.cpp:5010
bool hasLoadedLength() const
Returns whether a length was set explicitly.
Definition NBEdge.h:618
void resetEndpointAtNode(const NBNode *node)
Definition NBEdge.cpp:646
void restoreSidewalk(std::vector< NBEdge::Lane > oldLanes, PositionVector oldGeometry, std::vector< NBEdge::Connection > oldConnections)
restore an previously added sidewalk
Definition NBEdge.cpp:4723
bool addEdge2EdgeConnection(NBEdge *dest, bool overrideRemoval=false, SVCPermissions permission=SVC_UNSPECIFIED)
Adds a connection to another edge.
Definition NBEdge.cpp:1118
bool addLane2LaneConnection(int fromLane, NBEdge *dest, int toLane, Lane2LaneInfoType type, bool mayUseSameDestination=false, bool mayDefinitelyPass=false, KeepClear keepClear=KEEPCLEAR_UNSPECIFIED, double contPos=UNSPECIFIED_CONTPOS, double visibility=UNSPECIFIED_VISIBILITY_DISTANCE, double speed=UNSPECIFIED_SPEED, double friction=UNSPECIFIED_FRICTION, double length=myDefaultConnectionLength, const PositionVector &customShape=PositionVector::EMPTY, const bool uncontrolled=UNSPECIFIED_CONNECTION_UNCONTROLLED, SVCPermissions permissions=SVC_UNSPECIFIED, const bool indirectLeft=false, const std::string &edgeType="", SVCPermissions changeLeft=SVC_UNSPECIFIED, SVCPermissions changeRight=SVC_UNSPECIFIED, bool postProcess=false)
Adds a connection between the specified this edge's lane and an approached one.
Definition NBEdge.cpp:1154
void divideSelectedLanesOnEdges(const EdgeVector *outgoing, const std::vector< int > &availableLanes)
divide selected lanes on edges
Definition NBEdge.cpp:3435
int getNumericalID() const
Returns the index (numeric id) of the edge.
Definition NBEdge.h:1522
void setTurnSignTarget(const std::string &target)
Definition NBEdge.h:1569
void setDistance(double distance)
set kilometrage at start of edge (negative value implies couting down along the edge)
Definition NBEdge.h:1425
static double getTravelTimeStatic(const NBEdge *const edge, const NBVehicle *const, double)
Definition NBEdge.h:1507
bool setEdgeStopOffset(int lane, const StopOffset &offset, bool overwrite=false)
set lane and vehicle class specific stopOffset (negative lane implies set for all lanes)
Definition NBEdge.cpp:4408
const std::vector< NBEdge::Lane > & getLanes() const
Returns the lane definitions.
Definition NBEdge.h:736
bool hasLaneSpecificStopOffsets() const
whether lanes differ in stopOffsets
Definition NBEdge.cpp:2526
void setNodeBorder(const NBNode *node, const Position &p, const Position &p2, bool rectangularCut)
Set Node border.
Definition NBEdge.cpp:716
int getFirstNonPedestrianLaneIndex(int direction, bool exclusive=false) const
return the first lane with permissions other than SVC_PEDESTRIAN and 0
Definition NBEdge.cpp:4583
EdgeVector mySuccessors
Definition NBEdge.h:1857
void shiftToLanesToEdge(NBEdge *to, int laneOff)
modifify the toLane for all connections to the given edge
Definition NBEdge.cpp:4813
static double myDefaultConnectionLength
Definition NBEdge.h:1863
bool isNearEnough2BeJoined2(NBEdge *e, double threshold) const
Check if edge is near enought to be joined to another edge.
Definition NBEdge.cpp:4167
EdgeBuildingStep myStep
The building step.
Definition NBEdge.h:1746
void setLaneType(int lane, const std::string &type)
set lane specific type (negative lane implies set for all lanes)
Definition NBEdge.cpp:4324
bool computeLanes2Edges()
computes the edge, step2: computation of which lanes approach the edges)
Definition NBEdge.cpp:2654
EdgeBuildingStep
Current state of the edge within the building process.
Definition NBEdge.h:109
@ INIT_REJECT_CONNECTIONS
The edge has been loaded and connections shall not be added.
@ EDGE2EDGES
The relationships between edges are computed/loaded.
@ LANES2LANES_RECHECK
Lanes to lanes - relationships are computed; should be rechecked.
@ LANES2LANES_DONE
Lanes to lanes - relationships are computed; no recheck is necessary/wished.
@ LANES2EDGES
Lanes to edges - relationships are computed/loaded.
@ LANES2LANES_USER
Lanes to lanes - relationships are loaded; no recheck is necessary/wished.
@ INIT
The edge has been loaded, nothing is computed yet.
NBEdge * getStraightPredecessor(SVCPermissions permissions) const
return the straightest predecessor edge for the given permissions or nullptr (never returns turn-arou...
Definition NBEdge.cpp:5025
void remapConnections(const EdgeVector &incoming)
Remaps the connection in a way that allows the removal of it.
Definition NBEdge.cpp:1453
double getSpeed() const
Returns the speed allowed on this edge.
Definition NBEdge.h:625
~NBEdge()
Destructor.
Definition NBEdge.cpp:545
NBNode * myTo
Definition NBEdge.h:1752
double myEndAngle
Definition NBEdge.h:1763
const std::string & getID() const
Definition NBEdge.h:1540
int getFirstAllowedLaneIndex(int direction) const
return the first lane that permits at least 1 vClass or the last lane if search direction of there is...
Definition NBEdge.cpp:4626
bool allowsChangingRight(int lane, SUMOVehicleClass vclass) const
Returns whether the given vehicle class may change left from this lane.
Definition NBEdge.cpp:4670
double getDistance() const
get distance
Definition NBEdge.h:685
static const double UNSPECIFIED_LOADED_LENGTH
no length override given
Definition NBEdge.h:364
void setLaneWidth(int lane, double width)
set lane specific width (negative lane implies set for all lanes)
Definition NBEdge.cpp:4309
void resetLaneShapes()
reset lane shapes to what they would be before cutting with the junction shapes
Definition NBEdge.cpp:2243
bool setControllingTLInformation(const NBConnection &c, const std::string &tlID)
Returns if the link could be set as to be controlled.
Definition NBEdge.cpp:3857
bool bothLeftTurns(LinkDirection dir, const NBEdge *otherFrom, LinkDirection dir2) const
determine conflict between opposite left turns
Definition NBEdge.cpp:2136
bool shiftPositionAtNode(NBNode *node, NBEdge *opposite)
shift geometry at the given node to avoid overlap and return whether geometry was changed
Definition NBEdge.cpp:4824
void setAcceleration(int lane, bool accelRamp)
marks one lane as acceleration lane
Definition NBEdge.cpp:4470
const StopOffset & getEdgeStopOffset() const
Returns the stopOffset to the end of the edge.
Definition NBEdge.cpp:4376
NBNode * tryGetNodeAtPosition(double pos, double tolerance=5.0) const
Returns the node at the given edges length (using an epsilon)
Definition NBEdge.cpp:3808
void setLaneSpreadFunction(LaneSpreadFunction spread)
(Re)sets how the lanes lateral offset shall be computed
Definition NBEdge.cpp:1013
void clearControllingTLInformation()
clears tlID for all connections
Definition NBEdge.cpp:3920
NBEdge & operator=(const NBEdge &s)=delete
invalidated assignment operator
bool isTurningDirectionAt(const NBEdge *const edge) const
Returns whether the given edge is the opposite direction to this edge.
Definition NBEdge.cpp:3795
void addStraightConnections(const EdgeVector *outgoing, const std::vector< int > &availableLanes, const std::vector< int > &priorities)
add some straight connections
Definition NBEdge.cpp:3540
bool hasLaneSpecificPermissions() const
whether lanes differ in allowed vehicle classes
Definition NBEdge.cpp:2459
bool needsLaneSpecificOutput() const
whether at least one lane has values differing from the edges values
Definition NBEdge.cpp:2581
void computeAngle()
computes the angle of this edge and stores it in myAngle
Definition NBEdge.cpp:2334
void roundSpeed()
ensure consistency between input and output speed
Definition NBEdge.cpp:582
bool isBidiEdge(bool checkPotential=false) const
whether this edge is part of a bidirectional edge pair
Definition NBEdge.cpp:782
void setBidi(bool isBidi)
mark this edge as a bidi edge
Definition NBEdge.h:1430
static const double UNSPECIFIED_SIGNAL_OFFSET
unspecified signal offset
Definition NBEdge.h:367
void addSidewalk(double width)
add a pedestrian sidewalk of the given width and shift existing connctions
Definition NBEdge.cpp:4717
bool hasSignalisedConnectionTo(const NBEdge *const e) const
Check if edge has signalised connections.
Definition NBEdge.cpp:4141
const NBNode * getSignalNode() const
Returns the node that (possibly) represents a traffic signal controlling at the end of this edge.
Definition NBEdge.h:723
std::vector< Lane > myLanes
Lane information.
Definition NBEdge.h:1820
int getNumLanes() const
Returns the number of lanes.
Definition NBEdge.h:526
std::vector< Connection > getConnectionsFromLane(int lane, const NBEdge *to=nullptr, int toLane=-1) const
Returns connections from a given lane.
Definition NBEdge.cpp:1308
bool hasAccelLane() const
whether one of the lanes is an acceleration lane
Definition NBEdge.cpp:2539
bool myIsBidi
whether this edge is part of a non-rail bidi edge pair
Definition NBEdge.h:1851
static double firstIntersection(const PositionVector &v1, const PositionVector &v2, double width1, double width2, const std::string &error="", bool secondIntersection=false)
compute the first intersection point between the given lane geometries considering their rspective wi...
Definition NBEdge.cpp:2072
PositionVector myToBorder
Definition NBEdge.h:1844
void extendGeometryAtNode(const NBNode *node, double maxExtent)
linearly extend the geometry at the given node
Definition NBEdge.cpp:679
void setFriction(int lane, double friction)
set lane specific friction (negative lane implies set for all lanes)
Definition NBEdge.cpp:4454
static const double UNSPECIFIED_CONTPOS
unspecified internal junction position
Definition NBEdge.h:358
static const double ANGLE_LOOKAHEAD
the distance at which to take the default angle
Definition NBEdge.h:370
int getNumLanesThatAllow(SVCPermissions permissions, bool allPermissions=true) const
Definition NBEdge.cpp:4652
void reduceGeometry(const double minDist)
Removes points with a distance lesser than the given.
Definition NBEdge.cpp:1035
static NBEdge DummyEdge
Dummy edge to use when a reference must be supplied in the no-arguments constructor (FOX technicality...
Definition NBEdge.h:343
bool joinLanes(SVCPermissions perms)
join adjacent lanes with the given permissions
Definition NBEdge.cpp:4979
void resetNodeBorder(const NBNode *node)
Definition NBEdge.cpp:759
void markAsInLane2LaneState()
mark edge as in lane to state lane
Definition NBEdge.cpp:4262
bool mayBeTLSControlled(int fromLane, NBEdge *toEdge, int toLane) const
return true if certain connection must be controlled by TLS
Definition NBEdge.cpp:3846
void addRestrictedLane(double width, SUMOVehicleClass vclass)
add a lane of the given width, restricted to the given class and shift existing connections
Definition NBEdge.cpp:4751
void removeFromConnections(NBEdge *toEdge, int fromLane=-1, int toLane=-1, bool tryLater=false, const bool adaptToLaneRemoval=false, const bool keepPossibleTurns=false)
Removes the specified connection(s)
Definition NBEdge.cpp:1469
double myLength
The length of the edge.
Definition NBEdge.h:1758
NBEdge::Lane getFirstNonPedestrianLane(int direction) const
get first non-pedestrian lane
Definition NBEdge.cpp:4692
void invalidateConnections(bool reallowSetting=false)
invalidate current connections of edge
Definition NBEdge.cpp:1550
const std::vector< int > prepareEdgePriorities(const EdgeVector *outgoing, const std::vector< int > &availableLanes)
recomputes the edge priorities and manipulates them for a distribution of lanes on edges which is mor...
Definition NBEdge.cpp:3622
int myIndex
the index of the edge in the list of all edges. Set by NBEdgeCont and requires re-set whenever the li...
Definition NBEdge.h:1854
double getTotalWidth() const
Returns the combined width of all lanes of this edge.
Definition NBEdge.cpp:4361
PositionVector cutAtIntersection(const PositionVector &old) const
cut shape at the intersection shapes
Definition NBEdge.cpp:815
Position geometryPositionAtOffset(double offset) const
return position taking into account loaded length
Definition NBEdge.cpp:4857
static const double UNSPECIFIED_VISIBILITY_DISTANCE
unspecified foe visibility for connections
Definition NBEdge.h:361
bool canMoveConnection(const Connection &con, int newFromLane) const
whether the connection can originate on newFromLane
Definition NBEdge.cpp:1672
double getInternalLaneWidth(const NBNode &node, const NBEdge::Connection &connection, const NBEdge::Lane &successor, bool isVia) const
Returns the width of the internal lane associated with the connection.
Definition NBEdge.cpp:4345
void allowVehicleClass(int lane, SUMOVehicleClass vclass)
set allowed class for the given lane or for all lanes if -1 is given
Definition NBEdge.cpp:4269
bool isConnectedTo(const NBEdge *e, const bool ignoreTurnaround=false) const
Returns the information whethe a connection to the given edge has been added (or computed)
Definition NBEdge.cpp:1352
void addSign(NBSign sign)
add Sign
Definition NBEdge.h:1472
double getMaxLaneOffset()
get max lane offset
Definition NBEdge.cpp:3840
void deleteLane(int index, bool recompute, bool shiftIndices)
delete lane
Definition NBEdge.cpp:4230
std::vector< NBSign > mySigns
the street signs along this edge
Definition NBEdge.h:1835
NBEdge * myPossibleTurnDestination
The edge that would be the turn destination if there was one.
Definition NBEdge.h:1791
const PositionVector & getNodeBorder(const NBNode *node) const
Definition NBEdge.cpp:748
const NBNode * mySignalNode
Definition NBEdge.h:1839
bool hasLaneSpecificWidth() const
whether lanes differ in width
Definition NBEdge.cpp:2493
void setNumericalID(int index)
sets the index of the edge in the list of all network edges
Definition NBEdge.h:1514
void moveConnectionToRight(int lane)
moves a connection one place to the right; @noteAttention! no checking for field validity
Definition NBEdge.cpp:1699
std::set< SVCPermissions > getPermissionVariants(int iStart, int iEnd) const
return all permission variants within the specified lane range [iStart, iEnd[
Definition NBEdge.cpp:4640
void reshiftPosition(double xoff, double yoff)
Applies an offset to the edge.
Definition NBEdge.cpp:550
static const int TURN_SIGN_SHIFT_TAXI
Definition NBEdge.h:380
void moveOutgoingConnectionsFrom(NBEdge *e, int laneOff)
move outgoing connection
Definition NBEdge.cpp:3822
std::string getLaneID(int lane) const
get lane ID
Definition NBEdge.cpp:4161
bool myIsOffRamp
whether this edge is an Off-Ramp or leads to one
Definition NBEdge.h:1848
static const double UNSPECIFIED_SPEED
unspecified lane speed
Definition NBEdge.h:352
Lane2LaneInfoType
Modes of setting connections between lanes.
Definition NBEdge.h:130
@ USER
The connection was given by the user.
@ VALIDATED
The connection was computed and validated.
@ COMPUTED
The connection was computed.
double getFriction() const
Returns the friction on this edge.
Definition NBEdge.h:632
static PositionVector startShapeAt(const PositionVector &laneShape, const NBNode *startNode, PositionVector nodeShape)
Definition NBEdge.cpp:947
std::string getSidewalkID()
get the lane id for the canonical sidewalk lane
Definition NBEdge.cpp:4701
std::vector< int > getConnectionLanes(NBEdge *currentOutgoing, bool withBikes=true) const
Returns the list of lanes that may be used to reach the given edge.
Definition NBEdge.cpp:1427
void computeLaneShapes()
compute lane shapes
Definition NBEdge.cpp:2270
double getStartAngle() const
Returns the angle at the start of the edge (relative to the node shape center) The angle is computed ...
Definition NBEdge.h:561
double getAngleAtNodeToCenter(const NBNode *const node) const
Returns the angle of from the node shape center to where the edge meets the node shape.
Definition NBEdge.cpp:2207
int getSpecialLane(SVCPermissions permissions) const
return index of the first lane that allows the given permissions
Definition NBEdge.cpp:4616
bool setConnection(int lane, NBEdge *destEdge, int destLane, Lane2LaneInfoType type, bool mayUseSameDestination=false, bool mayDefinitelyPass=false, KeepClear keepClear=KEEPCLEAR_UNSPECIFIED, double contPos=UNSPECIFIED_CONTPOS, double visibility=UNSPECIFIED_VISIBILITY_DISTANCE, double speed=UNSPECIFIED_SPEED, double friction=UNSPECIFIED_FRICTION, double length=myDefaultConnectionLength, const PositionVector &customShape=PositionVector::EMPTY, const bool uncontrolled=UNSPECIFIED_CONNECTION_UNCONTROLLED, SVCPermissions permissions=SVC_UNSPECIFIED, bool indirectLeft=false, const std::string &edgeType="", SVCPermissions changeLeft=SVC_UNSPECIFIED, SVCPermissions changeRight=SVC_UNSPECIFIED, bool postProcess=false)
Adds a connection to a certain lane of a certain edge.
Definition NBEdge.cpp:1207
bool hasLaneSpecificEndOffset() const
whether lanes differ in offset
Definition NBEdge.cpp:2515
int getJunctionPriority(const NBNode *const node) const
Returns the junction priority (normalised for the node currently build)
Definition NBEdge.cpp:2155
double myDistance
The mileage/kilometrage at the start of this edge in a linear coordination system.
Definition NBEdge.h:1777
bool isOffRamp() const
Definition NBEdge.h:1411
const std::string & getTypeID() const
get ID of type
Definition NBEdge.h:1187
bool myAmMacroscopicConnector
Information whether this edge is a (macroscopic) connector.
Definition NBEdge.h:1829
EdgeVector getConnectedEdges() const
Returns the list of outgoing edges unsorted.
Definition NBEdge.cpp:1402
const std::string & getStreetName() const
Returns the street name of this edge.
Definition NBEdge.h:675
void setLaneShape(int lane, const PositionVector &shape)
sets a custom lane shape
Definition NBEdge.cpp:4478
double myLoadedLength
An optional length to use (-1 if not valid)
Definition NBEdge.h:1823
static void updateTurnPermissions(SVCPermissions &perm, LinkDirection dir, SVCPermissions spec, std::vector< LinkDirection > dirs)
Definition NBEdge.cpp:2701
static void setDefaultConnectionLength(double length)
Definition NBEdge.h:390
void sortOutgoingConnectionsByAngle()
sorts the outgoing connections by their angle relative to their junction
Definition NBEdge.cpp:1441
bool applyTurnSigns()
apply loaded turn sign information
Definition NBEdge.cpp:2712
bool haveIntersection(const NBNode &n, const PositionVector &shape, const NBEdge *otherFrom, const NBEdge::Connection &otherCon, int numPoints, double width1, double width2, int shapeFlag=0) const
Definition NBEdge.cpp:2145
NBEdge(const NBEdge &s)=delete
invalidated copy constructor
void preferVehicleClass(int lane, SVCPermissions vclasses)
prefer certain vehicle classes for the given lane or for all lanes if -1 is given (ensures also permi...
Definition NBEdge.cpp:4295
const NBEdge * getBidiEdge() const
Definition NBEdge.h:1526
NBNode * getFromNode() const
Returns the origin node of the edge.
Definition NBEdge.h:545
double myStartAngle
The angles of the edge.
Definition NBEdge.h:1762
double getAngleAtNodeNormalized(const NBNode *const node) const
Returns the angle of the edge's geometry at the given node and disregards edge direction.
Definition NBEdge.cpp:2191
NBEdge * getTurnDestination(bool possibleDestination=false) const
Definition NBEdge.cpp:4152
double getAngleAtNode(const NBNode *const node) const
Returns the angle of the edge's geometry at the given node.
Definition NBEdge.cpp:2181
bool hasLaneSpecificType() const
whether lanes differ in type
Definition NBEdge.cpp:2504
PositionVector myFromBorder
intersection borders (because the node shape might be invalid)
Definition NBEdge.h:1843
double getSignalOffset() const
Returns the offset of a traffic signal from the end of this edge.
Definition NBEdge.cpp:4570
bool hasDefaultGeometry() const
Returns whether the geometry consists only of the node positions.
Definition NBEdge.cpp:617
void roundGeometry()
ensure consistency between input and output geometries
Definition NBEdge.cpp:570
void setPriority(int priority)
Sets the priority of the edge.
Definition NBEdge.h:538
double getTotalAngle() const
Returns the angle at the start of the edge.
Definition NBEdge.h:592
bool myAmInTLS
Information whether this is lies within a joined tls.
Definition NBEdge.h:1826
void setTurningDestination(NBEdge *e, bool onlyPossible=false)
Sets the turing destination at the given edge.
Definition NBEdge.cpp:2222
bool hasDefaultGeometryEndpointAtNode(const NBNode *node) const
Returns whether the geometry is terminated by the node positions This default may be violated by init...
Definition NBEdge.cpp:630
NBEdge * myTurnDestination
The turn destination edge (if a connection exists)
Definition NBEdge.h:1788
int getPriority() const
Returns the priority of the edge.
Definition NBEdge.h:533
void computeEdgeShape(double smoothElevationThreshold=-1)
Recomputeds the lane shapes to terminate at the node shape For every lane the intersection with the f...
Definition NBEdge.cpp:906
double assignInternalLaneLength(std::vector< Connection >::iterator i, int numLanes, double lengthSum, bool averageLength)
assign length to all lanes of an internal edge
Definition NBEdge.cpp:2032
static const double UNSPECIFIED_WIDTH
unspecified lane width
Definition NBEdge.h:346
bool hasRestrictedLane(SUMOVehicleClass vclass) const
returns whether any lane already allows the given vclass exclusively
Definition NBEdge.cpp:4740
void copyConnectionsFrom(NBEdge *src)
copy connections from antoher edge
Definition NBEdge.cpp:1665
double getEndAngle() const
Returns the angle at the end of the edge (relative to the node shape center) The angle is computed in...
Definition NBEdge.h:570
const StopOffset & getLaneStopOffset(int lane) const
Returns the stop offset to the specified lane's end.
Definition NBEdge.cpp:4382
void debugPrintConnections(bool outgoing=true, bool incoming=false) const
debugging helper to print all connections
Definition NBEdge.cpp:4955
Position mySignalPosition
the position of a traffic light signal on this edge
Definition NBEdge.h:1838
void replaceInConnections(NBEdge *which, NBEdge *by, int laneOff)
replace in current connections of edge
Definition NBEdge.cpp:1562
bool lanesWereAssigned() const
Check if lanes were assigned.
Definition NBEdge.cpp:3834
void restoreRestrictedLane(SUMOVehicleClass vclass, std::vector< NBEdge::Lane > oldLanes, PositionVector oldGeometry, std::vector< NBEdge::Connection > oldConnections)
restore a restricted lane
Definition NBEdge.cpp:4790
void declareConnectionsAsLoaded(EdgeBuildingStep step=EdgeBuildingStep::LANES2LANES_USER)
declares connections as fully loaded. This is needed to avoid recomputing connections if an edge has ...
Definition NBEdge.h:1454
double getEndOffset() const
Returns the offset to the destination node.
Definition NBEdge.h:695
bool isRailDeadEnd() const
whether this edge is a railway edge that does not continue
Definition NBEdge.cpp:800
double myFriction
The current friction.
Definition NBEdge.h:1774
void setEndOffset(int lane, double offset)
set lane specific end-offset (negative lane implies set for all lanes)
Definition NBEdge.cpp:4392
static const double UNSPECIFIED_OFFSET
unspecified lane offset
Definition NBEdge.h:349
void sortOutgoingConnectionsByIndex()
sorts the outgoing connections by their from-lane-index and their to-lane-index
Definition NBEdge.cpp:1447
bool recheckLanes()
recheck whether all lanes within the edge are all right and optimises the connections once again
Definition NBEdge.cpp:2942
int myFromJunctionPriority
The priority normalised for the node the edge is outgoing of.
Definition NBEdge.h:1794
bool addLane2LaneConnections(int fromLane, NBEdge *dest, int toLane, int no, Lane2LaneInfoType type, bool invalidatePrevious=false, bool mayDefinitelyPass=false)
Builds no connections starting at the given lanes.
Definition NBEdge.cpp:1190
void setOrigID(const std::string origID, const bool append, const int laneIdx=-1)
set origID for all lanes or for a specific lane
Definition NBEdge.cpp:4889
PositionVector computeLaneShape(int lane, double offset) const
Computes the shape for the given lane.
Definition NBEdge.cpp:2322
bool allowsChangingLeft(int lane, SUMOVehicleClass vclass) const
Returns whether the given vehicle class may change left from this lane.
Definition NBEdge.cpp:4664
static int getLaneIndexFromLaneID(const std::string laneID)
Definition NBEdge.cpp:4974
bool hasConnectionTo(const NBEdge *destEdge, int destLane, int fromLane=-1) const
Retrieves info about a connection to a certain lane of a certain edge.
Definition NBEdge.cpp:1346
bool isMacroscopicConnector() const
Returns whether this edge was marked as a macroscopic connector.
Definition NBEdge.h:1142
void setAsMacroscopicConnector()
Definition NBEdge.h:1135
bool hasCustomLaneShape() const
whether one of the lanes has a custom shape
Definition NBEdge.cpp:2550
bool hasLaneParams() const
whether one of the lanes has parameters set
Definition NBEdge.cpp:2561
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
Definition NBEdge.cpp:1007
double getShapeEndAngle() const
Returns the angle at the end of the edge.
Definition NBEdge.cpp:2440
bool prohibitsChanging() const
whether one of the lanes prohibits lane changing
Definition NBEdge.cpp:2571
void setLoadedLength(double val)
set loaded length
Definition NBEdge.cpp:4538
const std::string & getTurnSignTarget() const
Definition NBEdge.h:1565
PositionVector myGeom
The geometry for the edge.
Definition NBEdge.h:1800
const PositionVector getInnerGeometry() const
Returns the geometry of the edge without the endpoints.
Definition NBEdge.cpp:611
void setSignalPosition(const Position &pos, const NBNode *signalNode)
sets the offset of a traffic signal from the end of this edge
Definition NBEdge.h:728
void decLaneNo(int by)
decrement lane
Definition NBEdge.cpp:4250
NBNode * myFrom
The source and the destination node.
Definition NBEdge.h:1752
void append(NBEdge *continuation)
append another edge
Definition NBEdge.cpp:4076
void setJunctionPriority(const NBNode *const node, int prio)
Sets the junction priority of the edge.
Definition NBEdge.cpp:2165
double getFinalLength() const
get length that will be assigned to the lanes in the final network
Definition NBEdge.cpp:4867
void shortenGeometryAtNode(const NBNode *node, double reduction)
linearly extend the geometry at the given node
Definition NBEdge.cpp:702
void setGeometry(const PositionVector &g, bool inner=false)
(Re)sets the edge's geometry
Definition NBEdge.cpp:658
int myPriority
The priority of the edge.
Definition NBEdge.h:1768
std::string myStreetName
The street name (or whatever arbitrary string you wish to attach)
Definition NBEdge.h:1832
EdgeVector getIncomingEdges() const
Returns the list of incoming edges unsorted.
Definition NBEdge.cpp:1414
int getFirstNonPedestrianNonBicycleLaneIndex(int direction, bool exclusive=false) const
return the first lane with permissions other than SVC_PEDESTRIAN, SVC_BICYCLE and 0
Definition NBEdge.cpp:4599
Container for nodes during the netbuilding process.
Definition NBNodeCont.h:57
Represents a single node (junction) during network building.
Definition NBNode.h:66
Superclass for NBEdge and NBEdge::Connection to initialize Router.
Definition NBEdge.h:62
virtual double getLength() const =0
virtual ~NBRouterEdge()
Definition NBEdge.h:64
static double getTravelTimeStatic(const NBRouterEdge *const edge, const NBVehicle *const, double)
Definition NBEdge.h:82
bool restricts(const NBVehicle *const) const
Definition NBEdge.h:77
virtual int getNumericalID() const =0
virtual bool isInternal() const
Definition NBEdge.h:71
bool prohibits(const NBVehicle *const) const
Definition NBEdge.h:74
virtual const std::string & getID() const =0
virtual const ConstRouterEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const =0
virtual const NBRouterEdge * getBidiEdge() const =0
virtual double getSpeed() const =0
A class representing a single street sign.
Definition NBSign.h:41
A vehicle as used by router.
Definition NBVehicle.h:42
Base class for objects which have an id.
Definition Named.h:54
const std::string & getID() const
Returns the id.
Definition Named.h:74
Static storage of an output device and its base (abstract) implementation.
An upper class for objects with additional parameters.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
A list of positions.
double length() const
Returns the length.
static const PositionVector EMPTY
empty Vector
stop offset
#define UNUSED_PARAMETER(x)
A structure which describes a connection between edges or lanes.
Definition NBEdge.h:201
bool indirectLeft
Whether this connection is an indirect left turn.
Definition NBEdge.h:261
const std::string & getID() const
Definition NBEdge.h:315
int fromLane
The lane the connections starts at.
Definition NBEdge.h:210
std::string viaID
if Connection have a via, ID of it
Definition NBEdge.h:279
int toLane
The lane the connections yields in.
Definition NBEdge.h:216
std::vector< int > foeInternalLinks
FOE Internal links.
Definition NBEdge.h:288
SVCPermissions permissions
List of vehicle types that are allowed on this connection.
Definition NBEdge.h:252
const ConstRouterEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Definition NBEdge.h:334
const Connection * getBidiEdge() const
Definition NBEdge.h:328
int getNumericalID() const
Definition NBEdge.h:325
std::string getInternalViaLaneID() const
get ID of internal lane (second part)
Definition NBEdge.cpp:98
double speed
custom speed for connection
Definition NBEdge.h:240
NBEdge * toEdge
The edge the connections yields in.
Definition NBEdge.h:213
KeepClear keepClear
whether the junction must be kept clear when using this connection
Definition NBEdge.h:231
double getLength() const
Definition NBEdge.h:322
bool isInternal() const
Definition NBEdge.h:331
double getSpeed() const
Definition NBEdge.h:318
double customLength
custom length for connection
Definition NBEdge.h:246
std::string edgeType
optional type of Connection
Definition NBEdge.h:264
double vmax
maximum velocity
Definition NBEdge.h:273
bool uncontrolled
check if Connection is uncontrolled
Definition NBEdge.h:298
PositionVector customShape
custom shape for connection
Definition NBEdge.h:249
bool mayDefinitelyPass
Information about being definitely free to drive (on-ramps)
Definition NBEdge.h:228
SVCPermissions changeLeft
List of vehicle types that are allowed to change Left from this connections internal lane(s)
Definition NBEdge.h:255
SVCPermissions changeRight
List of vehicle types that are allowed to change right from this connections internal lane(s)
Definition NBEdge.h:258
PositionVector viaShape
shape of via
Definition NBEdge.h:282
std::string getDescription(const NBEdge *parent) const
get string describing this connection
Definition NBEdge.cpp:104
double contPos
custom position for internal junction on this connection
Definition NBEdge.h:234
std::string getInternalLaneID() const
get ID of internal lane
Definition NBEdge.cpp:92
int internalLaneIndex
The lane index of this internal lane within the internal edge.
Definition NBEdge.h:294
std::string tlID
The id of the traffic light that controls this connection.
Definition NBEdge.h:219
int internalViaLaneIndex
Definition NBEdge.h:295
double visibility
custom foe visiblity for connection
Definition NBEdge.h:237
int tlLinkIndex2
The index of the internal junction within the controlling traffic light (optional)
Definition NBEdge.h:225
double length
computed length (average of all internal lane shape lengths that share an internal edge)
Definition NBEdge.h:310
PositionVector shape
shape of Connection
Definition NBEdge.h:270
std::string id
id of Connection
Definition NBEdge.h:267
std::vector< std::string > foeIncomingLanes
FOE Incomings lanes.
Definition NBEdge.h:291
bool haveVia
check if Connection have a Via
Definition NBEdge.h:276
int tlLinkIndex
The index of this connection within the controlling traffic light.
Definition NBEdge.h:222
double viaLength
the length of the via shape (maybe customized)
Definition NBEdge.h:285
static ConstRouterEdgePairVector myViaSuccessors
Definition NBEdge.h:314
An (internal) definition of a single lane of an edge.
Definition NBEdge.h:143
double width
This lane's width.
Definition NBEdge.h:176
StopOffset laneStopOffset
stopOffsets.second - The stop offset for vehicles stopping at the lane's end. Applies if vClass is in...
Definition NBEdge.h:173
int turnSigns
turning signs printed on the road, bitset of LinkDirection (imported from OSM)
Definition NBEdge.h:195
PositionVector customShape
A custom shape for this lane set by the user.
Definition NBEdge.h:189
double endOffset
This lane's offset to the intersection begin.
Definition NBEdge.h:169
std::string type
the type of this lane
Definition NBEdge.h:192
SVCPermissions preferred
List of vehicle types that are preferred on this lane.
Definition NBEdge.h:160
double speed
The speed allowed on this lane.
Definition NBEdge.h:151
std::string oppositeID
An opposite lane ID, if given.
Definition NBEdge.h:179
SVCPermissions changeRight
List of vehicle types that are allowed to change right from this lane.
Definition NBEdge.h:166
double friction
The friction on this lane.
Definition NBEdge.h:154
SVCPermissions changeLeft
List of vehicle types that are allowed to change Left from this lane.
Definition NBEdge.h:163
SVCPermissions permissions
List of vehicle types that are allowed on this lane.
Definition NBEdge.h:157
bool connectionsDone
Whether connection information for this lane is already completed.
Definition NBEdge.h:186
bool accelRamp
Whether this lane is an acceleration lane.
Definition NBEdge.h:182
PositionVector shape
The lane's shape.
Definition NBEdge.h:148