void GUINet::initTLMap() { // get the list of loaded tl-logics const std::vector<MSTrafficLightLogic*> &logics = getTLSControl().getAllLogics(); // allocate storage for the wrappers myTLLogicWrappers.reserve(logics.size()); // go through the logics for (std::vector<MSTrafficLightLogic*>::const_iterator i=logics.begin(); i!=logics.end(); ++i) { // get the logic MSTrafficLightLogic *tll = (*i); // get the links const MSTrafficLightLogic::LinkVectorVector &links = tll->getLinks(); if (links.size()==0) { continue; } // build the wrapper GUITrafficLightLogicWrapper *tllw = new GUITrafficLightLogicWrapper(GUIGlObjectStorage::gIDStorage, *myLogics, *tll); // build the association link->wrapper MSTrafficLightLogic::LinkVectorVector::const_iterator j; for (j=links.begin(); j!=links.end(); j++) { MSTrafficLightLogic::LinkVector::const_iterator j2; for (j2=(*j).begin(); j2!=(*j).end(); j2++) { myLinks2Logic[*j2] = tll->getID(); } } myLogics2Wrapper[tll] = tllw; } }
SUMOTime Command_SaveTLSSwitches::execute(SUMOTime currentTime) { MSTrafficLightLogic* light = myLogics.getActive(); const MSTrafficLightLogic::LinkVectorVector& links = light->getLinks(); const std::string& state = light->getCurrentPhaseDef().getState(); for (unsigned int i = 0; i < (unsigned int) links.size(); i++) { if (state[i] == LINKSTATE_TL_GREEN_MAJOR || state[i] == LINKSTATE_TL_GREEN_MINOR) { if (myPreviousLinkStates.find(i) == myPreviousLinkStates.end()) { // was not saved before myPreviousLinkStates[i] = currentTime; continue; } } else { if (myPreviousLinkStates.find(i) == myPreviousLinkStates.end()) { // was not yet green continue; } const MSTrafficLightLogic::LinkVector& currLinks = links[i]; const MSTrafficLightLogic::LaneVector& currLanes = light->getLanesAt(i); SUMOTime lastOn = myPreviousLinkStates[i]; for (int j = 0; j < (int) currLinks.size(); j++) { MSLink* link = currLinks[j]; myOutputDevice << " <tlsSwitch id=\"" << light->getID() << "\" programID=\"" << light->getProgramID() << "\" fromLane=\"" << currLanes[j]->getID() << "\" toLane=\"" << link->getLane()->getID() << "\" begin=\"" << time2string(lastOn) << "\" end=\"" << time2string(currentTime) << "\" duration=\"" << time2string(currentTime - lastOn) << "\"/>\n"; } myPreviousLinkStates.erase(myPreviousLinkStates.find(i)); } } return DELTA_T; }