bool NIVissimTL::dict_SetSignals(NBTrafficLightLogicCont& tlc, NBEdgeCont& ec) { size_t ref = 0; size_t ref_groups = 0; size_t ref_signals = 0; size_t no_signals = 0; size_t no_groups = 0; for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) { NIVissimTL* tl = (*i).second; /* if(tl->myType!="festzeit") { cout << " Warning: The traffic light '" << tl->myID << "' could not be assigned to a node." << endl; ref++; continue; }*/ std::string id = toString<int>(tl->myID); TrafficLightType type = ((tl->getType() == "festzeit" || tl->getType() == "festzeit_fake") ? TLTYPE_STATIC : TLTYPE_ACTUATED); NBLoadedTLDef* def = new NBLoadedTLDef(id, 0, type); if (!tlc.insert(def)) { WRITE_ERROR("Error on adding a traffic light\n Must be a multiple id ('" + id + "')"); continue; } def->setCycleDuration((unsigned int) tl->myAbsDuration); // add each group to the node's container SGroupDictType sgs = NIVissimTLSignalGroup::getGroupsFor(tl->getID()); for (SGroupDictType::const_iterator j = sgs.begin(); j != sgs.end(); j++) { if (!(*j).second->addTo(def)) { WRITE_WARNING("The signal group '" + toString<int>((*j).first) + "' could not be assigned to tl '" + toString<int>(tl->myID) + "'."); ref_groups++; } no_groups++; } // add the signal group signals to the node SSignalDictType signals = NIVissimTLSignal::getSignalsFor(tl->getID()); for (SSignalDictType::const_iterator k = signals.begin(); k != signals.end(); k++) { if (!(*k).second->addTo(ec, def)) { WRITE_WARNING("The signal '" + toString<int>((*k).first) + "' could not be assigned to tl '" + toString<int>(tl->myID) + "'."); ref_signals++; } no_signals++; } } if (ref != 0) { WRITE_WARNING("Could not set " + toString<size_t>(ref) + " of " + toString<size_t>(myDict.size()) + " traffic lights."); } if (ref_groups != 0) { WRITE_WARNING("Could not set " + toString<size_t>(ref_groups) + " of " + toString<size_t>(no_groups) + " groups."); } if (ref_signals != 0) { WRITE_WARNING("Could not set " + toString<size_t>(ref_signals) + " of " + toString<size_t>(no_signals) + " signals."); } return true; }
void NIVisumTL::build(NBEdgeCont& ec, NBTrafficLightLogicCont& tlc) { for (std::vector<NBNode*>::iterator ni = myNodes.begin(); ni != myNodes.end(); ni++) { NBNode* node = (*ni); TrafficLightType type = SUMOXMLDefinitions::TrafficLightTypes.get(OptionsCont::getOptions().getString("tls.default-type")); NBLoadedTLDef* def = new NBLoadedTLDef(ec, node->getID(), node, myOffset, type); tlc.insert(def); def->setCycleDuration((unsigned int) myCycleTime); // signalgroups for (std::map<std::string, SignalGroup*>::iterator gi = mySignalGroups.begin(); gi != mySignalGroups.end(); gi++) { std::string groupName = (*gi).first; NIVisumTL::SignalGroup& SG = *(*gi).second; def->addSignalGroup(groupName); def->addToSignalGroup(groupName, SG.connections()); // phases SUMOTime yellowTime = -1; if (myPhaseDefined) { for (std::map<std::string, Phase*>::iterator pi = SG.phases().begin(); pi != SG.phases().end(); pi++) { NIVisumTL::Phase& PH = *(*pi).second; def->addSignalGroupPhaseBegin(groupName, PH.getStartTime(), NBTrafficLightDefinition::TLCOLOR_GREEN); def->addSignalGroupPhaseBegin(groupName, PH.getEndTime(), NBTrafficLightDefinition::TLCOLOR_RED); yellowTime = MAX2(PH.getYellowTime(), yellowTime); }; } else { def->addSignalGroupPhaseBegin(groupName, SG.getStartTime(), NBTrafficLightDefinition::TLCOLOR_GREEN); def->addSignalGroupPhaseBegin(groupName, SG.getEndTime(), NBTrafficLightDefinition::TLCOLOR_RED); yellowTime = MAX2(SG.getYellowTime(), yellowTime); } // yellowTime can be -1 if not given in the input; it will be "patched" later def->setSignalYellowTimes(groupName, myIntermediateTime, yellowTime); } } }