Eclipse SUMO - Simulation of Urban MObility
NIVissimAbstractEdge.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 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 /****************************************************************************/
16 // -------------------
17 /****************************************************************************/
18 
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #include <config.h>
24 
25 
26 #include <map>
27 #include <cassert>
29 #include <utils/common/ToString.h>
30 #include <utils/geom/GeomHelper.h>
32 #include <netbuild/NBNetBuilder.h>
33 #include "NIVissimAbstractEdge.h"
34 
35 
37 
39  const PositionVector& geom)
40  : myID(id), myNode(-1) {
41  // convert/publicate geometry
42  for (PositionVector::const_iterator i = geom.begin(); i != geom.end(); ++i) {
43  Position p = *i;
45  WRITE_WARNING("Unable to project coordinates for edge '" + toString(id) + "'.");
46  }
48  }
49  //
50  dictionary(id, this);
51 }
52 
53 
55 
56 
57 bool
59  DictType::iterator i = myDict.find(id);
60  if (i == myDict.end()) {
61  myDict[id] = e;
62  return true;
63  }
64  return false;
65 }
66 
67 
70  DictType::iterator i = myDict.find(id);
71  if (i == myDict.end()) {
72  return nullptr;
73  }
74  return (*i).second;
75 }
76 
77 
78 
81  if (myGeom.length() > pos) {
82  return myGeom.positionAtOffset(pos);
83  } else if (myGeom.length() == pos) {
84  return myGeom[-1];
85  } else {
87  const double amount = pos - myGeom.length();
88  g.extrapolate(amount * 2);
89  return g.positionAtOffset(pos + amount * 2);
90  }
91 }
92 
93 
94 void
96  for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) {
97  NIVissimAbstractEdge* e = (*i).second;
98  e->splitAssigning();
99  }
100 }
101 
102 void
104 
105 
106 
107 
108 
109 bool
111  return myGeom.intersects(c->myGeom);
112 }
113 
114 
115 Position
118 }
119 
120 
121 std::vector<int>
123  std::vector<int> ret;
124  for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) {
125  NIVissimAbstractEdge* e = (*i).second;
126  if (e->overlapsWith(p, offset)) {
127  ret.push_back(e->myID);
128  }
129  }
130  return ret;
131 }
132 
133 
134 bool
135 NIVissimAbstractEdge::overlapsWith(const AbstractPoly& p, double offset) const {
136  return myGeom.overlapsWith(p, offset);
137 }
138 
139 
140 bool
142  return myNode != -1;
143 }
144 
145 
146 int
148  return myID;
149 }
150 
151 void
153  for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) {
154  delete (*i).second;
155  }
156  myDict.clear();
157 }
158 
159 
160 const PositionVector&
162  return myGeom;
163 }
164 
165 
166 void
168  myDisturbances.push_back(disturbance);
169 }
170 
171 
172 const std::vector<int>&
174  return myDisturbances;
175 }
176 
177 
178 
179 /****************************************************************************/
180 
NIVissimAbstractEdge
Definition: NIVissimAbstractEdge.h:36
AbstractPoly
Definition: AbstractPoly.h:35
ToString.h
NIVissimAbstractEdge::getWithin
static std::vector< int > getWithin(const AbstractPoly &p, double offset=0.0)
Definition: NIVissimAbstractEdge.cpp:122
WRITE_WARNING
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:275
PositionVector::overlapsWith
bool overlapsWith(const AbstractPoly &poly, double offset=0) const
Returns the information whether the given polygon overlaps with this.
Definition: PositionVector.cpp:108
MsgHandler.h
GeoConvHelper.h
NIVissimAbstractEdge::clearDict
static void clearDict()
Definition: NIVissimAbstractEdge.cpp:152
NIVissimAbstractEdge::myDict
static DictType myDict
Definition: NIVissimAbstractEdge.h:72
PositionVector::extrapolate
void extrapolate(const double val, const bool onlyFirst=false, const bool onlyLast=false)
extrapolate position vector
Definition: PositionVector.cpp:1042
NBNetBuilder::transformCoordinate
static bool transformCoordinate(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
Definition: NBNetBuilder.cpp:633
PositionVector::length
double length() const
Returns the length.
Definition: PositionVector.cpp:484
NIVissimAbstractEdge::crossesEdge
bool crossesEdge(NIVissimAbstractEdge *c) const
Definition: NIVissimAbstractEdge.cpp:110
PositionVector
A list of positions.
Definition: PositionVector.h:45
NIVissimAbstractEdge::getID
int getID() const
Definition: NIVissimAbstractEdge.cpp:147
NIVissimAbstractEdge::hasNodeCluster
bool hasNodeCluster() const
Definition: NIVissimAbstractEdge.cpp:141
NIVissimAbstractEdge::DictType
std::map< int, NIVissimAbstractEdge * > DictType
Definition: NIVissimAbstractEdge.h:71
NIVissimAbstractEdge::crossesEdgeAtPoint
Position crossesEdgeAtPoint(NIVissimAbstractEdge *c) const
Definition: NIVissimAbstractEdge.cpp:116
PositionVector::intersects
bool intersects(const Position &p1, const Position &p2) const
Returns the information whether this list of points interesects the given line.
Definition: PositionVector.cpp:159
PositionVector::push_back_noDoublePos
void push_back_noDoublePos(const Position &p)
insert in back a non double position
Definition: PositionVector.cpp:1295
NIVissimAbstractEdge::addDisturbance
void addDisturbance(int disturbance)
Definition: NIVissimAbstractEdge.cpp:167
NIVissimAbstractEdge::myID
int myID
Definition: NIVissimAbstractEdge.h:65
NIVissimAbstractEdge::myDisturbances
std::vector< int > myDisturbances
Definition: NIVissimAbstractEdge.h:67
PositionVector::positionAtOffset
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
Definition: PositionVector.cpp:248
NBNetBuilder.h
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
NIVissimAbstractEdge::getGeometry
const PositionVector & getGeometry() const
Definition: NIVissimAbstractEdge.cpp:161
NIVissimAbstractEdge::getDisturbances
const std::vector< int > & getDisturbances() const
Definition: NIVissimAbstractEdge.cpp:173
NIVissimAbstractEdge::myNode
int myNode
Definition: NIVissimAbstractEdge.h:68
NIVissimAbstractEdge::dictionary
static bool dictionary(int id, NIVissimAbstractEdge *e)
Definition: NIVissimAbstractEdge.cpp:58
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:47
NIVissimAbstractEdge.h
NIVissimAbstractEdge::getGeomPosition
Position getGeomPosition(double pos) const
Definition: NIVissimAbstractEdge.cpp:80
PositionVector::intersectionPosition2D
Position intersectionPosition2D(const Position &p1, const Position &p2, const double withinDist=0.) const
Returns the position of the intersection.
Definition: PositionVector.cpp:187
NIVissimAbstractEdge::splitAssigning
void splitAssigning()
Definition: NIVissimAbstractEdge.cpp:103
NIVissimAbstractEdge::splitAndAssignToNodes
static void splitAndAssignToNodes()
Definition: NIVissimAbstractEdge.cpp:95
config.h
NIVissimAbstractEdge::~NIVissimAbstractEdge
virtual ~NIVissimAbstractEdge()
Definition: NIVissimAbstractEdge.cpp:54
GeomHelper.h
NIVissimAbstractEdge::overlapsWith
bool overlapsWith(const AbstractPoly &p, double offset=0.0) const
Definition: NIVissimAbstractEdge.cpp:135
NIVissimAbstractEdge::myGeom
PositionVector myGeom
Definition: NIVissimAbstractEdge.h:66
NIVissimAbstractEdge::NIVissimAbstractEdge
NIVissimAbstractEdge(int id, const PositionVector &geom)
Definition: NIVissimAbstractEdge.cpp:38