NIVissimNodeCluster Class Reference

#include <NIVissimNodeCluster.h>


Detailed Description

Definition at line 52 of file NIVissimNodeCluster.h.


Public Member Functions

void buildNBNode (NBNodeCont &nc)
int getID () const
NBNodegetNBNode () 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 NIVissimNodeClusterdictionary (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
NBNodemyNBNode
int myNodeID
Position2D myPosition
int myTLID

Static Private Attributes

static int myCurrentID = 1
static DictType myDict

Member Typedef Documentation

typedef std::map<int, NIVissimNodeCluster*> NIVissimNodeCluster::DictType [private]

Definition at line 95 of file NIVissimNodeCluster.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 67 of file NIVissimNodeCluster.cpp.

00067 {}


Member Function Documentation

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]

Definition at line 198 of file NIVissimNodeCluster.cpp.

00198                                              {
00199     return;
00200 }

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.

References myID, and myTLID.

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 }


Field Documentation

Definition at line 99 of file NIVissimNodeCluster.h.

Referenced by buildNBNode().

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().

Definition at line 93 of file NIVissimNodeCluster.h.

Definition at line 89 of file NIVissimNodeCluster.h.

Referenced by _debugOut(), getID(), and getNodeName().

Definition at line 98 of file NIVissimNodeCluster.h.

Referenced by buildNBNode(), and getNBNode().

Definition at line 90 of file NIVissimNodeCluster.h.

Definition at line 94 of file NIVissimNodeCluster.h.

Referenced by getPos().

Definition at line 91 of file NIVissimNodeCluster.h.

Referenced by getNodeName().


The documentation for this class was generated from the following files:

Generated on Wed May 5 00:06:54 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6