SUMO - Simulation of Urban MObility
NBNode.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2018 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // The representation of a single node
19 /****************************************************************************/
20 #ifndef NBNode_h
21 #define NBNode_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28 
29 #include <vector>
30 #include <deque>
31 #include <utility>
32 #include <string>
33 #include <set>
34 #include <utils/common/StdDefs.h>
35 #include <utils/common/Named.h>
36 #include <utils/geom/Bresenham.h>
37 #include <utils/geom/GeomHelper.h>
39 #include <utils/geom/Position.h>
42 #include "NBEdge.h"
43 #include "NBConnection.h"
44 #include "NBConnectionDefs.h"
45 #include "NBContHelper.h"
46 
47 
48 // ===========================================================================
49 // class declarations
50 // ===========================================================================
51 class NBRequest;
52 class NBDistrict;
53 class OptionsCont;
55 class NBTypeCont;
57 class NBDistrictCont;
58 class OutputDevice;
59 
60 
61 // ===========================================================================
62 // class definitions
63 // ===========================================================================
68 class NBNode : public Named, public Parameterised {
69  friend class NBNodeCont;
70  friend class GNEJunction; // < used for visualization (NETEDIT)
71  friend class NBNodesEdgesSorter; // < sorts the edges
72  friend class NBNodeTypeComputer; // < computes type
73  friend class NBEdgePriorityComputer; // < computes priorities of edges per intersection
74  friend class NBNodeShapeComputer; // < computes node's shape
75 
76 public:
89  private:
92 
95 
97  std::vector<int> myAvailableLanes;
98 
99  public:
104  ApproachingDivider(EdgeVector* approaching, NBEdge* currentOutgoing);
105 
108 
110  int numAvailableLanes() const {
111  return (int)myAvailableLanes.size();
112  }
113 
115  void execute(const int src, const int dest);
116 
118  std::deque<int>* spread(const std::vector<int>& approachingLanes, int dest) const;
119 
120  };
121 
125  struct Crossing : public Parameterised {
127  Crossing(const NBNode* _node, const EdgeVector& _edges, double _width, bool _priority, int _customTLIndex, int _customTLIndex2, const PositionVector& _customShape);
129  const NBNode* node;
135  double customWidth;
137  double width;
139  std::string id;
141  std::string prevWalkingArea;
143  std::string nextWalkingArea;
145  bool priority;
155  std::string tlID;
157  bool valid;
158  };
159 
160 
164  struct WalkingArea {
166  WalkingArea(const std::string& _id, double _width) :
167  id(_id),
168  width(_width),
169  hasCustomShape(false),
170  minNextCrossingEdges(std::numeric_limits<int>::max()),
171  minPrevCrossingEdges(std::numeric_limits<int>::max()) {
172  }
174  std::string id;
176  double width;
178  double length;
182  std::vector<std::string> nextCrossings;
184  std::vector<std::string> nextSidewalks;
186  std::vector<std::string> prevSidewalks;
193  };
194 
196  std::set<const NBEdge*, ComparatorIdLess> edges;
198  };
199 
201  static const int FORWARD;
202  static const int BACKWARD;
203 
205  static const double UNSPECIFIED_RADIUS;
206 
208  static const int AVOID_WIDE_RIGHT_TURN;
209  static const int AVOID_WIDE_LEFT_TURN;
210  static const int FOUR_CONTROL_POINTS;
211 public:
217  NBNode(const std::string& id, const Position& position, SumoXMLNodeType type);
218 
224  NBNode(const std::string& id, const Position& position, NBDistrict* district = 0);
225 
227  ~NBNode();
228 
235  void reinit(const Position& position, SumoXMLNodeType type,
236  bool updateEdgeGeometries = false);
237 
241  const Position& getPosition() const {
242  return myPosition;
243  }
244 
246  Position getCenter() const;
247 
249  const EdgeVector& getIncomingEdges() const {
250  return myIncomingEdges;
251  }
252 
254  const EdgeVector& getOutgoingEdges() const {
255  return myOutgoingEdges;
256  }
257 
259  const EdgeVector& getEdges() const {
260  return myAllEdges;
261  }
262 
267  return myType;
268  }
269 
271  double getRadius() const {
272  return myRadius;
273  }
274 
276  bool getKeepClear() const {
277  return myKeepClear;
278  }
280 
283 
287 
290 
292  void removeTrafficLights();
293 
297  bool isTLControlled() const {
298  return myTrafficLights.size() != 0;
299  }
300 
302  const std::set<NBTrafficLightDefinition*>& getControllingTLS() const {
303  return myTrafficLights;
304  }
305 
307  void invalidateTLS(NBTrafficLightLogicCont& tlCont, bool removedConnections, bool addedConnections);
308 
310  void shiftTLConnectionLaneIndex(NBEdge* edge, int offset, int threshold = -1);
312 
313 
316 
328 
329 
332 
336  void reshiftPosition(double xoff, double yoff);
337 
339  void mirrorX();
341 
343  void addIncomingEdge(NBEdge* edge);
344 
346  void addOutgoingEdge(NBEdge* edge);
347 
349  void computeLanes2Lanes();
350 
352  void computeLogic(const NBEdgeCont& ec, OptionsCont& oc);
353 
355  bool writeLogic(OutputDevice& into, const bool checkLaneFoes) const;
356 
358  Position getEmptyDir() const;
359 
364  bool hasIncoming(const NBEdge* const e) const;
365 
370  bool hasOutgoing(const NBEdge* const e) const;
371 
373  NBEdge* getOppositeIncoming(NBEdge* e) const;
374 
377 
380 
382  void removeDoubleEdges();
383 
385  NBEdge* getConnectionTo(NBNode* n) const;
386 
388  void addSortedLinkFoes(const NBConnection& mayDrive, const NBConnection& mustStop);
389 
391  NBEdge* getPossiblySplittedIncoming(const std::string& edgeid);
392 
394  NBEdge* getPossiblySplittedOutgoing(const std::string& edgeid);
395 
397  void removeEdge(NBEdge* edge, bool removeFromConnections = true);
398 
408  bool isLeftMover(const NBEdge* const from, const NBEdge* const to) const;
409 
418  bool mustBrake(const NBEdge* const from, const NBEdge* const to, int fromLane, int toLane, bool includePedCrossings) const;
419 
426  bool mustBrakeForCrossing(const NBEdge* const from, const NBEdge* const to, const Crossing& crossing) const;
427 
429  static bool rightTurnConflict(const NBEdge* from, const NBEdge* to, int fromLane,
430  const NBEdge* prohibitorFrom, const NBEdge* prohibitorTo, int prohibitorFromLane,
431  bool lefthand = false);
432 
434  bool turnFoes(const NBEdge* from, const NBEdge* to, int fromLane,
435  const NBEdge* from2, const NBEdge* to2, int fromLane2,
436  bool lefthand = false) const;
437 
446  bool forbids(const NBEdge* const possProhibitorFrom, const NBEdge* const possProhibitorTo,
447  const NBEdge* const possProhibitedFrom, const NBEdge* const possProhibitedTo,
448  bool regardNonSignalisedLowerPriority) const;
449 
457  bool foes(const NBEdge* const from1, const NBEdge* const to1,
458  const NBEdge* const from2, const NBEdge* const to2) const;
459 
466  LinkDirection getDirection(const NBEdge* const incoming, const NBEdge* const outgoing, bool leftHand = false) const;
467 
469  LinkState getLinkState(const NBEdge* incoming, NBEdge* outgoing,
470  int fromLane, int toLane, bool mayDefinitelyPass, const std::string& tlID) const;
471 
475  void computeNodeShape(double mismatchThreshold);
476 
478  const PositionVector& getShape() const;
479 
481  void setCustomShape(const PositionVector& shape);
482 
484  void setRadius(double radius) {
485  myRadius = radius;
486  }
487 
489  void setKeepClear(bool keepClear) {
490  myKeepClear = keepClear;
491  }
492 
494  bool hasCustomShape() const {
495  return myHaveCustomPoly;
496  }
497 
499  bool checkIsRemovable() const;
500 
502  bool checkIsRemovableReporting(std::string& reason) const;
503 
505  std::vector<std::pair<NBEdge*, NBEdge*> > getEdgesToJoin() const;
506 
508  bool isNearDistrict() const;
509 
511  bool isDistrict() const;
512 
514  bool needsCont(const NBEdge* fromE, const NBEdge* otherFromE,
515  const NBEdge::Connection& c, const NBEdge::Connection& otherC) const;
516 
518  bool tlsContConflict(const NBEdge* from, const NBEdge::Connection& c,
519  const NBEdge* foeFrom, const NBEdge::Connection& foe) const;
520 
521 
529  PositionVector computeInternalLaneShape(NBEdge* fromE, const NBEdge::Connection& con, int numPoints, NBNode* recordError = 0) const;
530 
541  PositionVector computeSmoothShape(const PositionVector& begShape, const PositionVector& endShape, int numPoints,
542  bool isTurnaround, double extrapolateBeg, double extrapolateEnd,
543  NBNode* recordError = 0, int shapeFlag = 0) const;
545  static PositionVector bezierControlPoints(const PositionVector& begShape, const PositionVector& endShape,
546  bool isTurnaround, double extrapolateBeg, double extrapolateEnd,
547  bool& ok, NBNode* recordError = 0, double straightThresh = DEG2RAD(5),
548  int shapeFlag = 0);
549 
550 
552  double getDisplacementError() const {
553  return myDisplacementError;
554  }
555 
557  void replaceIncoming(NBEdge* which, NBEdge* by, int laneOff);
558 
560  void replaceIncoming(const EdgeVector& which, NBEdge* by);
561 
563  void replaceOutgoing(NBEdge* which, NBEdge* by, int laneOff);
564 
566  void replaceOutgoing(const EdgeVector& which, NBEdge* by);
567 
569  int guessCrossings();
570 
571  /* @brief check whether a crossing should be build for the candiate edges and build 0 to n crossings
572  * @param[in] candidates The candidate vector of edges to be crossed
573  * @return The number of crossings built
574  * */
575  int checkCrossing(EdgeVector candidates);
576 
579 
581  void buildInnerEdges();
582 
586  int buildCrossings();
587 
591  void buildWalkingAreas(int cornerDetail);
592 
595 
597  EdgeVector edgesBetween(const NBEdge* e1, const NBEdge* e2) const;
598 
600  bool crossingBetween(const NBEdge* e1, const NBEdge* e2) const;
601 
604  return myBlockedConnections;
605  }
606 
608  bool geometryLike() const;
609 
611  void setRoundabout();
612 
614  NBNode::Crossing* addCrossing(EdgeVector edges, double width, bool priority, int tlIndex = -1, int tlIndex2 = -1,
615  const PositionVector& customShape = PositionVector::EMPTY, bool fromSumoNet = false);
616 
618  void addWalkingAreaShape(EdgeVector edges, const PositionVector& shape);
619 
621  void removeCrossing(const EdgeVector& edges);
622 
624  void discardAllCrossings(bool rejectAll);
625 
627  void discardWalkingareas();
628 
632  }
633 
635  std::vector<Crossing*> getCrossings() const;
636  inline const std::vector<Crossing*>& getCrossingsIncludingInvalid() const {
637  return myCrossings;
638  }
639 
641  inline const std::vector<WalkingArea>& getWalkingAreas() const {
642  return myWalkingAreas;
643  }
644 
645  const std::vector<WalkingAreaCustomShape>& getWalkingAreaCustomShapes() const {
647  }
648 
650  Crossing* getCrossing(const std::string& id) const;
651 
653  Crossing* getCrossing(const EdgeVector& edges, bool hardFail = true) const;
654 
655  /* @brief set tl indices of this nodes crossing starting at the given index
656  * @return Whether a custom index was used
657  */
658  bool setCrossingTLIndices(const std::string& tlID, int startIndex);
659 
661  int numNormalConnections() const;
662 
664  void avoidOverlap();
665 
667  bool rightOnRedConflict(int index, int foeIndex) const;
668 
670  void sortEdges(bool useNodeShape);
671 
673  int getConnectionIndex(const NBEdge* from, const NBEdge::Connection& con) const;
674 
680  public:
682  explicit nodes_by_id_sorter() { }
683 
685  int operator()(NBNode* n1, NBNode* n2) const {
686  return n1->getID() < n2->getID();
687  }
688  };
689 
694  public:
696  explicit edge_by_direction_sorter(NBNode* n) : myNode(n) {}
697 
699  int operator()(NBEdge* e1, NBEdge* e2) const {
700  UNUSED_PARAMETER(e2);
701  return e1->getFromNode() == myNode;
702  }
703 
704  private:
707 
708  };
709 
711  static std::string getNodeIDFromInternalLane(const std::string id);
712 
713 
715  static bool isTrafficLight(SumoXMLNodeType type);
716 
718  bool isSimpleContinuation(bool checkLaneNumbers = true) const;
719 
721  void markBentPriority(bool isBent) {
722  myIsBentPriority = isBent;
723  }
724 
726  bool isBentPriority() {
727  return myIsBentPriority;
728  }
729 
731  bool isConstantWidthTransition() const;
732 
734  std::vector<Position> getEndPoints() const;
735 
736 private:
739 
741  EdgeVector* getEdgesThatApproach(NBEdge* currentOutgoing);
742 
744  void replaceInConnectionProhibitions(NBEdge* which, NBEdge* by, int whichLaneOff, int byLaneOff);
745 
747  void remapRemoved(NBTrafficLightLogicCont& tc, NBEdge* removed, const EdgeVector& incoming, const EdgeVector& outgoing);
748 
750  bool forbidsPedestriansAfter(std::vector<std::pair<NBEdge*, bool> > normalizedLanes, int startIndex);
751 
754 
756  static bool isLongEnough(NBEdge* out, double minLength);
757 
760 
762  void displaceShapeAtWidthChange(const NBEdge* from, const NBEdge::Connection& con, PositionVector& fromShape, PositionVector& toShape) const;
763 
764 private:
767 
770 
773 
776 
778  std::vector<Crossing*> myCrossings;
779 
781  std::vector<WalkingArea> myWalkingAreas;
782 
784  std::vector<WalkingAreaCustomShape> myWalkingAreaCustomShapes;
785 
788 
791 
794 
797 
800 
803 
805  std::set<NBTrafficLightDefinition*> myTrafficLights;
806 
808  double myRadius;
809 
812 
815 
818 
821 
822  /* @brief whether this junction is a bent priority junction (main direction turns)
823  * @note see NBEdgePriorityComputer
824  */
826 
827 
828 private:
830  NBNode(const NBNode& s);
831 
833  NBNode& operator=(const NBNode& s);
834 };
835 
836 
837 #endif
838 
839 /****************************************************************************/
840 
bool getKeepClear() const
Returns the keepClear flag.
Definition: NBNode.h:276
static const PositionVector EMPTY
empty Vector
int tlLinkIndex2
Definition: NBNode.h:150
int operator()(NBEdge *e1, NBEdge *e2) const
operator of selection
Definition: NBNode.h:699
int getConnectionIndex(const NBEdge *from, const NBEdge::Connection &con) const
return the index of the given connection
Definition: NBNode.cpp:2922
bool myIsBentPriority
Definition: NBNode.h:825
A structure which describes a connection between edges or lanes.
Definition: NBEdge.h:160
std::vector< WalkingAreaCustomShape > myWalkingAreaCustomShapes
Vector of custom walking areas shapes.
Definition: NBNode.h:784
LinkState getLinkState(const NBEdge *incoming, NBEdge *outgoing, int fromLane, int toLane, bool mayDefinitelyPass, const std::string &tlID) const
get link state
Definition: NBNode.cpp:1787
void setRoundabout()
update the type of this node as a roundabout
Definition: NBNode.cpp:2828
int numNormalConnections() const
return the number of lane-to-lane connections at this junction (excluding crossings) ...
Definition: NBNode.cpp:2907
WalkingArea(const std::string &_id, double _width)
constructor
Definition: NBNode.h:166
bool foes(const NBEdge *const from1, const NBEdge *const to1, const NBEdge *const from2, const NBEdge *const to2) const
Returns the information whether the given flows cross.
Definition: NBNode.cpp:1608
ApproachingDivider(EdgeVector *approaching, NBEdge *currentOutgoing)
Constructor.
Definition: NBNode.cpp:94
int buildCrossings()
build pedestrian crossings
Definition: NBNode.cpp:2283
std::string id
the (edge)-id of this crossing
Definition: NBNode.h:139
PositionVector myPoly
the (outer) shape of the junction
Definition: NBNode.h:796
void execute(const int src, const int dest)
the bresenham-callback
Definition: NBNode.cpp:128
const NBConnectionProhibits & getProhibitions()
get prohibitions (BLocked connections)
Definition: NBNode.h:603
bool isDistrict() const
check if node is a district
Definition: NBNode.cpp:1971
SumoXMLNodeType myType
The type of the junction.
Definition: NBNode.h:787
A container for traffic light definitions and built programs.
void reinit(const Position &position, SumoXMLNodeType type, bool updateEdgeGeometries=false)
Resets initial values.
Definition: NBNode.cpp:284
int minPrevCrossingEdges
minimum number of edges crossed by incoming crossings
Definition: NBNode.h:192
~NBNode()
Destructor.
Definition: NBNode.cpp:278
PositionVector computeInternalLaneShape(NBEdge *fromE, const NBEdge::Connection &con, int numPoints, NBNode *recordError=0) const
Compute the shape for an internal lane.
Definition: NBNode.cpp:658
int myCrossingsLoadedFromSumoNet
number of crossings loaded from a sumo net
Definition: NBNode.h:817
This class computes shapes of junctions.
std::vector< Crossing * > getCrossings() const
return this junctions pedestrian crossings
Definition: NBNode.cpp:2223
double length
This lane&#39;s width.
Definition: NBNode.h:178
void removeEdge(NBEdge *edge, bool removeFromConnections=true)
Removes edge from this node and optionally removes connections as well.
Definition: NBNode.cpp:1392
bool mustBrake(const NBEdge *const from, const NBEdge *const to, int fromLane, int toLane, bool includePedCrossings) const
Returns the information whether the described flow must let any other flow pass.
Definition: NBNode.cpp:1466
void addIncomingEdge(NBEdge *edge)
adds an incoming edge
Definition: NBNode.cpp:425
bool hasCustomShape() const
return whether the shape was set by the user
Definition: NBNode.h:494
The representation of a single edge during network building.
Definition: NBEdge.h:65
void displaceShapeAtWidthChange(const NBEdge *from, const NBEdge::Connection &con, PositionVector &fromShape, PositionVector &toShape) const
displace lane shapes to account for change in lane width at this node
Definition: NBNode.cpp:702
static const double UNSPECIFIED_RADIUS
unspecified lane width
Definition: NBNode.h:205
Used for sorting the cells by the begin time they describe.
Definition: NBNode.h:679
A container for districts.
The base class for traffic light logic definitions.
static bool isLongEnough(NBEdge *out, double minLength)
check if is long enough
Definition: NBNode.cpp:1138
void removeDoubleEdges()
remove duble edges
Definition: NBNode.cpp:1281
bool hasCustomShape
whether this walkingArea has a custom shape
Definition: NBNode.h:188
void markBentPriority(bool isBent)
mark whether a priority road turns at this node
Definition: NBNode.h:721
bool rightOnRedConflict(int index, int foeIndex) const
whether the given index must yield to the foeIndex while turing right on a red light ...
Definition: NBNode.cpp:3025
Crossing * getCrossing(const std::string &id) const
return the crossing with the given id
Definition: NBNode.cpp:2863
PositionVector shape
The crossing&#39;s shape.
Definition: NBNode.h:133
edge_by_direction_sorter(NBNode *n)
constructor
Definition: NBNode.h:696
void buildWalkingAreas(int cornerDetail)
build pedestrian walking areas and set connections from/to walkingAreas
Definition: NBNode.cpp:2374
std::string id
the (edge)-id of this walkingArea
Definition: NBNode.h:174
const std::string & getID() const
Returns the id.
Definition: Named.h:69
void mirrorX()
mirror coordinates along the x-axis
Definition: NBNode.cpp:320
int numCrossingsFromSumoNet() const
get num of crossings from sumo net
Definition: NBNode.h:630
void removeTrafficLight(NBTrafficLightDefinition *tlDef)
Removes the given traffic light from this node.
Definition: NBNode.cpp:345
void setCustomShape(const PositionVector &shape)
set the junction shape
Definition: NBNode.cpp:1917
NBConnectionProhibits myBlockedConnections
The container for connection block dependencies.
Definition: NBNode.h:790
void addOutgoingEdge(NBEdge *edge)
adds an outgoing edge
Definition: NBNode.cpp:435
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:33
void replaceOutgoing(NBEdge *which, NBEdge *by, int laneOff)
Replaces occurences of the first edge within the list of outgoing by the second Connections are remap...
Definition: NBNode.cpp:1177
void sortEdges(bool useNodeShape)
sort all edge containers for this node
Definition: NBNode.cpp:3038
static const int AVOID_WIDE_RIGHT_TURN
flags for controlling shape generation
Definition: NBNode.h:208
Position getCenter() const
Returns a position that is guaranteed to lie within the node shape.
Definition: NBNode.cpp:2941
static bool rightTurnConflict(const NBEdge *from, const NBEdge *to, int fromLane, const NBEdge *prohibitorFrom, const NBEdge *prohibitorTo, int prohibitorFromLane, bool lefthand=false)
return whether the given laneToLane connection is a right turn which must yield to a bicycle crossing...
Definition: NBNode.cpp:1486
const EdgeVector & getOutgoingEdges() const
Returns this node&#39;s outgoing edges (The edges which start at this node)
Definition: NBNode.h:254
bool priority
whether the pedestrians have priority
Definition: NBNode.h:145
NBRequest * myRequest
Node requests.
Definition: NBNode.h:802
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)...
NBDistrict * myDistrict
The district the node is the centre of.
Definition: NBNode.h:793
A class representing a single district.
Definition: NBDistrict.h:65
NBEdge * getConnectionTo(NBNode *n) const
get connection to certain node
Definition: NBNode.cpp:1929
bool tlsContConflict(const NBEdge *from, const NBEdge::Connection &c, const NBEdge *foeFrom, const NBEdge::Connection &foe) const
whether the connection must yield if the foe remains on the intersection after its phase ends ...
Definition: NBNode.cpp:800
EdgeVector myAllEdges
Vector of incoming and outgoing edges.
Definition: NBNode.h:775
void invalidateTLS(NBTrafficLightLogicCont &tlCont, bool removedConnections, bool addedConnections)
causes the traffic light to be computed anew
Definition: NBNode.cpp:361
void computeLanes2Lanes()
computes the connections of lanes to edges
Definition: NBNode.cpp:914
void setRadius(double radius)
set the turning radius
Definition: NBNode.h:484
bool isTLControlled() const
Returns whether this node is controlled by any tls.
Definition: NBNode.h:297
bool writeLogic(OutputDevice &into, const bool checkLaneFoes) const
writes the XML-representation of the logic as a bitset-logic XML representation
Definition: NBNode.cpp:869
void invalidateIncomingConnections()
invalidate incoming connections
Definition: NBNode.cpp:1450
void removeCrossing(const EdgeVector &edges)
remove a pedestrian crossing from this node (identified by its edges)
Definition: NBNode.cpp:2848
void setPriorityJunctionPriorities()
sets the priorites in case of a priority junction
void computeNodeShape(double mismatchThreshold)
Compute the junction shape for this node.
Definition: NBNode.cpp:879
std::string prevWalkingArea
the lane-id of the previous walkingArea
Definition: NBNode.h:141
NBEdge * getPossiblySplittedIncoming(const std::string &edgeid)
get possibly splitted incoming edge
Definition: NBNode.cpp:1366
int checkCrossing(EdgeVector candidates)
Definition: NBNode.cpp:2081
static const int FORWARD
edge directions (for pedestrian related stuff)
Definition: NBNode.h:201
int minNextCrossingEdges
minimum number of edges crossed by nextCrossings
Definition: NBNode.h:190
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
A list of positions.
bool turnFoes(const NBEdge *from, const NBEdge *to, int fromLane, const NBEdge *from2, const NBEdge *to2, int fromLane2, bool lefthand=false) const
return whether the given laneToLane connection originate from the same edge and are in conflict due t...
Definition: NBNode.cpp:1533
void buildCrossingsAndWalkingAreas()
build crossings, and walkingareas. Also removes invalid loaded crossings if wished ...
Definition: NBNode.cpp:2200
bool crossingBetween(const NBEdge *e1, const NBEdge *e2) const
return true if the given edges are connected by a crossing
Definition: NBNode.cpp:2751
void invalidateOutgoingConnections()
invalidate outgoing connections
Definition: NBNode.cpp:1458
bool isConstantWidthTransition() const
detects whether a given junction splits or merges lanes while keeping constant road width ...
Definition: NBNode.cpp:694
void removeJoinedTrafficLights()
remove all traffic light definitions that are part of a joined tls
Definition: NBNode.cpp:810
int operator()(NBNode *n1, NBNode *n2) const
Comparing operator.
Definition: NBNode.h:685
const EdgeVector & getEdges() const
Returns all edges which participate in this node (Edges that start or end at this node) ...
Definition: NBNode.h:259
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
void removeTrafficLights()
Removes all references to traffic lights that control this tls.
Definition: NBNode.cpp:352
EdgeVector * getEdgesThatApproach(NBEdge *currentOutgoing)
returns a list of edges which are connected to the given outgoing edge
Definition: NBNode.cpp:1154
bool geometryLike() const
whether this is structurally similar to a geometry node
Definition: NBNode.cpp:2797
std::set< NBTrafficLightDefinition * > myTrafficLights
traffic lights of node
Definition: NBNode.h:805
Storage for edges, including some functionality operating on multiple edges.
Definition: NBEdgeCont.h:61
std::set< const NBEdge *, ComparatorIdLess > edges
Definition: NBNode.h:196
bool hasOutgoing(const NBEdge *const e) const
Returns whether the given edge starts at this node.
Definition: NBNode.cpp:1325
static PositionVector bezierControlPoints(const PositionVector &begShape, const PositionVector &endShape, bool isTurnaround, double extrapolateBeg, double extrapolateEnd, bool &ok, NBNode *recordError=0, double straightThresh=DEG2RAD(5), int shapeFlag=0)
get bezier control points
Definition: NBNode.cpp:501
bool myDiscardAllCrossings
whether to discard all pedestrian crossings
Definition: NBNode.h:814
NBNode * myNode
The node to compute the relative angle of.
Definition: NBNode.h:706
void discardAllCrossings(bool rejectAll)
discard all current (and optionally future) crossings
Definition: NBNode.cpp:2241
#define DEG2RAD(x)
Definition: GeomHelper.h:38
const std::vector< WalkingAreaCustomShape > & getWalkingAreaCustomShapes() const
Definition: NBNode.h:645
void replaceInConnectionProhibitions(NBEdge *which, NBEdge *by, int whichLaneOff, int byLaneOff)
replace incoming connections prohibitions
Definition: NBNode.cpp:1246
An upper class for objects with additional parameters.
Definition: Parameterised.h:44
double myRadius
the turning radius (for all corners) at this node in m.
Definition: NBNode.h:808
EdgeVector myIncomingEdges
Vector of incoming edges.
Definition: NBNode.h:769
void setKeepClear(bool keepClear)
set the keepClear flag
Definition: NBNode.h:489
bool checkIsRemovableReporting(std::string &reason) const
check if node is removable and return reason if not
Definition: NBNode.cpp:1821
Base class for objects which have an id.
Definition: Named.h:49
bool hasIncoming(const NBEdge *const e) const
Returns whether the given edge ends at this node.
Definition: NBNode.cpp:1319
int customTLIndex2
Definition: NBNode.h:153
double getDisplacementError() const
compute the displacement error during s-curve computation
Definition: NBNode.h:552
bool setCrossingTLIndices(const std::string &tlID, int startIndex)
Definition: NBNode.cpp:2891
void avoidOverlap()
fix overlap
Definition: NBNode.cpp:3002
NBEdge * getPossiblySplittedOutgoing(const std::string &edgeid)
get possibly splitted outgoing edge
Definition: NBNode.cpp:1379
LinkDirection getDirection(const NBEdge *const incoming, const NBEdge *const outgoing, bool leftHand=false) const
Returns the representation of the described stream&#39;s direction.
Definition: NBNode.cpp:1696
const PositionVector & getShape() const
retrieve the junction shape
Definition: NBNode.cpp:1911
NBNode::Crossing * addCrossing(EdgeVector edges, double width, bool priority, int tlIndex=-1, int tlIndex2=-1, const PositionVector &customShape=PositionVector::EMPTY, bool fromSumoNet=false)
add a pedestrian crossing to this node
Definition: NBNode.cpp:2836
EdgeVector myOutgoingEdges
Vector of outgoing edges.
Definition: NBNode.h:772
std::vector< Crossing * > myCrossings
Vector of crossings.
Definition: NBNode.h:778
void addWalkingAreaShape(EdgeVector edges, const PositionVector &shape)
add custom shape for walkingArea
Definition: NBNode.cpp:2788
NBEdge * myCurrentOutgoing
The approached current edge.
Definition: NBNode.h:94
double myDisplacementError
geometry error after computation of internal lane shapes
Definition: NBNode.h:820
static const int BACKWARD
Definition: NBNode.h:202
bool isBentPriority()
return whether a priority road turns at this node
Definition: NBNode.h:726
nodes_by_id_sorter()
Constructor.
Definition: NBNode.h:682
void addTrafficLight(NBTrafficLightDefinition *tlDef)
Adds a traffic light to the list of traffic lights that control this node.
Definition: NBNode.cpp:335
double width
This crossing&#39;s width.
Definition: NBNode.h:137
bool myHaveCustomPoly
whether this nodes shape was set by the user
Definition: NBNode.h:799
int customTLIndex
the custom traffic light index of this crossing (if controlled)
Definition: NBNode.h:152
Position myPosition
The position the node lies at.
Definition: NBNode.h:766
bool checkCrossingDuplicated(EdgeVector edges)
return true if there already exist a crossing with the same edges as the input
Definition: NBNode.cpp:2172
std::map< NBConnection, NBConnectionVector > NBConnectionProhibits
Definition of a container for connection block dependencies Includes a list of all connections which ...
int removeSelfLoops(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tc)
Removes edges which are both incoming and outgoing into this node.
Definition: NBNode.cpp:392
double getRadius() const
Returns the turning radius of this node.
Definition: NBNode.h:271
void shiftTLConnectionLaneIndex(NBEdge *edge, int offset, int threshold=-1)
patches loaded signal plans by modifying lane indices above threshold by the given offset ...
Definition: NBNode.cpp:384
~ApproachingDivider()
Destructor.
Definition: NBNode.cpp:124
std::vector< WalkingArea > myWalkingAreas
Vector of walking areas.
Definition: NBNode.h:781
const EdgeVector & getIncomingEdges() const
Returns this node&#39;s incoming edges (The edges which yield in this node)
Definition: NBNode.h:249
PositionVector customShape
optional customShape for this crossing
Definition: NBNode.h:147
void replaceIncoming(NBEdge *which, NBEdge *by, int laneOff)
Replaces occurences of the first edge within the list of incoming by the second Connections are remap...
Definition: NBNode.cpp:1213
SumoXMLNodeType
Numbers representing special SUMO-XML-attribute values for representing node- (junction-) types used ...
bool isNearDistrict() const
if node is near district
Definition: NBNode.cpp:1940
bool myKeepClear
whether the junction area must be kept clear
Definition: NBNode.h:811
std::vector< int > myAvailableLanes
The available lanes to which connections shall be built.
Definition: NBNode.h:97
const std::set< NBTrafficLightDefinition * > & getControllingTLS() const
Returns the traffic lights that were assigned to this node (The set of tls that control this node) ...
Definition: NBNode.h:302
Sorts outgoing before incoming edges.
Definition: NBNode.h:693
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
Definition: NBCont.h:34
bool forbids(const NBEdge *const possProhibitorFrom, const NBEdge *const possProhibitorTo, const NBEdge *const possProhibitedFrom, const NBEdge *const possProhibitedTo, bool regardNonSignalisedLowerPriority) const
Returns the information whether "prohibited" flow must let "prohibitor" flow pass.
Definition: NBNode.cpp:1598
void buildInnerEdges()
build internal lanes, pedestrian crossings and walking areas
Definition: NBNode.cpp:2260
std::vector< Position > getEndPoints() const
return list of unique endpoint coordinates of all edges at this node
Definition: NBNode.cpp:3122
static const int FOUR_CONTROL_POINTS
Definition: NBNode.h:210
NBNode & operator=(const NBNode &s)
invalidated assignment operator
double customWidth
This crossing&#39;s width.
Definition: NBNode.h:135
A definition of a pedestrian walking area.
Definition: NBNode.h:164
EdgeVector * myApproaching
The list of edges that approach the current edge.
Definition: NBNode.h:91
A storage for options typed value containers)
Definition: OptionsCont.h:92
const NBNode * node
The parent node of this crossing.
Definition: NBNode.h:129
SumoXMLNodeType getType() const
Returns the type of this node.
Definition: NBNode.h:266
Position getEmptyDir() const
Returns something like the most unused direction Should only be used to add source or sink nodes...
Definition: NBNode.cpp:1422
bool needsCont(const NBEdge *fromE, const NBEdge *otherFromE, const NBEdge::Connection &c, const NBEdge::Connection &otherC) const
whether an internal junction should be built at from and respect other
Definition: NBNode.cpp:751
int numAvailableLanes() const
@ get number of avaliable lanes
Definition: NBNode.h:110
EdgeVector getEdgesSortedByAngleAtNodeCenter() const
returns the list of all edges sorted clockwise by getAngleAtNodeToCenter
Definition: NBNode.cpp:2959
int tlLinkIndex
the traffic light index of this crossing (if controlled)
Definition: NBNode.h:149
const Position & getPosition() const
Definition: NBNode.h:241
EdgeVector edges
The edges being crossed.
Definition: NBNode.h:131
Represents a single node (junction) during network building.
Definition: NBNode.h:68
int guessCrossings()
guess pedestrian crossings and return how many were guessed
Definition: NBNode.cpp:1977
A definition of a pedestrian crossing.
Definition: NBNode.h:125
const std::vector< WalkingArea > & getWalkingAreas() const
return this junctions pedestrian walking areas
Definition: NBNode.h:641
void addSortedLinkFoes(const NBConnection &mayDrive, const NBConnection &mustStop)
add shorted link FOES
Definition: NBNode.cpp:1349
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
Computes lane-2-lane connections.
Definition: NBNode.h:88
bool mustBrakeForCrossing(const NBEdge *const from, const NBEdge *const to, const Crossing &crossing) const
Returns the information whether the described flow must brake for the given crossing.
Definition: NBNode.cpp:1480
std::string tlID
The id of the traffic light that controls this connection.
Definition: NBNode.h:155
NBEdge * getOppositeIncoming(NBEdge *e) const
returns the opposite incoming edge of certain edge
Definition: NBNode.cpp:1331
const std::vector< Crossing * > & getCrossingsIncludingInvalid() const
Definition: NBNode.h:636
std::vector< std::string > nextCrossings
the lane-id of the next crossing(s)
Definition: NBNode.h:182
bool isLeftMover(const NBEdge *const from, const NBEdge *const to) const
Computes whether the given connection is a left mover across the junction.
Definition: NBNode.cpp:1579
NBNode * getFromNode() const
Returns the origin node of the edge.
Definition: NBEdge.h:432
void computeLogic(const NBEdgeCont &ec, OptionsCont &oc)
computes the node&#39;s type, logic and traffic light
Definition: NBNode.cpp:824
Container for nodes during the netbuilding process.
Definition: NBNodeCont.h:60
std::string nextWalkingArea
the lane-id of the next walkingArea
Definition: NBNode.h:143
std::deque< int > * spread(const std::vector< int > &approachingLanes, int dest) const
the method that spreads the wished number of lanes from the the lane given by the bresenham-call to b...
Definition: NBNode.cpp:152
bool checkIsRemovable() const
check if node is removable
Definition: NBNode.cpp:1815
NBNode(const std::string &id, const Position &position, SumoXMLNodeType type)
Constructor.
Definition: NBNode.cpp:239
std::vector< std::pair< NBEdge *, NBEdge * > > getEdgesToJoin() const
get edges to join
Definition: NBNode.cpp:1888
PositionVector computeSmoothShape(const PositionVector &begShape, const PositionVector &endShape, int numPoints, bool isTurnaround, double extrapolateBeg, double extrapolateEnd, NBNode *recordError=0, int shapeFlag=0) const
Compute a smooth curve between the given geometries.
Definition: NBNode.cpp:474
void discardWalkingareas()
discard previously built walkingareas (required for repeated computation by netedit) ...
Definition: NBNode.cpp:2254
std::vector< std::string > prevSidewalks
the lane-id of the previous sidewalk lane or ""
Definition: NBNode.h:186
static bool isTrafficLight(SumoXMLNodeType type)
return whether the given type is a traffic light
Definition: NBNode.cpp:3017
bool valid
whether this crossing is valid (and can be written to the net.xml). This is needed for netedit becaus...
Definition: NBNode.h:157
std::vector< std::string > nextSidewalks
the lane-id of the next sidewalk lane or ""
Definition: NBNode.h:184
bool isSimpleContinuation(bool checkLaneNumbers=true) const
check if node is a simple continuation
Definition: NBNode.cpp:445
void reshiftPosition(double xoff, double yoff)
Applies an offset to the node.
Definition: NBNode.cpp:310
void remapRemoved(NBTrafficLightLogicCont &tc, NBEdge *removed, const EdgeVector &incoming, const EdgeVector &outgoing)
remap removed
Definition: NBNode.cpp:1615
static const int AVOID_WIDE_LEFT_TURN
Definition: NBNode.h:209
PositionVector shape
The polygonal shape.
Definition: NBNode.h:180
A storage for available types of edges.
Definition: NBTypeCont.h:55
double width
This lane&#39;s width.
Definition: NBNode.h:176
bool forbidsPedestriansAfter(std::vector< std::pair< NBEdge *, bool > > normalizedLanes, int startIndex)
return whether there is a non-sidewalk lane after the given index;
Definition: NBNode.cpp:2189
EdgeVector edgesBetween(const NBEdge *e1, const NBEdge *e2) const
return all edges that lie clockwise between the given edges
Definition: NBNode.cpp:2772
static std::string getNodeIDFromInternalLane(const std::string id)
returns the node id for internal lanes, crossings and walkingareas
Definition: NBNode.cpp:2982