#include <NIVissimNodeCluster.h>
Definition at line 52 of file NIVissimNodeCluster.h.
Public Member Functions | |
| void | buildNBNode (NBNodeCont &nc) |
| int | getID () const |
| NBNode * | getNBNode () const |
| std::string | getNodeName () const |
| Position2D | getPos () const |
| NIVissimNodeCluster (int id, int nodeid, int tlid, const IntVector &connectors, const IntVector &disturbances, bool amEdgeSplitOnly) | |
| bool | recheckEdgeChanges () |
| ~NIVissimNodeCluster () | |
Static Public Member Functions | |
| static void | _debugOut (std::ostream &into) |
| static void | assignToEdges () |
| static void | buildNBNodes (NBNodeCont &nc) |
| static void | clearDict () |
| static size_t | contSize () |
| static void | dict_addDisturbances (NBDistrictCont &dc, NBNodeCont &nc, NBEdgeCont &ec) |
| static void | dict_recheckEdgeChanges () |
| static NIVissimNodeCluster * | dictionary (int id) |
| static int | dictionary (int nodeid, int tlid, const IntVector &connectors, const IntVector &disturbances, bool amEdgeSplitOnly) |
| static bool | dictionary (int id, NIVissimNodeCluster *o) |
| static int | getFromNode (int edgeid) |
| static int | getToNode (int edgeid) |
| static void | setCurrentVirtID (int id) |
Private Types | |
| typedef std::map< int, NIVissimNodeCluster * > | DictType |
Private Attributes | |
| bool | myAmEdgeSplit |
| IntVector | myConnectors |
| IntVector | myDisturbances |
| int | myID |
| NBNode * | myNBNode |
| int | myNodeID |
| Position2D | myPosition |
| int | myTLID |
Static Private Attributes | |
| static int | myCurrentID = 1 |
| static DictType | myDict |
typedef std::map<int, NIVissimNodeCluster*> NIVissimNodeCluster::DictType [private] |
Definition at line 95 of file NIVissimNodeCluster.h.
| NIVissimNodeCluster::NIVissimNodeCluster | ( | int | id, | |
| int | nodeid, | |||
| int | tlid, | |||
| const IntVector & | connectors, | |||
| const IntVector & | disturbances, | |||
| bool | amEdgeSplitOnly | |||
| ) |
Definition at line 58 of file NIVissimNodeCluster.cpp.
Referenced by dictionary().
00062 : myID(id), myNodeID(nodeid), myTLID(tlid), 00063 myConnectors(connectors), myDisturbances(disturbances), 00064 myNBNode(0), myAmEdgeSplit(amEdgeSplitOnly) {}
| NIVissimNodeCluster::~NIVissimNodeCluster | ( | ) |
| void NIVissimNodeCluster::_debugOut | ( | std::ostream & | into | ) | [static] |
Definition at line 251 of file NIVissimNodeCluster.cpp.
References myConnectors, myDict, and myID.
00251 { 00252 for (DictType::iterator i=myDict.begin(); i!=myDict.end(); i++) { 00253 NIVissimNodeCluster *c = (*i).second; 00254 into << endl << c->myID << ":"; 00255 for (IntVector::iterator j=c->myConnectors.begin(); j!=c->myConnectors.end(); j++) { 00256 if (j!=c->myConnectors.begin()) { 00257 into << ", "; 00258 } 00259 into << (*j); 00260 } 00261 } 00262 into << "=======================" << endl; 00263 }
| static void NIVissimNodeCluster::assignToEdges | ( | ) | [static] |
| void NIVissimNodeCluster::buildNBNode | ( | NBNodeCont & | nc | ) |
Definition at line 129 of file NIVissimNodeCluster.cpp.
References NIVissimAbstractEdge::buildGeom(), NIVissimAbstractEdge::crossesEdge(), NIVissimAbstractEdge::crossesEdgeAtPoint(), NIVissimAbstractEdge::dictionary(), NIVissimConnection::dictionary(), NIVissimConnection::getFromGeomPosition(), getNodeName(), Position2DVector::getPolygonCenter(), NIVissimConnection::getToGeomPosition(), NBNodeCont::insert(), myAmEdgeSplit, myConnectors, myNBNode, NBNode::NODETYPE_PRIORITY_JUNCTION, Position2DVector::push_back_noDoublePos(), and Position2DVector::size().
00129 { 00130 if (myConnectors.size()==0) { 00131 return; // !!! Check, whether this can happen 00132 } 00133 00134 // compute the position 00135 Position2DVector crossings; 00136 IntVector::iterator i, j; 00137 // check whether this is a split of an edge only 00138 if (myAmEdgeSplit) { 00139 // !!! should be assert(myTLID==-1); 00140 for (i=myConnectors.begin(); i!=myConnectors.end(); i++) { 00141 NIVissimConnection *c1 = NIVissimConnection::dictionary(*i); 00142 crossings.push_back_noDoublePos(c1->getFromGeomPosition()); 00143 } 00144 } else { 00145 // compute the places the connections cross 00146 for (i=myConnectors.begin(); i!=myConnectors.end(); i++) { 00147 NIVissimAbstractEdge *c1 = NIVissimAbstractEdge::dictionary(*i); 00148 c1->buildGeom(); 00149 for (j=i+1; j!=myConnectors.end(); j++) { 00150 NIVissimAbstractEdge *c2 = NIVissimAbstractEdge::dictionary(*j); 00151 c2->buildGeom(); 00152 if (c1->crossesEdge(c2)) { 00153 crossings.push_back_noDoublePos(c1->crossesEdgeAtPoint(c2)); 00154 } 00155 } 00156 } 00157 // alternative way: compute via positions of crossings 00158 if (crossings.size()==0) { 00159 for (i=myConnectors.begin(); i!=myConnectors.end(); i++) { 00160 NIVissimConnection *c1 = NIVissimConnection::dictionary(*i); 00161 crossings.push_back_noDoublePos(c1->getFromGeomPosition()); 00162 crossings.push_back_noDoublePos(c1->getToGeomPosition()); 00163 } 00164 } 00165 } 00166 // get the position (center) 00167 Position2D pos = crossings.getPolygonCenter(); 00168 // build the node 00169 /* if(myTLID!=-1) { 00170 !!! NIVissimTL *tl = NIVissimTL::dictionary(myTLID); 00171 if(tl->getType()=="festzeit") { 00172 node = new NBNode(getNodeName(), pos.x(), pos.y(), 00173 "traffic_light"); 00174 } else { 00175 node = new NBNode(getNodeName(), pos.x(), pos.y(), 00176 "actuated_traffic_light"); 00177 } 00178 }*/ 00179 NBNode *node = new NBNode(getNodeName(), pos, NBNode::NODETYPE_PRIORITY_JUNCTION); 00180 if (!nc.insert(node)) { 00181 delete node; 00182 throw 1; 00183 } 00184 myNBNode = node; 00185 }
| void NIVissimNodeCluster::buildNBNodes | ( | NBNodeCont & | nc | ) | [static] |
Definition at line 189 of file NIVissimNodeCluster.cpp.
References myDict.
Referenced by NIImporter_Vissim::postLoadBuild().
00189 { 00190 for (DictType::iterator i=myDict.begin(); i!=myDict.end(); i++) { 00191 (*i).second->buildNBNode(nc); 00192 } 00193 }
| void NIVissimNodeCluster::clearDict | ( | ) | [static] |
Definition at line 295 of file NIVissimNodeCluster.cpp.
References myDict.
Referenced by NIImporter_Vissim::~NIImporter_Vissim().
00295 { 00296 for (DictType::iterator i=myDict.begin(); i!=myDict.end(); i++) { 00297 delete(*i).second; 00298 } 00299 myDict.clear(); 00300 }
| size_t NIVissimNodeCluster::contSize | ( | ) | [static] |
Definition at line 112 of file NIVissimNodeCluster.cpp.
References myDict.
00112 { 00113 return myDict.size(); 00114 }
| void NIVissimNodeCluster::dict_addDisturbances | ( | NBDistrictCont & | dc, | |
| NBNodeCont & | nc, | |||
| NBEdgeCont & | ec | |||
| ) | [static] |
Definition at line 280 of file NIVissimNodeCluster.cpp.
References NIVissimDisturbance::addToNode(), NIVissimDisturbance::dictionary(), myDict, NIVissimDisturbance::reportRefused(), and NBNodeCont::retrieve().
Referenced by NIImporter_Vissim::postLoadBuild().
00281 { 00282 for (DictType::iterator i=myDict.begin(); i!=myDict.end(); i++) { 00283 const IntVector &disturbances = (*i).second->myDisturbances; 00284 NBNode *node = nc.retrieve((*i).second->getNodeName()); 00285 for (IntVector::const_iterator j=disturbances.begin(); j!=disturbances.end(); j++) { 00286 NIVissimDisturbance *disturbance = NIVissimDisturbance::dictionary(*j); 00287 disturbance->addToNode(node, dc, nc, ec); 00288 } 00289 } 00290 NIVissimDisturbance::reportRefused(); 00291 }
| void NIVissimNodeCluster::dict_recheckEdgeChanges | ( | ) | [static] |
| NIVissimNodeCluster * NIVissimNodeCluster::dictionary | ( | int | id | ) | [static] |
Definition at line 101 of file NIVissimNodeCluster.cpp.
References myDict.
00101 { 00102 DictType::iterator i=myDict.find(id); 00103 if (i==myDict.end()) { 00104 return 0; 00105 } 00106 return (*i).second; 00107 }
| int NIVissimNodeCluster::dictionary | ( | int | nodeid, | |
| int | tlid, | |||
| const IntVector & | connectors, | |||
| const IntVector & | disturbances, | |||
| bool | amEdgeSplitOnly | |||
| ) | [static] |
Definition at line 85 of file NIVissimNodeCluster.cpp.
References dictionary(), myCurrentID, and NIVissimNodeCluster().
00088 { 00089 int id = nodeid; 00090 if (nodeid<0) { 00091 id = myCurrentID++; 00092 } 00093 NIVissimNodeCluster *o = new NIVissimNodeCluster(id, 00094 nodeid, tlid, connectors, disturbances, amEdgeSplitOnly); 00095 dictionary(id, o); 00096 return id; 00097 }
| bool NIVissimNodeCluster::dictionary | ( | int | id, | |
| NIVissimNodeCluster * | o | |||
| ) | [static] |
Definition at line 73 of file NIVissimNodeCluster.cpp.
References myDict.
Referenced by NIVissimConnectionCluster::buildNodeClusters(), NIVissimConnection::buildNodeClusters(), dictionary(), and NIVissimConnectionCluster::getNBNode().
00073 { 00074 DictType::iterator i=myDict.find(id); 00075 if (i==myDict.end()) { 00076 myDict[id] = o; 00077 return true; 00078 } 00079 assert(false); 00080 return false; 00081 }
| int NIVissimNodeCluster::getFromNode | ( | int | edgeid | ) | [static] |
Definition at line 204 of file NIVissimNodeCluster.cpp.
References NIVissimConnection::dictionary(), NIVissimConnection::getToEdgeID(), myConnectors, and myDict.
00204 { 00205 int ret = -1; 00206 bool mult = false; 00207 for (DictType::iterator i=myDict.begin(); i!=myDict.end(); i++) { 00208 NIVissimNodeCluster *c = (*i).second; 00209 for (IntVector::iterator j=c->myConnectors.begin(); j!=c->myConnectors.end(); j++) { 00210 NIVissimConnection *conn = NIVissimConnection::dictionary(*j); 00211 if (conn!=0&&conn->getToEdgeID()==edgeid) { 00212 // return (*i).first; 00213 if (ret!=-1&&(*i).first!=ret) { 00214 mult = true; 00215 // "NIVissimNodeCluster:DoubleNode:" << ret << endl; 00216 throw 1; // an edge should not outgo from two different nodes 00217 // but actually, a joined cluster may posess a connections more than once 00218 } 00219 ret = (*i).first; 00220 } 00221 } 00222 } 00223 return ret; 00224 }
| int NIVissimNodeCluster::getID | ( | ) | const [inline] |
Definition at line 59 of file NIVissimNodeCluster.h.
References myID.
00059 { 00060 return myID; 00061 }
| NBNode * NIVissimNodeCluster::getNBNode | ( | ) | const |
Definition at line 268 of file NIVissimNodeCluster.cpp.
References myNBNode.
00268 { 00269 return myNBNode; 00270 }
| std::string NIVissimNodeCluster::getNodeName | ( | ) | const |
Definition at line 119 of file NIVissimNodeCluster.cpp.
Referenced by buildNBNode().
00119 { 00120 if (myTLID==-1) { 00121 return toString<int>(myID); 00122 } else { 00123 return toString<int>(myID) + "LSA " + toString<int>(myTLID); 00124 } 00125 }
| Position2D NIVissimNodeCluster::getPos | ( | ) | const |
Definition at line 274 of file NIVissimNodeCluster.cpp.
References myPosition.
00274 { 00275 return myPosition; 00276 }
| int NIVissimNodeCluster::getToNode | ( | int | edgeid | ) | [static] |
Definition at line 228 of file NIVissimNodeCluster.cpp.
References NIVissimConnection::dictionary(), NIVissimConnection::getFromEdgeID(), myConnectors, and myDict.
00228 { 00229 int ret = -1; 00230 for (DictType::iterator i=myDict.begin(); i!=myDict.end(); i++) { 00231 NIVissimNodeCluster *c = (*i).second; 00232 for (IntVector::iterator j=c->myConnectors.begin(); j!=c->myConnectors.end(); j++) { 00233 NIVissimConnection *conn = NIVissimConnection::dictionary(*j); 00234 if (conn!=0&&conn->getFromEdgeID()==edgeid) { 00235 // return (*i).first; 00236 if (ret!=-1&&ret!=(*i).first) { 00237 // << "NIVissimNodeCluster: multiple to-nodes" << endl; 00238 throw 1; // an edge should not outgo from two different nodes 00239 // but actually, a joined cluster may posess a connections more than once 00240 00241 } 00242 ret = (*i).first; 00243 } 00244 } 00245 } 00246 return ret; 00247 }
| bool NIVissimNodeCluster::recheckEdgeChanges | ( | ) |
| void NIVissimNodeCluster::setCurrentVirtID | ( | int | id | ) | [static] |
Definition at line 304 of file NIVissimNodeCluster.cpp.
References myCurrentID.
Referenced by NIImporter_Vissim::postLoadBuild().
00304 { 00305 myCurrentID = id; 00306 }
bool NIVissimNodeCluster::myAmEdgeSplit [private] |
IntVector NIVissimNodeCluster::myConnectors [private] |
Definition at line 92 of file NIVissimNodeCluster.h.
Referenced by _debugOut(), buildNBNode(), getFromNode(), and getToNode().
int NIVissimNodeCluster::myCurrentID = 1 [static, private] |
Definition at line 97 of file NIVissimNodeCluster.h.
Referenced by dictionary(), and setCurrentVirtID().
NIVissimNodeCluster::DictType NIVissimNodeCluster::myDict [static, private] |
Definition at line 96 of file NIVissimNodeCluster.h.
Referenced by _debugOut(), buildNBNodes(), clearDict(), contSize(), dict_addDisturbances(), dictionary(), getFromNode(), and getToNode().
IntVector NIVissimNodeCluster::myDisturbances [private] |
Definition at line 93 of file NIVissimNodeCluster.h.
int NIVissimNodeCluster::myID [private] |
Definition at line 89 of file NIVissimNodeCluster.h.
Referenced by _debugOut(), getID(), and getNodeName().
NBNode* NIVissimNodeCluster::myNBNode [private] |
int NIVissimNodeCluster::myNodeID [private] |
Definition at line 90 of file NIVissimNodeCluster.h.
Position2D NIVissimNodeCluster::myPosition [private] |
int NIVissimNodeCluster::myTLID [private] |
1.5.6