Eclipse SUMO - Simulation of Urban MObility
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-2024 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>
34 #include <utils/geom/Bresenham.h>
38 #include "NBCont.h"
39 #include "NBHelpers.h"
40 #include "NBSign.h"
41 
42 
43 // ===========================================================================
44 // class declarations
45 // ===========================================================================
46 class NBNode;
47 class NBConnection;
48 class NBNodeCont;
49 class NBEdgeCont;
50 class OutputDevice;
51 class GNELane;
52 class NBVehicle;
53 
54 
55 // ===========================================================================
56 // class definitions
57 // ===========================================================================
62 class NBRouterEdge {
63 public:
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 
92 class 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 
100 public:
101 
109  enum class EdgeBuildingStep {
113  INIT,
115  EDGE2EDGES,
117  LANES2EDGES,
124  };
125 
126 
130  enum class Lane2LaneInfoType {
132  COMPUTED,
134  USER,
136  VALIDATED
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 
182  bool accelRamp;
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 
210  int fromLane;
211 
214 
216  int toLane;
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 
246  double customLength;
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 
295 
297  bool uncontrolled = false;
298 
300  std::string getInternalLaneID() const;
301 
303  std::string getDescription(const NBEdge* parent) const;
304 
307 
311  const std::string& getID() const {
312  return id;
313  }
314  double getSpeed() const {
315  return vmax;
316  }
317  // @brief needed for NBRouterEdge
318  double getLength() const {
319  return shape.length() + viaShape.length();
320  }
321  int getNumericalID() const {
322  throw ProcessError("NBEdge::Connection does not implement getNumericalID()");
323  }
324  const Connection* getBidiEdge() const {
325  return nullptr;
326  }
327  bool isInternal() const {
328  return true;
329  }
330  const ConstRouterEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const {
331  UNUSED_PARAMETER(vClass);
332  UNUSED_PARAMETER(ignoreTransientPermissions);
333  return myViaSuccessors;
334  }
336  };
337 
340 
342  static const double UNSPECIFIED_WIDTH;
343 
345  static const double UNSPECIFIED_OFFSET;
346 
348  static const double UNSPECIFIED_SPEED;
349 
351  static const double UNSPECIFIED_FRICTION;
352 
354  static const double UNSPECIFIED_CONTPOS;
355 
357  static const double UNSPECIFIED_VISIBILITY_DISTANCE;
358 
360  static const double UNSPECIFIED_LOADED_LENGTH;
361 
363  static const double UNSPECIFIED_SIGNAL_OFFSET;
364 
366  static const double ANGLE_LOOKAHEAD;
367 
370 
373 
375  static const int TURN_SIGN_SHIFT_BUS = 8;
376  static const int TURN_SIGN_SHIFT_TAXI = 16;
377  static const int TURN_SIGN_SHIFT_BICYCLE = 24;
378 
383  ROUNDABOUT = 1000
384  };
385 
386  static void setDefaultConnectionLength(double length) {
387  myDefaultConnectionLength = length;
388  }
389 
390 public:
410  NBEdge(const std::string& id,
411  NBNode* from, NBNode* to, std::string type,
412  double speed, double friction, int nolanes, int priority,
413  double width, double endOffset,
414  LaneSpreadFunction spread,
415  const std::string& streetName = "");
416 
439  NBEdge(const std::string& id,
440  NBNode* from, NBNode* to, std::string type,
441  double speed, double friction, int nolanes, int priority,
442  double width, double endOffset,
443  PositionVector geom,
444  LaneSpreadFunction spread,
445  const std::string& streetName = "",
446  const std::string& origID = "",
447  bool tryIgnoreNodePositions = false);
448 
460  NBEdge(const std::string& id,
461  NBNode* from, NBNode* to,
462  const NBEdge* tpl,
463  const PositionVector& geom = PositionVector(),
464  int numLanes = -1);
465 
467  ~NBEdge();
468 
469 
485  void reinit(NBNode* from, NBNode* to, const std::string& type,
486  double speed, double friction, int nolanes, int priority,
487  PositionVector geom, double width, double endOffset,
488  const std::string& streetName,
489  LaneSpreadFunction spread,
490  bool tryIgnoreNodePositions = false);
491 
496  void reinitNodes(NBNode* from, NBNode* to);
497 
500 
504  void reshiftPosition(double xoff, double yoff);
505 
507  void mirrorX();
509 
511 
512 
516  int getNumLanes() const {
517  return (int)myLanes.size();
518  }
519 
523  int getPriority() const {
524  return myPriority;
525  }
526 
528  void setPriority(int priority) {
529  myPriority = priority;
530  }
531 
535  inline NBNode* getFromNode() const {
536  return myFrom;
537  }
538 
542  inline NBNode* getToNode() const {
543  return myTo;
544  }
545 
551  inline double getStartAngle() const {
552  return myStartAngle;
553  }
554 
560  inline double getEndAngle() const {
561  return myEndAngle;
562  }
563 
568  double getShapeStartAngle() const;
569 
570 
576  double getShapeEndAngle() const;
577 
582  inline double getTotalAngle() const {
583  return myTotalAngle;
584  }
585 
589  double getLength() const {
590  return myLength;
591  }
592 
593 
598  double getLoadedLength() const {
599  return myLoadedLength > 0 ? myLoadedLength : myLength;
600  }
601 
603  double getFinalLength() const;
604 
608  bool hasLoadedLength() const {
609  return myLoadedLength > 0;
610  }
611 
615  double getSpeed() const {
616  return mySpeed;
617  }
618 
622  double getFriction() const {
623  return myFriction;
624  }
625 
632  return myStep;
633  }
634 
638  double getLaneWidth() const {
639  return myLaneWidth;
640  }
641 
645  double getLaneWidth(int lane) const;
646 
655  double getInternalLaneWidth(
656  const NBNode& node,
657  const NBEdge::Connection& connection,
658  const NBEdge::Lane& successor,
659  bool isVia) const;
660 
662  double getTotalWidth() const;
663 
665  const std::string& getStreetName() const {
666  return myStreetName;
667  }
668 
670  void setStreetName(const std::string& name) {
671  myStreetName = name;
672  }
673 
675  double getDistance() const {
676  return myDistance;
677  }
678 
680  double getDistancAt(double pos) const;
681 
685  double getEndOffset() const {
686  return myEndOffset;
687  }
688 
692  double getEndOffset(int lane) const;
693 
697  const StopOffset& getEdgeStopOffset() const;
698 
702  const StopOffset& getLaneStopOffset(int lane) const;
703 
705  double getSignalOffset() const;
706 
708  const Position& getSignalPosition() const {
709  return mySignalPosition;
710  }
711 
713  const NBNode* getSignalNode() const {
714  return mySignalNode;
715  }
716 
718  void setSignalPosition(const Position& pos, const NBNode* signalNode) {
719  mySignalPosition = pos;
720  mySignalNode = signalNode;
721  }
722 
726  const std::vector<NBEdge::Lane>& getLanes() const {
727  return myLanes;
728  }
730 
735  int getFirstNonPedestrianLaneIndex(int direction, bool exclusive = false) const;
736 
741  int getFirstNonPedestrianNonBicycleLaneIndex(int direction, bool exclusive = false) const;
742 
744  int getSpecialLane(SVCPermissions permissions) const;
745 
749  int getFirstAllowedLaneIndex(int direction) const;
750 
752  NBEdge::Lane getFirstNonPedestrianLane(int direction) const;
753 
755  std::set<SVCPermissions> getPermissionVariants(int iStart, int iEnd) const;
756 
757  /* @brief get lane indices that allow the given permissions
758  * @param[in] allPermissions: whether all the given permissions must be allowed (or just some of them)
759  */
760  int getNumLanesThatAllow(SVCPermissions permissions, bool allPermissions = true) const;
761 
763  bool allowsChangingLeft(int lane, SUMOVehicleClass vclass) const;
764 
766  bool allowsChangingRight(int lane, SUMOVehicleClass vclass) const;
767 
769  double getCrossingAngle(NBNode* node);
770 
772  std::string getSidewalkID();
773 
775 
776 
779  const PositionVector& getGeometry() const {
780  return myGeom;
781  }
782 
784  const PositionVector getInnerGeometry() const;
785 
787  bool hasDefaultGeometry() const;
788 
794  bool hasDefaultGeometryEndpoints() const;
795 
801  bool hasDefaultGeometryEndpointAtNode(const NBNode* node) const;
802 
803  Position getEndpointAtNode(const NBNode* node) const;
804 
815  void setGeometry(const PositionVector& g, bool inner = false);
816 
826  void addGeometryPoint(int index, const Position& p);
827 
829  void extendGeometryAtNode(const NBNode* node, double maxExtent);
830 
832  void shortenGeometryAtNode(const NBNode* node, double reduction);
833 
835  void shiftPositionAtNode(NBNode* node, NBEdge* opposite);
836 
838  Position geometryPositionAtOffset(double offset) const;
839 
849  void computeEdgeShape(double smoothElevationThreshold = -1);
850 
854  const PositionVector& getLaneShape(int i) const;
855 
861 
867 
871  void reduceGeometry(const double minDist);
872 
878  void checkGeometry(const double maxAngle, const double minRadius, bool fix, bool silent);
880 
883 
897  bool addEdge2EdgeConnection(NBEdge* dest, bool overrideRemoval = false, SVCPermissions permission = SVC_UNSPECIFIED);
898 
919  bool addLane2LaneConnection(int fromLane, NBEdge* dest,
920  int toLane, Lane2LaneInfoType type,
921  bool mayUseSameDestination = false,
922  bool mayDefinitelyPass = false,
923  KeepClear keepClear = KEEPCLEAR_UNSPECIFIED,
924  double contPos = UNSPECIFIED_CONTPOS,
925  double visibility = UNSPECIFIED_VISIBILITY_DISTANCE,
926  double speed = UNSPECIFIED_SPEED,
927  double friction = UNSPECIFIED_FRICTION,
928  double length = myDefaultConnectionLength,
929  const PositionVector& customShape = PositionVector::EMPTY,
930  const bool uncontrolled = UNSPECIFIED_CONNECTION_UNCONTROLLED,
931  SVCPermissions permissions = SVC_UNSPECIFIED,
932  const bool indirectLeft = false,
933  const std::string& edgeType = "",
934  SVCPermissions changeLeft = SVC_UNSPECIFIED,
935  SVCPermissions changeRight = SVC_UNSPECIFIED,
936  bool postProcess = false);
937 
955  bool addLane2LaneConnections(int fromLane,
956  NBEdge* dest, int toLane, int no,
957  Lane2LaneInfoType type, bool invalidatePrevious = false,
958  bool mayDefinitelyPass = false);
959 
970  bool setConnection(int lane, NBEdge* destEdge,
971  int destLane,
972  Lane2LaneInfoType type,
973  bool mayUseSameDestination = false,
974  bool mayDefinitelyPass = false,
975  KeepClear keepClear = KEEPCLEAR_UNSPECIFIED,
976  double contPos = UNSPECIFIED_CONTPOS,
977  double visibility = UNSPECIFIED_VISIBILITY_DISTANCE,
978  double speed = UNSPECIFIED_SPEED,
979  double friction = UNSPECIFIED_FRICTION,
980  double length = myDefaultConnectionLength,
981  const PositionVector& customShape = PositionVector::EMPTY,
982  const bool uncontrolled = UNSPECIFIED_CONNECTION_UNCONTROLLED,
983  SVCPermissions permissions = SVC_UNSPECIFIED,
984  bool indirectLeft = false,
985  const std::string& edgeType = "",
986  SVCPermissions changeLeft = SVC_UNSPECIFIED,
987  SVCPermissions changeRight = SVC_UNSPECIFIED,
988  bool postProcess = false);
989 
1000  std::vector<Connection> getConnectionsFromLane(int lane, const NBEdge* to = nullptr, int toLane = -1) const;
1001 
1006  const Connection& getConnection(int fromLane, const NBEdge* to, int toLane) const;
1007 
1012  Connection& getConnectionRef(int fromLane, const NBEdge* to, int toLane);
1013 
1022  bool hasConnectionTo(const NBEdge* destEdge, int destLane, int fromLane = -1) const;
1023 
1030  bool isConnectedTo(const NBEdge* e, const bool ignoreTurnaround = false) const;
1031 
1035  const std::vector<Connection>& getConnections() const {
1036  return myConnections;
1037  }
1038 
1042  std::vector<Connection>& getConnections() {
1043  return myConnections;
1044  }
1045 
1049  const EdgeVector* getConnectedSorted();
1050 
1054  EdgeVector getConnectedEdges() const;
1055 
1059  EdgeVector getIncomingEdges() const;
1060 
1064  std::vector<int> getConnectionLanes(NBEdge* currentOutgoing, bool withBikes = true) const;
1065 
1068 
1071 
1077  void remapConnections(const EdgeVector& incoming);
1078 
1086  void removeFromConnections(NBEdge* toEdge, int fromLane = -1, int toLane = -1, bool tryLater = false, const bool adaptToLaneRemoval = false, const bool keepPossibleTurns = false);
1087 
1089  bool removeFromConnections(const NBEdge::Connection& connectionToRemove);
1090 
1092  void invalidateConnections(bool reallowSetting = false);
1093 
1095  void replaceInConnections(NBEdge* which, NBEdge* by, int laneOff);
1096 
1098  void replaceInConnections(NBEdge* which, const std::vector<NBEdge::Connection>& origConns);
1099 
1101  void copyConnectionsFrom(NBEdge* src);
1102 
1104  void shiftToLanesToEdge(NBEdge* to, int laneOff);
1106 
1112  bool isTurningDirectionAt(const NBEdge* const edge) const;
1113 
1118  void setTurningDestination(NBEdge* e, bool onlyPossible = false);
1119 
1124  myAmMacroscopicConnector = true;
1125  }
1126 
1130  bool isMacroscopicConnector() const {
1131  return myAmMacroscopicConnector;
1132  }
1133 
1135  void setInsideTLS(bool inside) {
1136  myAmInTLS = inside;
1137  }
1138 
1142  bool isInsideTLS() const {
1143  return myAmInTLS;
1144  }
1146 
1152  void setJunctionPriority(const NBNode* const node, int prio);
1153 
1163  int getJunctionPriority(const NBNode* const node) const;
1164 
1166  void setLoadedLength(double val);
1167 
1169  void setAverageLengthWithOpposite(double val);
1170 
1173 
1175  const std::string& getTypeID() const {
1176  return myType;
1177  }
1178 
1180  bool needsLaneSpecificOutput() const;
1181 
1183  bool hasPermissions() const;
1184 
1186  bool hasLaneSpecificPermissions() const;
1187 
1189  bool hasLaneSpecificSpeed() const;
1190 
1192  bool hasLaneSpecificFriction() const;
1193 
1195  bool hasLaneSpecificWidth() const;
1196 
1198  bool hasLaneSpecificType() const;
1199 
1201  bool hasLaneSpecificEndOffset() const;
1202 
1204  bool hasLaneSpecificStopOffsets() const;
1205 
1207  bool hasAccelLane() const;
1208 
1210  bool hasCustomLaneShape() const;
1211 
1213  bool hasLaneParams() const;
1214 
1216  bool prohibitsChanging() const;
1217 
1219  bool computeEdge2Edges(bool noLeftMovers);
1220 
1222  bool computeLanes2Edges();
1223 
1225  bool recheckLanes();
1226 
1235  void appendTurnaround(bool noTLSControlled, bool noFringe, bool onlyDeadends, bool onlyTurnlane, bool noGeometryLike, bool checkPermissions);
1236 
1240  NBNode* tryGetNodeAtPosition(double pos, double tolerance = 5.0) const;
1241 
1243  double getMaxLaneOffset();
1244 
1246  bool lanesWereAssigned() const;
1247 
1249  bool mayBeTLSControlled(int fromLane, NBEdge* toEdge, int toLane) const;
1250 
1252  bool setControllingTLInformation(const NBConnection& c, const std::string& tlID);
1253 
1256 
1258  PositionVector getCWBoundaryLine(const NBNode& n) const;
1259 
1261  PositionVector getCCWBoundaryLine(const NBNode& n) const;
1262 
1264  bool expandableBy(NBEdge* possContinuation, std::string& reason) const;
1265 
1267  void append(NBEdge* continuation);
1268 
1270  bool hasSignalisedConnectionTo(const NBEdge* const e) const;
1271 
1273  void moveOutgoingConnectionsFrom(NBEdge* e, int laneOff);
1274 
1275  /* @brief return the turn destination if it exists
1276  * @param[in] possibleDestination Wether myPossibleTurnDestination should be returned if no turnaround connection
1277  * exists
1278  */
1279  NBEdge* getTurnDestination(bool possibleDestination = false) const;
1280 
1282  std::string getLaneID(int lane) const;
1283 
1285  double getLaneSpeed(int lane) const;
1286 
1288  double getLaneFriction(int lane) const;
1289 
1291  bool isNearEnough2BeJoined2(NBEdge* e, double threshold) const;
1292 
1299  double getAngleAtNode(const NBNode* const node) const;
1300 
1306  double getAngleAtNodeNormalized(const NBNode* const node) const;
1307 
1316  double getAngleAtNodeToCenter(const NBNode* const node) const;
1317 
1319  void incLaneNo(int by);
1320 
1322  void decLaneNo(int by);
1323 
1325  void deleteLane(int index, bool recompute, bool shiftIndices);
1326 
1328  void addLane(int index, bool recomputeShape, bool recomputeConnections, bool shiftIndices);
1329 
1331  void markAsInLane2LaneState();
1332 
1334  void addSidewalk(double width);
1335 
1337  void restoreSidewalk(std::vector<NBEdge::Lane> oldLanes, PositionVector oldGeometry, std::vector<NBEdge::Connection> oldConnections);
1338 
1340  void addBikeLane(double width);
1341 
1343  void restoreBikelane(std::vector<NBEdge::Lane> oldLanes, PositionVector oldGeometry, std::vector<NBEdge::Connection> oldConnections);
1344 
1346  void addRestrictedLane(double width, SUMOVehicleClass vclass);
1347 
1349  void setPermissions(SVCPermissions permissions, int lane = -1);
1350 
1352  void setPreferredVehicleClass(SVCPermissions permissions, int lane = -1);
1353 
1355  void setPermittedChanging(int lane, SVCPermissions changeLeft, SVCPermissions changeRight);
1356 
1358  void allowVehicleClass(int lane, SUMOVehicleClass vclass);
1359 
1361  void disallowVehicleClass(int lane, SUMOVehicleClass vclass);
1362 
1364  void preferVehicleClass(int lane, SVCPermissions vclasses);
1365 
1367  void setLaneWidth(int lane, double width);
1368 
1370  void setLaneType(int lane, const std::string& type);
1371 
1373  void setEndOffset(int lane, double offset);
1374 
1376  void setSpeed(int lane, double speed);
1377 
1379  void setFriction(int lane, double friction);
1380 
1383  bool setEdgeStopOffset(int lane, const StopOffset& offset, bool overwrite = false);
1384 
1386  void setAcceleration(int lane, bool accelRamp);
1387 
1389  void markOffRamp(bool isOffRamp) {
1391  }
1392 
1393  bool isOffRamp() const {
1394  return myIsOffRamp;
1395  }
1396 
1398  void setLaneShape(int lane, const PositionVector& shape);
1399 
1401  SVCPermissions getPermissions(int lane = -1) const;
1402 
1404  void setOrigID(const std::string origID, const bool append, const int laneIdx = -1);
1405 
1407  void setDistance(double distance) {
1408  myDistance = distance;
1409  }
1410 
1412  void setBidi(bool isBidi) {
1413  myIsBidi = isBidi;
1414  }
1415 
1417  bool isBidi() {
1418  return myIsBidi;
1419  }
1420 
1421  // @brief returns a reference to the internal structure for the convenience of netedit
1422  Lane& getLaneStruct(int lane) {
1423  assert(lane >= 0);
1424  assert(lane < (int)myLanes.size());
1425  return myLanes[lane];
1426  }
1427 
1428  // @brief returns a reference to the internal structure for the convenience of netedit
1429  const Lane& getLaneStruct(int lane) const {
1430  assert(lane >= 0);
1431  assert(lane < (int)myLanes.size());
1432  return myLanes[lane];
1433  }
1434 
1437  myStep = step;
1438  }
1439 
1440  /* @brief fill connection attributes shape, viaShape, ...
1441  *
1442  * @param[in,out] edgeIndex The number of connections already handled
1443  * @param[in,out] splitIndex The number of via edges already built
1444  * @param[in] tryIgnoreNodePositions Does not add node geometries if geom.size()>=2
1445  */
1446  double buildInnerEdges(const NBNode& n, int noInternalNoSplits, int& linkIndex, int& splitIndex);
1447 
1449  inline const std::vector<NBSign>& getSigns() const {
1450  return mySigns;
1451  }
1452 
1454  inline void addSign(NBSign sign) {
1455  mySigns.push_back(sign);
1456  }
1457 
1460 
1462  void setNodeBorder(const NBNode* node, const Position& p, const Position& p2, bool rectangularCut);
1463  const PositionVector& getNodeBorder(const NBNode* node) const;
1464  void resetNodeBorder(const NBNode* node);
1465 
1467  bool isBidiRail(bool ignoreSpread = false) const;
1468 
1470  bool isBidiEdge(bool checkPotential = false) const;
1471 
1473  bool isRailDeadEnd() const;
1474 
1476  void debugPrintConnections(bool outgoing = true, bool incoming = false) const;
1477 
1479  static double firstIntersection(const PositionVector& v1, const PositionVector& v2, double width1, double width2, const std::string& error = "", bool secondIntersection = false);
1480 
1484  static PositionVector startShapeAt(const PositionVector& laneShape, const NBNode* startNode, PositionVector nodeShape);
1485 
1487 
1488 
1489  static inline double getTravelTimeStatic(const NBEdge* const edge, const NBVehicle* const /*veh*/, double /*time*/) {
1490  return edge->getLength() / edge->getSpeed();
1491  }
1492 
1493  static int getLaneIndexFromLaneID(const std::string laneID);
1494 
1496  void setNumericalID(int index) {
1497  myIndex = index;
1498  }
1499 
1504  int getNumericalID() const {
1505  return myIndex;
1506  }
1507 
1508  const NBEdge* getBidiEdge() const {
1509  return isBidiRail() || isBidiEdge() ? myPossibleTurnDestination : nullptr;
1510  }
1511 
1514  const EdgeVector& getSuccessors(SUMOVehicleClass vClass = SVC_IGNORING) const;
1515 
1516 
1519  const ConstRouterEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const;
1520 
1522  const std::string& getID() const {
1523  return Named::getID();
1524  }
1525 
1527  bool joinLanes(SVCPermissions perms);
1528 
1530  void resetLaneShapes();
1531 
1534 
1537  NBEdge* getStraightContinuation(SVCPermissions permissions) const;
1538 
1541  NBEdge* getStraightPredecessor(SVCPermissions permissions) const;
1542 
1544  NBEdge* guessOpposite(bool reguess = false);
1545 
1546 
1547  const std::string& getTurnSignTarget() const {
1548  return myTurnSignTarget;
1549  }
1550 
1551  void setTurnSignTarget(const std::string& target) {
1552  myTurnSignTarget = target;
1553  }
1554 
1556  static EdgeVector filterByPermissions(const EdgeVector& edges, SVCPermissions permissions);
1557 
1558 private:
1563  private:
1565  std::map<NBEdge*, std::vector<int> > myConnections;
1566 
1569 
1570  public:
1573  : myTransitions(transitions) { }
1574 
1577 
1579  void execute(const int lane, const int virtEdge);
1580 
1582  const std::map<NBEdge*, std::vector<int> >& getBuiltConnections() const {
1583  return myConnections;
1584  }
1585 
1586  private:
1589 
1592  };
1593 
1594 
1603  public:
1605  enum class Direction {
1606  RIGHTMOST,
1607  LEFTMOST,
1608  FORWARD
1609  };
1610 
1611  public:
1613  MainDirections(const EdgeVector& outgoing, NBEdge* parent, NBNode* to, const std::vector<int>& availableLanes);
1614 
1616  ~MainDirections();
1617 
1619  int getStraightest() const {
1620  return myStraightest;
1621  }
1622 
1624  bool empty() const;
1625 
1627  bool includes(Direction d) const;
1628 
1629  private:
1632 
1634  std::vector<Direction> myDirs;
1635 
1637  MainDirections(const MainDirections&) = delete;
1638 
1641  };
1642 
1644  PositionVector computeLaneShape(int lane, double offset) const;
1645 
1647  void computeLaneShapes();
1648 
1649 private:
1666  void init(int noLanes, bool tryIgnoreNodePositions, const std::string& origID);
1667 
1669  void divideOnEdges(const EdgeVector* outgoing);
1670 
1672  void divideSelectedLanesOnEdges(const EdgeVector* outgoing, const std::vector<int>& availableLanes);
1673 
1675  void addStraightConnections(const EdgeVector* outgoing, const std::vector<int>& availableLanes, const std::vector<int>& priorities);
1676 
1678  const std::vector<int> prepareEdgePriorities(const EdgeVector* outgoing, const std::vector<int>& availableLanes);
1679 
1682 
1685  void moveConnectionToLeft(int lane);
1686 
1690  void moveConnectionToRight(int lane);
1691 
1693  bool canMoveConnection(const Connection& con, int newFromLane) const;
1695 
1697  void computeAngle();
1698 
1700  bool bothLeftTurns(LinkDirection dir, const NBEdge* otherFrom, LinkDirection dir2) const;
1701  bool haveIntersection(const NBNode& n, const PositionVector& shape, const NBEdge* otherFrom, const NBEdge::Connection& otherCon,
1702  int numPoints, double width1, double width2, int shapeFlag = 0) const;
1703 
1705  bool hasRestrictedLane(SUMOVehicleClass vclass) const;
1706 
1708  void restoreRestrictedLane(SUMOVehicleClass vclass, std::vector<NBEdge::Lane> oldLanes, PositionVector oldGeometry, std::vector<NBEdge::Connection> oldConnections);
1709 
1711  double assignInternalLaneLength(std::vector<Connection>::iterator i, int numLanes, double lengthSum, bool averageLength);
1712 
1714  static std::vector<LinkDirection> decodeTurnSigns(int turnSigns, int shift = 0);
1715  static void updateTurnPermissions(SVCPermissions& perm, LinkDirection dir, SVCPermissions spec, std::vector<LinkDirection> dirs);
1716 
1718  bool applyTurnSigns();
1719 
1720 private:
1725 
1727  std::string myType;
1728 
1731 
1733  std::string myTurnSignTarget;
1734 
1736  double myLength;
1737 
1741  double myEndAngle;
1744 
1747 
1749  double mySpeed;
1750 
1752  double myFriction;
1753 
1755  double myDistance;
1756 
1760  std::vector<Connection> myConnections;
1761 
1763  std::vector<Connection> myConnectionsToDelete;
1764 
1767 
1770 
1773 
1776 
1779 
1782 
1784  double myEndOffset;
1785 
1791 
1793  double myLaneWidth;
1794 
1798  std::vector<Lane> myLanes;
1799 
1802 
1805 
1808 
1810  std::string myStreetName;
1811 
1813  std::vector<NBSign> mySigns;
1814 
1818 
1824 
1827 
1829  bool myIsBidi;
1830 
1832  int myIndex;
1833 
1834  // @brief a static list of successor edges. Set by NBEdgeCont and requires reset when the network changes
1836 
1837  // @brief a static list of successor edges. Set by NBEdgeCont and requires reset when the network changes
1839 
1840  // @brief default length for overriding connection lengths
1842 
1843 public:
1844 
1847  public:
1849  connections_toedge_finder(const NBEdge* const edge2find, bool hasFromLane = false) :
1850  myHasFromLane(hasFromLane),
1851  myEdge2Find(edge2find) { }
1852 
1854  bool operator()(const Connection& c) const {
1855  return c.toEdge == myEdge2Find && (!myHasFromLane || c.fromLane != -1);
1856  }
1857 
1858  private:
1860  const bool myHasFromLane;
1861 
1863  const NBEdge* const myEdge2Find;
1864  };
1865 
1868  public:
1870  connections_toedgelane_finder(const NBEdge* const edge2find, int lane2find, int fromLane2find) :
1871  myEdge2Find(edge2find),
1872  myLane2Find(lane2find),
1873  myFromLane2Find(fromLane2find) { }
1874 
1876  bool operator()(const Connection& c) const {
1877  return c.toEdge == myEdge2Find && c.toLane == myLane2Find && (myFromLane2Find < 0 || c.fromLane == myFromLane2Find);
1878  }
1879 
1880  private:
1882  const NBEdge* const myEdge2Find;
1883 
1886 
1889  };
1890 
1893  public:
1895  connections_finder(int fromLane, NBEdge* const edge2find, int lane2find, bool invertEdge2find = false) :
1896  myFromLane(fromLane), myEdge2Find(edge2find), myLane2Find(lane2find), myInvertEdge2find(invertEdge2find) { }
1897 
1899  bool operator()(const Connection& c) const {
1900  return ((c.fromLane == myFromLane || myFromLane == -1)
1902  && (c.toLane == myLane2Find || myLane2Find == -1));
1903  }
1904 
1905  private:
1908 
1911 
1914 
1917  };
1918 
1921  public:
1923  connections_conflict_finder(int fromLane, NBEdge* const edge2find, bool checkRight) :
1924  myFromLane(fromLane), myEdge2Find(edge2find), myCheckRight(checkRight) { }
1925 
1927  bool operator()(const Connection& c) const {
1928  return (((myCheckRight && c.fromLane < myFromLane) || (!myCheckRight && c.fromLane > myFromLane))
1929  && c.fromLane >= 0 // already assigned
1930  && c.toEdge == myEdge2Find);
1931  }
1932 
1933  private:
1936 
1939 
1942  };
1943 
1946  public:
1948  connections_fromlane_finder(int lane2find) : myLane2Find(lane2find) { }
1949 
1951  bool operator()(const Connection& c) const {
1952  return c.fromLane == myLane2Find;
1953  }
1954 
1955  private:
1958 
1959  private:
1962  };
1963 
1965  static bool connections_sorter(const Connection& c1, const Connection& c2);
1966 
1972  public:
1975 
1976  public:
1978  int operator()(const Connection& c1, const Connection& c2) const;
1979 
1980  private:
1983  };
1984 
1985 private:
1987  NBEdge(const NBEdge& s) = delete;
1988 
1990  NBEdge& operator=(const NBEdge& s) = delete;
1991 
1993  NBEdge();
1994 };
std::vector< std::pair< const NBRouterEdge *, const NBRouterEdge * > > ConstRouterEdgePairVector
Definition: NBCont.h:46
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
Definition: NBCont.h:35
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)....
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:30
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:1602
bool empty() const
returns the information whether no following street has a higher priority
Definition: NBEdge.cpp:223
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:229
int getStraightest() const
returns the index of the straightmost among the given outgoing edges
Definition: NBEdge.h:1619
MainDirections(const EdgeVector &outgoing, NBEdge *parent, NBNode *to, const std::vector< int > &availableLanes)
constructor
Definition: NBEdge.cpp:166
std::vector< Direction > myDirs
list of the main direction within the following junction relative to the edge
Definition: NBEdge.h:1634
~MainDirections()
destructor
Definition: NBEdge.cpp:219
int myStraightest
the index of the straightmost among the given outgoing edges
Definition: NBEdge.h:1631
Direction
enum of possible directions
Definition: NBEdge.h:1605
MainDirections & operator=(const MainDirections &)=delete
Invalidated assignment operator.
A class that being a bresenham-callback assigns the incoming lanes to the edges.
Definition: NBEdge.h:1562
ToEdgeConnectionsAdder & operator=(const ToEdgeConnectionsAdder &)=delete
Invalidated assignment operator.
ToEdgeConnectionsAdder(const ToEdgeConnectionsAdder &)=delete
Invalidated copy constructor.
~ToEdgeConnectionsAdder()
destructor
Definition: NBEdge.h:1576
ToEdgeConnectionsAdder(const EdgeVector &transitions)
constructor
Definition: NBEdge.h:1572
const EdgeVector & myTransitions
the transition from the virtual lane to the edge it belongs to
Definition: NBEdge.h:1568
void execute(const int lane, const int virtEdge)
executes a bresenham - step
Definition: NBEdge.cpp:135
const std::map< NBEdge *, std::vector< int > > & getBuiltConnections() const
get built connections
Definition: NBEdge.h:1582
std::map< NBEdge *, std::vector< int > > myConnections
map of edges to this edge's lanes that reach them
Definition: NBEdge.h:1565
NBEdge *const myEdge2Find
edge to find
Definition: NBEdge.h:1938
bool operator()(const Connection &c) const
operator ()
Definition: NBEdge.h:1927
connections_conflict_finder(int fromLane, NBEdge *const edge2find, bool checkRight)
constructor
Definition: NBEdge.h:1923
bool myCheckRight
check if is right
Definition: NBEdge.h:1941
int myFromLane
index of from lane
Definition: NBEdge.h:1935
int myLane2Find
lane to find
Definition: NBEdge.h:1913
bool operator()(const Connection &c) const
operator ()
Definition: NBEdge.h:1899
connections_finder(int fromLane, NBEdge *const edge2find, int lane2find, bool invertEdge2find=false)
constructor
Definition: NBEdge.h:1895
NBEdge *const myEdge2Find
edge to find
Definition: NBEdge.h:1910
int myFromLane
index of from lane
Definition: NBEdge.h:1907
bool myInvertEdge2find
invert edge to find
Definition: NBEdge.h:1916
int myLane2Find
index of lane to find
Definition: NBEdge.h:1957
bool operator()(const Connection &c) const
operator ()
Definition: NBEdge.h:1951
connections_fromlane_finder(int lane2find)
@briefconstructor
Definition: NBEdge.h:1948
connections_fromlane_finder & operator=(const connections_fromlane_finder &s)=delete
invalidated assignment operator
Class to sort edges by their angle.
Definition: NBEdge.h:1971
NBEdge * myEdge
the edge to compute the relative angle of
Definition: NBEdge.h:1982
int operator()(const Connection &c1, const Connection &c2) const
comparing operation
Definition: NBEdge.cpp:238
connections_relative_edgelane_sorter(NBEdge *e)
constructor
Definition: NBEdge.h:1974
connections_toedge_finder(const NBEdge *const edge2find, bool hasFromLane=false)
constructor
Definition: NBEdge.h:1849
const bool myHasFromLane
check if has from lane
Definition: NBEdge.h:1860
bool operator()(const Connection &c) const
operator ()
Definition: NBEdge.h:1854
const NBEdge *const myEdge2Find
edge to find
Definition: NBEdge.h:1863
bool operator()(const Connection &c) const
operator ()
Definition: NBEdge.h:1876
int myFromLane2Find
from lane to find
Definition: NBEdge.h:1888
const NBEdge *const myEdge2Find
edge to find
Definition: NBEdge.h:1882
connections_toedgelane_finder(const NBEdge *const edge2find, int lane2find, int fromLane2find)
constructor
Definition: NBEdge.h:1870
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:670
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:379
void addGeometryPoint(int index, const Position &p)
Adds a further geometry point.
Definition: NBEdge.cpp:985
static std::vector< LinkDirection > decodeTurnSigns(int turnSigns, int shift=0)
decode bitset
Definition: NBEdge.cpp:2618
void mirrorX()
mirror coordinates along the x-axis
Definition: NBEdge.cpp:563
void setPreferredVehicleClass(SVCPermissions permissions, int lane=-1)
set preferred Vehicle Class
Definition: NBEdge.cpp:4285
static const int TURN_SIGN_SHIFT_BUS
shift values for decoding turn signs
Definition: NBEdge.h:375
double getLaneSpeed(int lane) const
get lane speed
Definition: NBEdge.cpp:2160
static const int TURN_SIGN_SHIFT_BICYCLE
Definition: NBEdge.h:377
NBEdge * guessOpposite(bool reguess=false)
set oppositeID and return opposite edge if found
Definition: NBEdge.cpp:4818
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:4299
double getLength() const
Returns the computed length of the edge.
Definition: NBEdge.h:589
double myLaneWidth
This width of this edge's lanes.
Definition: NBEdge.h:1793
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
Definition: NBEdge.cpp:4308
std::vector< Connection > myConnectionsToDelete
List of connections marked for delayed removal.
Definition: NBEdge.h:1763
const EdgeVector * getConnectedSorted()
Returns the list of outgoing edges without the turnaround sorted in clockwise direction.
Definition: NBEdge.cpp:1309
double getDistancAt(double pos) const
get distance at the given offset
Definition: NBEdge.cpp:4846
double myEndOffset
This edges's offset to the intersection begin (will be applied to all lanes)
Definition: NBEdge.h:1784
int myToJunctionPriority
The priority normalised for the node the edge is incoming in.
Definition: NBEdge.h:1775
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:4271
bool isInsideTLS() const
Returns whether this edge was marked as being within an intersection.
Definition: NBEdge.h:1142
StopOffset myEdgeStopOffset
A vClass specific stop offset - assumed of length 0 (unspecified) or 1. For the latter case the int i...
Definition: NBEdge.h:1790
JunctionPriority
junction priority values set by setJunctionPriority
Definition: NBEdge.h:380
@ ROUNDABOUT
Definition: NBEdge.h:383
@ PRIORITY_ROAD
Definition: NBEdge.h:382
@ MINOR_ROAD
Definition: NBEdge.h:381
double getLoadedLength() const
Returns the length was set explicitly or the computed length if it wasn't set.
Definition: NBEdge.h:598
double getCrossingAngle(NBNode *node)
return the angle for computing pedestrian crossings at the given node
Definition: NBEdge.cpp:4461
void addBikeLane(double width)
add a bicycle lane of the given width and shift existing connctions
Definition: NBEdge.cpp:4514
bool expandableBy(NBEdge *possContinuation, std::string &reason) const
Check if Node is expandable.
Definition: NBEdge.cpp:3763
double getLaneFriction(int lane) const
get lane friction of specified lane
Definition: NBEdge.cpp:2166
const ConstRouterEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Returns the following edges for the given vClass.
Definition: NBEdge.cpp:4709
void init(int noLanes, bool tryIgnoreNodePositions, const std::string &origID)
Initialization routines common to all constructors.
Definition: NBEdge.cpp:456
void setSpeed(int lane, double speed)
set lane specific speed (negative lane implies set for all lanes)
Definition: NBEdge.cpp:4223
void reinitNodes(NBNode *from, NBNode *to)
Resets nodes but keeps all other values the same (used when joining)
Definition: NBEdge.cpp:430
double mySpeed
The maximal speed.
Definition: NBEdge.h:1749
bool hasLaneSpecificFriction() const
whether lanes differ in friction
Definition: NBEdge.cpp:2412
double getLaneWidth() const
Returns the default width of lanes of this edge.
Definition: NBEdge.h:638
PositionVector getCWBoundaryLine(const NBNode &n) const
get the outer boundary of this edge when going clock-wise around the given node
Definition: NBEdge.cpp:3727
std::vector< Connection > myConnections
List of connections to following edges.
Definition: NBEdge.h:1760
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:1278
NBEdge()
constructor for dummy edge
Definition: NBEdge.cpp:356
void divideOnEdges(const EdgeVector *outgoing)
divides the lanes on the outgoing edges
Definition: NBEdge.cpp:3144
ConstRouterEdgePairVector myViaSuccessors
Definition: NBEdge.h:1838
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:3745
double buildInnerEdges(const NBNode &n, int noInternalNoSplits, int &linkIndex, int &splitIndex)
Definition: NBEdge.cpp:1653
static const double UNSPECIFIED_FRICTION
unspecified lane friction
Definition: NBEdge.h:351
void incLaneNo(int by)
increment lane
Definition: NBEdge.cpp:4004
static EdgeVector filterByPermissions(const EdgeVector &edges, SVCPermissions permissions)
return only those edges that permit at least one of the give permissions
Definition: NBEdge.cpp:4776
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:1266
const std::string & getStreetName() const
Returns the street name of this edge.
Definition: NBEdge.h:665
void addLane(int index, bool recomputeShape, bool recomputeConnections, bool shiftIndices)
add lane
Definition: NBEdge.cpp:3960
void markOffRamp(bool isOffRamp)
marks this edge has being an offRamp or leading to one (used for connection computation)
Definition: NBEdge.h:1389
bool hasLaneSpecificSpeed() const
whether lanes differ in speed
Definition: NBEdge.cpp:2402
void setAverageLengthWithOpposite(double val)
patch average lane length in regard to the opposite edge
Definition: NBEdge.cpp:4328
void disallowVehicleClass(int lane, SUMOVehicleClass vclass)
set disallowed class for the given lane or for all lanes if -1 is given
Definition: NBEdge.cpp:4067
double getShapeStartAngle() const
Returns the angle at the start of the edge.
Definition: NBEdge.cpp:2361
static const int UNSPECIFIED_INTERNAL_LANE_INDEX
internal lane computation not yet done
Definition: NBEdge.h:369
bool isBidi()
return whether this edge should be a bidi edge
Definition: NBEdge.h:1417
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:3514
static bool connections_sorter(const Connection &c1, const Connection &c2)
connections_sorter sort by fromLane, toEdge and toLane
Definition: NBEdge.cpp:4343
std::string myType
The type of the edge.
Definition: NBEdge.h:1727
const Position & getSignalPosition() const
Returns the position of a traffic signal on this edge.
Definition: NBEdge.h:708
bool hasPermissions() const
whether at least one lane has restrictions
Definition: NBEdge.cpp:2377
double myTotalAngle
Definition: NBEdge.h:1742
LaneSpreadFunction getLaneSpreadFunction() const
Returns how this edge's lanes' lateral offset is computed.
Definition: NBEdge.cpp:979
bool hasDefaultGeometryEndpoints() const
Returns whether the geometry is terminated by the node positions This default may be violated by init...
Definition: NBEdge.cpp:595
std::string myTurnSignTarget
node for which turnSign information applies
Definition: NBEdge.h:1733
bool isBidiRail(bool ignoreSpread=false) const
whether this edge is part of a bidirectional railway
Definition: NBEdge.cpp:730
static const bool UNSPECIFIED_CONNECTION_UNCONTROLLED
TLS-controlled despite its node controlled not specified.
Definition: NBEdge.h:372
const EdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges for the given vClass.
Definition: NBEdge.cpp:4691
void dismissVehicleClassInformation()
dimiss vehicle class information
Definition: NBEdge.cpp:4334
bool computeEdge2Edges(bool noLeftMovers)
computes the edge (step1: computation of approached edges)
Definition: NBEdge.cpp:2527
EdgeBuildingStep getStep() const
The building step of this edge.
Definition: NBEdge.h:631
void setInsideTLS(bool inside)
Marks this edge being within an intersection.
Definition: NBEdge.h:1135
LaneSpreadFunction myLaneSpreadFunction
The information about how to spread the lanes.
Definition: NBEdge.h:1781
void moveConnectionToLeft(int lane)
Definition: NBEdge.cpp:1625
void updateChangeRestrictions(SVCPermissions ignoring)
modify all existing restrictions on lane changing
Definition: NBEdge.cpp:2178
void restoreBikelane(std::vector< NBEdge::Lane > oldLanes, PositionVector oldGeometry, std::vector< NBEdge::Connection > oldConnections)
restore an previously added BikeLane
Definition: NBEdge.cpp:4520
Position getEndpointAtNode(const NBNode *node) const
Definition: NBEdge.cpp:613
NBEdge * getStraightContinuation(SVCPermissions permissions) const
return the straightest follower edge for the given permissions or nullptr (never returns turn-arounds...
Definition: NBEdge.cpp:4787
bool hasLoadedLength() const
Returns whether a length was set explicitly.
Definition: NBEdge.h:608
void restoreSidewalk(std::vector< NBEdge::Lane > oldLanes, PositionVector oldGeometry, std::vector< NBEdge::Connection > oldConnections)
restore an previously added sidewalk
Definition: NBEdge.cpp:4508
bool addEdge2EdgeConnection(NBEdge *dest, bool overrideRemoval=false, SVCPermissions permission=SVC_UNSPECIFIED)
Adds a connection to another edge.
Definition: NBEdge.cpp:1063
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:1098
void divideSelectedLanesOnEdges(const EdgeVector *outgoing, const std::vector< int > &availableLanes)
divide selected lanes on edges
Definition: NBEdge.cpp:3234
int getNumericalID() const
Returns the index (numeric id) of the edge.
Definition: NBEdge.h:1504
void setTurnSignTarget(const std::string &target)
Definition: NBEdge.h:1551
void setDistance(double distance)
set kilometrage at start of edge (negative value implies couting down along the edge)
Definition: NBEdge.h:1407
const NBNode * getSignalNode() const
Returns the node that (possibly) represents a traffic signal controlling at the end of this edge.
Definition: NBEdge.h:713
static double getTravelTimeStatic(const NBEdge *const edge, const NBVehicle *const, double)
Definition: NBEdge.h:1489
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:4193
const std::vector< NBSign > & getSigns() const
get Signs
Definition: NBEdge.h:1449
bool hasLaneSpecificStopOffsets() const
whether lanes differ in stopOffsets
Definition: NBEdge.cpp:2455
void setNodeBorder(const NBNode *node, const Position &p, const Position &p2, bool rectangularCut)
Set Node border.
Definition: NBEdge.cpp:676
int getFirstNonPedestrianLaneIndex(int direction, bool exclusive=false) const
return the first lane with permissions other than SVC_PEDESTRIAN and 0
Definition: NBEdge.cpp:4368
const std::string & getID() const
Definition: NBEdge.h:1522
EdgeVector mySuccessors
Definition: NBEdge.h:1835
const std::vector< NBEdge::Lane > & getLanes() const
Returns the lane definitions.
Definition: NBEdge.h:726
void shiftToLanesToEdge(NBEdge *to, int laneOff)
modifify the toLane for all connections to the given edge
Definition: NBEdge.cpp:4598
void checkGeometry(const double maxAngle, const double minRadius, bool fix, bool silent)
Check the angles of successive geometry segments.
Definition: NBEdge.cpp:1017
static double myDefaultConnectionLength
Definition: NBEdge.h:1841
bool isNearEnough2BeJoined2(NBEdge *e, double threshold) const
Check if edge is near enought to be joined to another edge.
Definition: NBEdge.cpp:3952
EdgeBuildingStep myStep
The building step.
Definition: NBEdge.h:1724
NBNode * getToNode() const
Returns the destination node of the edge.
Definition: NBEdge.h:542
void setLaneType(int lane, const std::string &type)
set lane specific type (negative lane implies set for all lanes)
Definition: NBEdge.cpp:4109
bool computeLanes2Edges()
computes the edge, step2: computation of which lanes approach the edges)
Definition: NBEdge.cpp:2583
const Lane & getLaneStruct(int lane) const
Definition: NBEdge.h:1429
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:4802
void remapConnections(const EdgeVector &incoming)
Remaps the connection in a way that allows the removal of it.
Definition: NBEdge.cpp:1397
double getSpeed() const
Returns the speed allowed on this edge.
Definition: NBEdge.h:615
~NBEdge()
Destructor.
Definition: NBEdge.cpp:538
NBNode * myTo
Definition: NBEdge.h:1730
double myEndAngle
Definition: NBEdge.h:1741
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:4411
bool allowsChangingRight(int lane, SUMOVehicleClass vclass) const
Returns whether the given vehicle class may change left from this lane.
Definition: NBEdge.cpp:4455
double getDistance() const
get distance
Definition: NBEdge.h:675
static const double UNSPECIFIED_LOADED_LENGTH
no length override given
Definition: NBEdge.h:360
void setLaneWidth(int lane, double width)
set lane specific width (negative lane implies set for all lanes)
Definition: NBEdge.cpp:4094
void resetLaneShapes()
reset lane shapes to what they would be before cutting with the junction shapes
Definition: NBEdge.cpp:2172
bool setControllingTLInformation(const NBConnection &c, const std::string &tlID)
Returns if the link could be set as to be controlled.
Definition: NBEdge.cpp:3656
bool bothLeftTurns(LinkDirection dir, const NBEdge *otherFrom, LinkDirection dir2) const
determine conflict between opposite left turns
Definition: NBEdge.cpp:2065
void setAcceleration(int lane, bool accelRamp)
marks one lane as acceleration lane
Definition: NBEdge.cpp:4255
const StopOffset & getEdgeStopOffset() const
Returns the stopOffset to the end of the edge.
Definition: NBEdge.cpp:4161
NBNode * tryGetNodeAtPosition(double pos, double tolerance=5.0) const
Returns the node at the given edges length (using an epsilon)
Definition: NBEdge.cpp:3607
void setLaneSpreadFunction(LaneSpreadFunction spread)
(Re)sets how the lanes lateral offset shall be computed
Definition: NBEdge.cpp:973
void clearControllingTLInformation()
clears tlID for all connections
Definition: NBEdge.cpp:3719
bool isTurningDirectionAt(const NBEdge *const edge) const
Returns whether the given edge is the opposite direction to this edge.
Definition: NBEdge.cpp:3594
void addStraightConnections(const EdgeVector *outgoing, const std::vector< int > &availableLanes, const std::vector< int > &priorities)
add some straight connections
Definition: NBEdge.cpp:3339
bool hasLaneSpecificPermissions() const
whether lanes differ in allowed vehicle classes
Definition: NBEdge.cpp:2388
bool needsLaneSpecificOutput() const
whether at least one lane has values differing from the edges values
Definition: NBEdge.cpp:2510
void computeAngle()
computes the angle of this edge and stores it in myAngle
Definition: NBEdge.cpp:2263
bool isBidiEdge(bool checkPotential=false) const
whether this edge is part of a bidirectional edge pair
Definition: NBEdge.cpp:742
void setBidi(bool isBidi)
mark this edge as a bidi edge
Definition: NBEdge.h:1412
static const double UNSPECIFIED_SIGNAL_OFFSET
unspecified signal offset
Definition: NBEdge.h:363
void addSidewalk(double width)
add a pedestrian sidewalk of the given width and shift existing connctions
Definition: NBEdge.cpp:4502
bool hasSignalisedConnectionTo(const NBEdge *const e) const
Check if edge has signalised connections.
Definition: NBEdge.cpp:3926
std::vector< Lane > myLanes
Lane information.
Definition: NBEdge.h:1798
int getNumLanes() const
Returns the number of lanes.
Definition: NBEdge.h:516
const PositionVector & getGeometry() const
Returns the geometry of the edge.
Definition: NBEdge.h:779
std::vector< Connection > getConnectionsFromLane(int lane, const NBEdge *to=nullptr, int toLane=-1) const
Returns connections from a given lane.
Definition: NBEdge.cpp:1252
bool hasAccelLane() const
whether one of the lanes is an acceleration lane
Definition: NBEdge.cpp:2468
bool myIsBidi
whether this edge is part of a non-rail bidi edge pair
Definition: NBEdge.h:1829
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:2001
PositionVector myToBorder
Definition: NBEdge.h:1822
void extendGeometryAtNode(const NBNode *node, double maxExtent)
linearly extend the geometry at the given node
Definition: NBEdge.cpp:639
void setFriction(int lane, double friction)
set lane specific friction (negative lane implies set for all lanes)
Definition: NBEdge.cpp:4239
static const double UNSPECIFIED_CONTPOS
unspecified internal junction position
Definition: NBEdge.h:354
static const double ANGLE_LOOKAHEAD
the distance at which to take the default angle
Definition: NBEdge.h:366
int getNumLanesThatAllow(SVCPermissions permissions, bool allPermissions=true) const
Definition: NBEdge.cpp:4437
void reduceGeometry(const double minDist)
Removes points with a distance lesser than the given.
Definition: NBEdge.cpp:995
static NBEdge DummyEdge
Dummy edge to use when a reference must be supplied in the no-arguments constructor (FOX technicality...
Definition: NBEdge.h:339
bool joinLanes(SVCPermissions perms)
join adjacent lanes with the given permissions
Definition: NBEdge.cpp:4756
void resetNodeBorder(const NBNode *node)
Definition: NBEdge.cpp:719
void markAsInLane2LaneState()
mark edge as in lane to state lane
Definition: NBEdge.cpp:4047
bool mayBeTLSControlled(int fromLane, NBEdge *toEdge, int toLane) const
return true if certain connection must be controlled by TLS
Definition: NBEdge.cpp:3645
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:4536
NBEdge & operator=(const NBEdge &s)=delete
invalidated assignment operator
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:1413
double myLength
The length of the edge.
Definition: NBEdge.h:1736
NBEdge::Lane getFirstNonPedestrianLane(int direction) const
@brif get first non-pedestrian lane
Definition: NBEdge.cpp:4477
void invalidateConnections(bool reallowSetting=false)
invalidate current connections of edge
Definition: NBEdge.cpp:1494
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:3421
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:1832
double getTotalWidth() const
Returns the combined width of all lanes of this edge.
Definition: NBEdge.cpp:4146
PositionVector cutAtIntersection(const PositionVector &old) const
cut shape at the intersection shapes
Definition: NBEdge.cpp:775
Position geometryPositionAtOffset(double offset) const
return position taking into account loaded length
Definition: NBEdge.cpp:4634
static const double UNSPECIFIED_VISIBILITY_DISTANCE
unspecified foe visibility for connections
Definition: NBEdge.h:357
bool canMoveConnection(const Connection &con, int newFromLane) const
whether the connection can originate on newFromLane
Definition: NBEdge.cpp:1616
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:4130
void allowVehicleClass(int lane, SUMOVehicleClass vclass)
set allowed class for the given lane or for all lanes if -1 is given
Definition: NBEdge.cpp:4054
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:1296
void addSign(NBSign sign)
add Sign
Definition: NBEdge.h:1454
double getMaxLaneOffset()
get max lane offset
Definition: NBEdge.cpp:3639
void deleteLane(int index, bool recompute, bool shiftIndices)
delete lane
Definition: NBEdge.cpp:4015
std::vector< NBSign > mySigns
the street signs along this edge
Definition: NBEdge.h:1813
const std::string & getTurnSignTarget() const
Definition: NBEdge.h:1547
NBEdge * myPossibleTurnDestination
The edge that would be the turn destination if there was one.
Definition: NBEdge.h:1769
const PositionVector & getNodeBorder(const NBNode *node) const
Definition: NBEdge.cpp:708
const NBNode * mySignalNode
Definition: NBEdge.h:1817
bool hasLaneSpecificWidth() const
whether lanes differ in width
Definition: NBEdge.cpp:2422
void setNumericalID(int index)
sets the index of the edge in the list of all network edges
Definition: NBEdge.h:1496
void moveConnectionToRight(int lane)
Definition: NBEdge.cpp:1640
std::set< SVCPermissions > getPermissionVariants(int iStart, int iEnd) const
return all permission variants within the specified lane range [iStart, iEnd[
Definition: NBEdge.cpp:4425
void reshiftPosition(double xoff, double yoff)
Applies an offset to the edge.
Definition: NBEdge.cpp:543
static const int TURN_SIGN_SHIFT_TAXI
Definition: NBEdge.h:376
void moveOutgoingConnectionsFrom(NBEdge *e, int laneOff)
move outgoing connection
Definition: NBEdge.cpp:3621
std::string getLaneID(int lane) const
get lane ID
Definition: NBEdge.cpp:3946
bool myIsOffRamp
whether this edge is an Off-Ramp or leads to one
Definition: NBEdge.h:1826
static const double UNSPECIFIED_SPEED
unspecified lane speed
Definition: NBEdge.h:348
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:622
std::vector< Connection > & getConnections()
Returns the connections.
Definition: NBEdge.h:1042
static PositionVector startShapeAt(const PositionVector &laneShape, const NBNode *startNode, PositionVector nodeShape)
Definition: NBEdge.cpp:907
std::string getSidewalkID()
get the lane id for the canonical sidewalk lane
Definition: NBEdge.cpp:4486
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:1371
void computeLaneShapes()
compute lane shapes
Definition: NBEdge.cpp:2199
const NBEdge * getBidiEdge() const
Definition: NBEdge.h:1508
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:551
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:2136
int getSpecialLane(SVCPermissions permissions) const
return index of the first lane that allows the given permissions
Definition: NBEdge.cpp:4401
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:1151
bool hasLaneSpecificEndOffset() const
whether lanes differ in offset
Definition: NBEdge.cpp:2444
int getJunctionPriority(const NBNode *const node) const
Returns the junction priority (normalised for the node currently build)
Definition: NBEdge.cpp:2084
double myDistance
The mileage/kilometrage at the start of this edge in a linear coordination system.
Definition: NBEdge.h:1755
bool isOffRamp() const
Definition: NBEdge.h:1393
bool myAmMacroscopicConnector
Information whether this edge is a (macroscopic) connector.
Definition: NBEdge.h:1807
EdgeVector getConnectedEdges() const
Returns the list of outgoing edges unsorted.
Definition: NBEdge.cpp:1346
void setLaneShape(int lane, const PositionVector &shape)
sets a custom lane shape
Definition: NBEdge.cpp:4263
double myLoadedLength
An optional length to use (-1 if not valid)
Definition: NBEdge.h:1801
static void updateTurnPermissions(SVCPermissions &perm, LinkDirection dir, SVCPermissions spec, std::vector< LinkDirection > dirs)
Definition: NBEdge.cpp:2630
static void setDefaultConnectionLength(double length)
Definition: NBEdge.h:386
void sortOutgoingConnectionsByAngle()
sorts the outgoing connections by their angle relative to their junction
Definition: NBEdge.cpp:1385
bool applyTurnSigns()
apply loaded turn sign information
Definition: NBEdge.cpp:2641
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:2074
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:4080
double myStartAngle
The angles of the edge.
Definition: NBEdge.h:1740
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:2120
NBEdge * getTurnDestination(bool possibleDestination=false) const
Definition: NBEdge.cpp:3937
void shiftPositionAtNode(NBNode *node, NBEdge *opposite)
shift geometry at the given node to avoid overlap
Definition: NBEdge.cpp:4609
double getAngleAtNode(const NBNode *const node) const
Returns the angle of the edge's geometry at the given node.
Definition: NBEdge.cpp:2110
bool hasLaneSpecificType() const
whether lanes differ in type
Definition: NBEdge.cpp:2433
PositionVector myFromBorder
intersection borders (because the node shape might be invalid)
Definition: NBEdge.h:1821
double getSignalOffset() const
Returns the offset of a traffic signal from the end of this edge.
Definition: NBEdge.cpp:4355
bool hasDefaultGeometry() const
Returns whether the geometry consists only of the node positions.
Definition: NBEdge.cpp:589
void setPriority(int priority)
Sets the priority of the edge.
Definition: NBEdge.h:528
double getTotalAngle() const
Returns the angle at the start of the edge.
Definition: NBEdge.h:582
bool myAmInTLS
Information whether this is lies within a joined tls.
Definition: NBEdge.h:1804
void setTurningDestination(NBEdge *e, bool onlyPossible=false)
Sets the turing destination at the given edge.
Definition: NBEdge.cpp:2151
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:602
NBEdge * myTurnDestination
The turn destination edge (if a connection exists)
Definition: NBEdge.h:1766
int getPriority() const
Returns the priority of the edge.
Definition: NBEdge.h:523
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:866
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:1961
static const double UNSPECIFIED_WIDTH
unspecified lane width
Definition: NBEdge.h:342
bool hasRestrictedLane(SUMOVehicleClass vclass) const
returns whether any lane already allows the given vclass exclusively
Definition: NBEdge.cpp:4525
const std::vector< Connection > & getConnections() const
Returns the connections.
Definition: NBEdge.h:1035
void copyConnectionsFrom(NBEdge *src)
copy connections from antoher edge
Definition: NBEdge.cpp:1609
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:560
const StopOffset & getLaneStopOffset(int lane) const
Returns the stop offset to the specified lane's end.
Definition: NBEdge.cpp:4167
void debugPrintConnections(bool outgoing=true, bool incoming=false) const
debugging helper to print all connections
Definition: NBEdge.cpp:4732
Position mySignalPosition
the position of a traffic light signal on this edge
Definition: NBEdge.h:1816
void replaceInConnections(NBEdge *which, NBEdge *by, int laneOff)
replace in current connections of edge
Definition: NBEdge.cpp:1506
const std::string & getTypeID() const
get ID of type
Definition: NBEdge.h:1175
bool lanesWereAssigned() const
Check if lanes were assigned.
Definition: NBEdge.cpp:3633
void restoreRestrictedLane(SUMOVehicleClass vclass, std::vector< NBEdge::Lane > oldLanes, PositionVector oldGeometry, std::vector< NBEdge::Connection > oldConnections)
restore a restricted lane
Definition: NBEdge.cpp:4575
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:1436
double getEndOffset() const
Returns the offset to the destination node.
Definition: NBEdge.h:685
bool isRailDeadEnd() const
whether this edge is a railway edge that does not continue
Definition: NBEdge.cpp:760
double myFriction
The current friction.
Definition: NBEdge.h:1752
void setEndOffset(int lane, double offset)
set lane specific end-offset (negative lane implies set for all lanes)
Definition: NBEdge.cpp:4177
static const double UNSPECIFIED_OFFSET
unspecified lane offset
Definition: NBEdge.h:345
void sortOutgoingConnectionsByIndex()
sorts the outgoing connections by their from-lane-index and their to-lane-index
Definition: NBEdge.cpp:1391
bool recheckLanes()
recheck whether all lanes within the edge are all right and optimises the connections once again
Definition: NBEdge.cpp:2863
int myFromJunctionPriority
The priority normalised for the node the edge is outgoing of.
Definition: NBEdge.h:1772
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:1134
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:4666
PositionVector computeLaneShape(int lane, double offset) const
Computes the shape for the given lane.
Definition: NBEdge.cpp:2251
bool allowsChangingLeft(int lane, SUMOVehicleClass vclass) const
Returns whether the given vehicle class may change left from this lane.
Definition: NBEdge.cpp:4449
static int getLaneIndexFromLaneID(const std::string laneID)
Definition: NBEdge.cpp:4751
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:1290
bool isMacroscopicConnector() const
Returns whether this edge was marked as a macroscopic connector.
Definition: NBEdge.h:1130
void setAsMacroscopicConnector()
Definition: NBEdge.h:1123
bool hasCustomLaneShape() const
whether one of the lanes has a custom shape
Definition: NBEdge.cpp:2479
bool hasLaneParams() const
whether one of the lanes has parameters set
Definition: NBEdge.cpp:2490
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
Definition: NBEdge.cpp:967
double getShapeEndAngle() const
Returns the angle at the end of the edge.
Definition: NBEdge.cpp:2369
bool prohibitsChanging() const
whether one of the lanes prohibits lane changing
Definition: NBEdge.cpp:2500
Lane & getLaneStruct(int lane)
Definition: NBEdge.h:1422
void setLoadedLength(double val)
set loaded length
Definition: NBEdge.cpp:4323
PositionVector myGeom
The geometry for the edge.
Definition: NBEdge.h:1778
const PositionVector getInnerGeometry() const
Returns the geometry of the edge without the endpoints.
Definition: NBEdge.cpp:583
void setSignalPosition(const Position &pos, const NBNode *signalNode)
sets the offset of a traffic signal from the end of this edge
Definition: NBEdge.h:718
void decLaneNo(int by)
decrement lane
Definition: NBEdge.cpp:4035
NBNode * myFrom
The source and the destination node.
Definition: NBEdge.h:1730
void append(NBEdge *continuation)
append another edge
Definition: NBEdge.cpp:3875
void setJunctionPriority(const NBNode *const node, int prio)
Sets the junction priority of the edge.
Definition: NBEdge.cpp:2094
double getFinalLength() const
get length that will be assigned to the lanes in the final network
Definition: NBEdge.cpp:4644
void shortenGeometryAtNode(const NBNode *node, double reduction)
linearly extend the geometry at the given node
Definition: NBEdge.cpp:662
void setGeometry(const PositionVector &g, bool inner=false)
(Re)sets the edge's geometry
Definition: NBEdge.cpp:618
int myPriority
The priority of the edge.
Definition: NBEdge.h:1746
std::string myStreetName
The street name (or whatever arbitrary string you wish to attach)
Definition: NBEdge.h:1810
NBNode * getFromNode() const
Returns the origin node of the edge.
Definition: NBEdge.h:535
EdgeVector getIncomingEdges() const
Returns the list of incoming edges unsorted.
Definition: NBEdge.cpp:1358
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:4384
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
virtual const NBRouterEdge * getBidiEdge() const =0
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 ConstRouterEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const =0
virtual const std::string & getID() 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.
Definition: OutputDevice.h:61
An upper class for objects with additional parameters.
Definition: Parameterised.h:41
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
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
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
Connection(int fromLane_, NBEdge *toEdge_, int toLane_, const bool mayDefinitelyPass_=false)
Constructor.
Definition: NBEdge.cpp:103
int getNumericalID() const
Definition: NBEdge.h:321
double speed
custom speed for connection
Definition: NBEdge.h:240
const std::string & getID() const
Definition: NBEdge.h:311
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
const ConstRouterEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Definition: NBEdge.h:330
double getLength() const
Definition: NBEdge.h:318
bool isInternal() const
Definition: NBEdge.h:327
double getSpeed() const
Definition: NBEdge.h:314
double customLength
custom length for connection
Definition: NBEdge.h:246
const Connection * getBidiEdge() const
Definition: NBEdge.h:324
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:297
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:97
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:91
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
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:306
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 friction
Definition: NBEdge.h:243
double viaLength
the length of the via shape (maybe customized)
Definition: NBEdge.h:285
static ConstRouterEdgePairVector myViaSuccessors
Definition: NBEdge.h:310
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
Lane(NBEdge *e, const std::string &_origID)
constructor
Definition: NBEdge.cpp:113
bool accelRamp
Whether this lane is an acceleration lane.
Definition: NBEdge.h:182
PositionVector shape
The lane's shape.
Definition: NBEdge.h:148