21 #ifndef NBContHelper_h 22 #define NBContHelper_h 60 EdgeVector::const_iterator& from);
65 EdgeVector::const_iterator& from);
72 static std::ostream&
out(std::ostream& os,
const std::vector<bool>& v);
107 myRefIncoming(e->getToNode() == n) {
186 myRegardPriority(regardPriority) {
187 myAngle = getEdgeAngleAt(e, n);
197 return getDiff(e1) > getDiff(e2);
258 : myAngle(e->getTotalAngle()) {}
354 std::pair<double, double> mm1 = getMinMaxRelAngles(e1);
355 std::pair<double, double> mm2 = getMinMaxRelAngles(e2);
356 if (mm1.first == mm2.first && mm1.second == mm2.second) {
362 (mm1.first <= mm2.first && mm1.second <= mm2.second)
364 (mm1.first >= mm2.first && mm1.second >= mm2.second));
365 return (mm1.first >= mm2.first && mm1.second >= mm2.second);
375 for (EdgeVector::const_iterator i = ev.begin(); i != ev.end(); ++i) {
378 if (min == 360 || min > angle) {
381 if (max == 360 || max < angle) {
385 return std::pair<double, double>(min, max);
396 : myReferenceEdge(edge) { }
400 myReferenceEdge->isTurningDirectionAt(e);
static double getMinAngleDiff(double angle1, double angle2)
Returns the minimum distance (clockwise/counter-clockwise) between both angles.
double myAngle
the angle to find the edge with the opposite direction
static double maxSpeed(const EdgeVector &ev)
static double getMinSpeed(const EdgeVector &edges)
NBEdge * myEdge
the edge to compute the relative angle of
static double normRelAngle(double angle1, double angle2)
ensure that reverse relAngles (>=179.999) always count as turnarounds (-180)
bool myRegardPriority
Whether edge priority may override closer angles.
const NBNode *const myNode
The related node.
int getPriority() const
Returns the priority of the edge.
const NBEdge *const myEdge
friend std::ostream & operator<<(std::ostream &os, const EdgeVector &ev)
The representation of a single edge during network building.
Class to sort edges by their angle in relation to the given edge.
double getEdgeAngleAt(const NBEdge *const e, const NBNode *const n) const
Returns the given edge's angle at the given node.
std::pair< double, double > getMinMaxRelAngles(NBEdge *e) const
opposite_finder(NBEdge *edge)
constructor
int operator()(NBEdge *e1, NBEdge *e2) const
Comparing operation.
double getDiff(const NBEdge *const e) const
Computes the angle difference between the related and the given edge.
static void nextCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
const std::string & getID() const
Returns the id.
relative_outgoing_edge_sorter(NBEdge *e)
constructor
double getShapeStartAngle() const
Returns the angle at the start of the edge.
bool operator()(NBEdge *e) const
NBNode * myDestinationNode
straightness_sorter(const NBNode *n, const NBEdge *e)
constructor
edge_similar_direction_sorter(const NBEdge *const e)
constructor
static std::ostream & out(std::ostream &os, const std::vector< bool > &v)
int getNumLanes() const
Returns the number of lanes.
A point in 2D or 3D with translation and scaling methods.
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
NBEdge * myEdge
the edge to compute the relative angle of
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
edge_by_angle_to_nodeShapeCentroid_sorter(const NBNode *n)
constructor
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
double myAngle
The angle of the related edge at the given node.
double getSpeed() const
Returns the speed allowed on this edge.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
double getTotalAngle() const
Returns the angle at the start of the edge.
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operator
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
same_connection_edge_sorter()
constructor
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
const NBEdge *const myEdge
const NBNode * myNode
the edge to compute the relative angle of
double angleAt2D(int pos) const
get angle in certain position of position vector
edge_opposite_direction_sorter(const NBEdge *const e, const NBNode *const n, bool regardPriority)
Constructor.
bool isTurningDirectionAt(const NBEdge *const edge) const
Returns whether the given edge is the opposite direction to this edge.
Represents a single node (junction) during network building.
EdgeVector getConnectedEdges() const
Returns the list of outgoing edges unsorted.
static double getMaxSpeed(const EdgeVector &edges)
const NBEdge *const myEdge
the reference edge
NBNode * getFromNode() const
Returns the origin node of the edge.
relative_incoming_edge_sorter(NBEdge *e)
constructor
static double angleDiff(const double angle1, const double angle2)
Returns the difference of the second angle to the first angle in radiants.
double getShapeEndAngle() const
Returns the angle at the end of the edge.
static void nextCCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
static NBEdge * findConnectingEdge(const EdgeVector &edges, NBNode *from, NBNode *to)