void MSEdge::closeBuilding() { myAllowed[0] = new std::vector<MSLane*>(); for (std::vector<MSLane*>::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) { 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.myPredeccesors.begin(), to.myPredeccesors.end(), this) == to.myPredeccesors.end()) { to.myPredeccesors.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(); to.myPredeccesors.push_back(this); } #endif } } std::sort(mySuccessors.begin(), mySuccessors.end(), by_id_sorter()); rebuildAllowedLanes(); }
void GUIEdge::closeTraffic(const GUILane* lane) { const std::vector<MSLane*>& lanes = getLanes(); const bool isClosed = lane->isClosed(); for (std::vector<MSLane*>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) { GUILane* l = dynamic_cast<GUILane*>(*i); if (l->isClosed() == isClosed) { l->closeTraffic(false); } } rebuildAllowedLanes(); }
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()); } }