39 #ifdef CHECK_MEMORY_LEAKS 41 #endif // CHECK_MEMORY_LEAKS 53 if (from == edges.end()) {
61 if (from == edges.begin()) {
62 from = edges.end() - 1;
71 for (std::vector<bool>::const_iterator i = v.begin(); i != v.end(); i++) {
81 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); i++) {
82 if ((*i)->getToNode() == to && (*i)->getFromNode() == from) {
93 assert(ev.size() > 0);
95 for (EdgeVector::const_iterator i = ev.begin() + 1; i != ev.end(); i++) {
97 max > (*i)->getSpeed()
98 ? max : (*i)->getSpeed();
115 return std::find(incoming.begin(), incoming.end(),
myEdge) != incoming.end();
130 return std::find(outgoing.begin(), outgoing.end(),
myEdge) != outgoing.end();
139 : myDestinationNode(dest) {}
152 if (e1 == 0 || e2 == 0) {
161 while (fabs(relAngle1 - relAngle2) < 3.0) {
174 return relAngle1 > relAngle2;
183 if (e1 == 0 || e2 == 0) {
193 while (fabs(relAngle1 - relAngle2) < 3.0) {
198 e1->
getGeometry().front().angleTo2D(referencePos1),
true));
200 e2->
getGeometry().front().angleTo2D(referencePos2),
true));
206 if (fabs(relAngle1 - relAngle2) < 3.0) {
209 myReferencePos.angleTo2D(e1->
getLaneShape(0).front()),
true));
211 myReferencePos.angleTo2D(e2->
getLaneShape(0).front()),
true));
217 return fabs(relAngle1) < fabs(relAngle2);
226 if (e1 == 0 || e2 == 0) {
235 while (fabs(relAngle1 - relAngle2) < 3.0) {
248 return relAngle1 > relAngle2;
254 for (EdgeVector::const_iterator i = ev.begin(); i != ev.end(); i++) {
255 if (i != ev.begin()) {
268 if (edges.size() == 0) {
271 SUMOReal ret = (*(edges.begin()))->getSpeed();
272 for (EdgeVector::const_iterator i = edges.begin() + 1; i != edges.end(); i++) {
273 if ((*i)->getSpeed() > ret) {
274 ret = (*i)->getSpeed();
283 if (edges.size() == 0) {
286 SUMOReal ret = (*(edges.begin()))->getSpeed();
287 for (EdgeVector::const_iterator i = edges.begin() + 1; i != edges.end(); i++) {
288 if ((*i)->getSpeed() < ret) {
289 ret = (*i)->getSpeed();
302 const SUMOReal absDiff = fabs(angle1 - angle2);
305 if (absDiff < 2 || absDiff > (360 - 2)) {
313 if (e1Peds && !e2Peds) {
315 }
else if (!e1Peds && e2Peds) {
319 if (!e1Peds && e2Peds) {
321 }
else if (e1Peds && !e2Peds) {
332 return angle1 < angle2;
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges.
node_with_outgoing_finder(const NBEdge *const e)
constructor
static SUMOReal normRelAngle(SUMOReal angle1, SUMOReal angle2)
ensure that reverse relAngles (>=179.999) always count as turnarounds (-180)
const NBEdge *const myEdge
SUMOReal getEndAngle() const
Returns the angle at the end of the edge (relative to the node shape center) The angle is computed in...
friend std::ostream & operator<<(std::ostream &os, const EdgeVector &ev)
The representation of a single edge during network building.
bool operator()(const NBNode *const n) const
SUMOReal getShapeStartAngle() const
Returns the angle at the start of the edge (only using edge shape)
static void nextCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
int operator()(const NBEdge *e1, const NBEdge *e2) const
comparing operation
Position positionAtOffset2D(SUMOReal pos, SUMOReal lateralOffset=0) const
Returns the position at the given length.
NBNode * myDestinationNode
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
const EdgeVector & getOutgoingEdges() const
Returns this node's outgoing edges.
const std::string & getID() const
Returns the id.
const Position & getPosition() const
Returns the position of this node.
static std::ostream & out(std::ostream &os, const std::vector< bool > &v)
static SUMOReal legacyDegree(const SUMOReal angle, const bool positive=false)
bool operator()(const NBNode *const n) const
A point in 2D or 3D with translation and scaling methods.
static SUMOReal maxSpeed(const EdgeVector &ev)
SUMOReal getAngleAtNodeToCenter(const NBNode *const node) const
Returns the angle of from the node shape center to where the edge meets the node shape.
edge_with_destination_finder(NBNode *dest)
constructor
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
static SUMOReal getMaxSpeed(const EdgeVector &edges)
SUMOReal length() const
Returns the length.
NBNode * getToNode() const
Returns the destination node of the edge.
std::vector< NBEdge * > EdgeVector
const NBEdge *const myEdge
const PositionVector & getGeometry() const
Returns the geometry of the edge.
bool operator()(NBEdge *e) const
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
node_with_incoming_finder(const NBEdge *const e)
constructor
Represents a single node (junction) during network building.
SUMOReal getStartAngle() const
Returns the angle at the start of the edge (relative to the node shape center) The angle is computed ...
static SUMOReal getMinSpeed(const EdgeVector &edges)
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
static void nextCCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
SUMOReal angleTo2D(const Position &other) const
returns the angle in the plane of the vector pointing from here to the other position ...
static const SUMOReal ANGLE_LOOKAHEAD
the distance at which to take the default angle
static NBEdge * findConnectingEdge(const EdgeVector &edges, NBNode *from, NBNode *to)
SUMOReal getLength() const
Returns the computed length of the edge.
NBNode * getFromNode() const
Returns the origin node of the edge.