void MSEdge::initialize(const std::vector<MSLane*>* lanes) { assert(lanes != 0); myLanes = lanes; if (!lanes->empty()) { recalcCache(); } if (myFunction == EDGEFUNCTION_DISTRICT) { myCombinedPermissions = SVCAll; } for (std::vector<MSLane*>::const_iterator i = myLanes->begin(); i != myLanes->end(); ++i) { myWidth += (*i)->getWidth(); } if (MSGlobals::gLateralResolution > 0 || MSGlobals::gLaneChangeDuration > 0) { SUMOReal widthBefore = 0; for (std::vector<MSLane*>::const_iterator i = myLanes->begin(); i != myLanes->end(); ++i) { (*i)->setRightSideOnEdge(widthBefore, (int)mySublaneSides.size()); MSLeaderInfo ahead(*i); for (int j = 0; j < ahead.numSublanes(); ++j) { mySublaneSides.push_back(widthBefore + j * MSGlobals::gLateralResolution); } widthBefore += (*i)->getWidth(); } } }
void MSEdge::initialize(const std::vector<MSLane*>* lanes) { assert(lanes != 0); myLanes = lanes; if (!lanes->empty()) { recalcCache(); if (myLanes->size() > 1) { myLaneChanger = new MSLaneChanger(myLanes, OptionsCont::getOptions().getBool("lanechange.allow-swap")); } } if (myFunction == EDGEFUNCTION_DISTRICT) { myCombinedPermissions = SVCAll; } }
void MSEdge::initialize(const std::vector<MSLane*>* lanes) { assert(lanes != 0); myLanes = lanes; if (!lanes->empty()) { recalcCache(); if (myLanes->size() > 1) { myLaneChanger = new MSLaneChanger(myLanes, OptionsCont::getOptions().getBool("lanechange.allow-swap")); } } if (myFunction == EDGEFUNCTION_DISTRICT) { myCombinedPermissions = SVCAll; } #ifdef HAVE_INTERNAL if (MSGlobals::gUseMesoSim && !lanes->empty()) { MSGlobals::gMesoNet->buildSegmentsFor(*this, OptionsCont::getOptions()); } #endif }
void MSEdge::closeBuilding() { myAllowed[0] = new std::vector<MSLane*>(); for (std::vector<MSLane*>::const_iterator i = myLanes->begin(); i != myLanes->end(); ++i) { myAllowed[0]->push_back(*i); const MSLinkCont& lc = (*i)->getLinkCont(); for (MSLinkCont::const_iterator j = lc.begin(); j != lc.end(); ++j) { (*j)->initParallelLinks(); MSLane* toL = (*j)->getLane(); if (toL != 0) { MSEdge& to = toL->getEdge(); // if (std::find(mySuccessors.begin(), mySuccessors.end(), &to) == mySuccessors.end()) { mySuccessors.push_back(&to); } if (std::find(to.myPredecessors.begin(), to.myPredecessors.end(), this) == to.myPredecessors.end()) { to.myPredecessors.push_back(this); } // if (myAllowed.find(&to) == myAllowed.end()) { myAllowed[&to] = new std::vector<MSLane*>(); } myAllowed[&to]->push_back(*i); } #ifdef HAVE_INTERNAL_LANES toL = (*j)->getViaLane(); if (toL != 0) { MSEdge& to = toL->getEdge(); if (std::find(to.myPredecessors.begin(), to.myPredecessors.end(), this) == to.myPredecessors.end()) { to.myPredecessors.push_back(this); } } #endif } } std::sort(mySuccessors.begin(), mySuccessors.end(), by_id_sorter()); rebuildAllowedLanes(); recalcCache(); // segment building depends on the finished list of successors (for multi-queue) if (MSGlobals::gUseMesoSim && !myLanes->empty()) { MSGlobals::gMesoNet->buildSegmentsFor(*this, OptionsCont::getOptions()); } }