|
SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00007 // Intermediate class for storing visum traffic lights during their import 00008 /****************************************************************************/ 00009 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00010 // Copyright (C) 2001-2011 DLR (http://www.dlr.de/) and contributors 00011 /****************************************************************************/ 00012 // 00013 // This program is free software; you can redistribute it and/or modify 00014 // it under the terms of the GNU General Public License as published by 00015 // the Free Software Foundation; either version 2 of the License, or 00016 // (at your option) any later version. 00017 // 00018 /****************************************************************************/ 00019 00020 00021 // =========================================================================== 00022 // included modules 00023 // =========================================================================== 00024 #ifdef _MSC_VER 00025 #include <windows_config.h> 00026 #else 00027 #include <config.h> 00028 #endif 00029 00030 #include <string> 00031 #include <netbuild/NBLoadedTLDef.h> 00032 #include <netbuild/NBTrafficLightLogicCont.h> 00033 #include "NIVisumTL.h" 00034 00035 #ifdef CHECK_MEMORY_LEAKS 00036 #include <foreign/nvwa/debug_new.h> 00037 #endif // CHECK_MEMORY_LEAKS 00038 00039 // =========================================================================== 00040 // used namespaces 00041 // =========================================================================== 00042 using namespace std; 00043 00044 // =========================================================================== 00045 // method definitions 00046 // =========================================================================== 00047 /* ------------------------------------------------------------------------- 00048 * methods from NIVisumTL::TimePeriod 00049 * ----------------------------------------------------------------------- */ 00050 NIVisumTL::TimePeriod::TimePeriod() { 00051 myEndTime = 0; 00052 myStartTime = 0; 00053 } 00054 00055 NIVisumTL::TimePeriod::TimePeriod(SUMOTime StartTime, SUMOTime EndTime) { 00056 myStartTime = StartTime; 00057 myEndTime = EndTime; 00058 } 00059 00060 NIVisumTL::TimePeriod::~TimePeriod() {} 00061 00062 SUMOTime 00063 NIVisumTL::TimePeriod::GetEndTime() { 00064 return myEndTime; 00065 } 00066 00067 SUMOTime 00068 NIVisumTL::TimePeriod::GetStartTime() { 00069 return myStartTime; 00070 } 00071 00072 void 00073 NIVisumTL::TimePeriod::SetEndTime(SUMOTime EndTime) { 00074 myEndTime = EndTime; 00075 } 00076 00077 void 00078 NIVisumTL::TimePeriod::SetStartTime(SUMOTime StartTime) { 00079 myStartTime = StartTime; 00080 } 00081 00082 /* ------------------------------------------------------------------------- 00083 * methods from NIVisumTL::TimePeriod 00084 * ----------------------------------------------------------------------- */ 00085 00086 NIVisumTL::Phase::Phase() 00087 : NIVisumTL::TimePeriod() {} 00088 00089 NIVisumTL::Phase::Phase(SUMOTime StartTime, SUMOTime EndTime) 00090 : NIVisumTL::TimePeriod(StartTime, EndTime) {} 00091 00092 NIVisumTL::Phase::~Phase() {} 00093 00094 /* ------------------------------------------------------------------------- 00095 * methods from NIVisumTL::SignalGroup 00096 * ----------------------------------------------------------------------- */ 00097 NIVisumTL::SignalGroup::SignalGroup(const std::string& Name, 00098 SUMOTime StartTime, SUMOTime EndTime) 00099 : NIVisumTL::TimePeriod(StartTime, EndTime), myName(Name) {} 00100 00101 00102 NIVisumTL::SignalGroup::~SignalGroup() {} 00103 00104 std::string NIVisumTL::SignalGroup::GetName() { 00105 return myName; 00106 } 00107 00108 00109 NBConnectionVector* 00110 NIVisumTL::SignalGroup::GetConnections() { 00111 return &myConnections; 00112 } 00113 00114 00115 NIVisumTL::PhaseMap* 00116 NIVisumTL::SignalGroup::GetPhases() { 00117 return &myPhases; 00118 } 00119 00120 00121 /* ------------------------------------------------------------------------- 00122 * methods from NIVisumTL 00123 * ----------------------------------------------------------------------- */ 00124 NIVisumTL::NIVisumTL() {} 00125 00126 00127 NIVisumTL::NIVisumTL(const std::string& Name, SUMOTime CycleTime, 00128 SUMOTime IntermediateTime, bool PhaseDefined) 00129 : myName(Name), myCycleTime(CycleTime), myIntermediateTime(IntermediateTime), 00130 myPhaseDefined(PhaseDefined) {} 00131 00132 NIVisumTL::~NIVisumTL() { 00133 for (NIVisumTL::PhaseMap::iterator i=myPhases.begin(); 00134 i!=myPhases.end(); i++) { 00135 delete(i->second); 00136 } 00137 for (NIVisumTL::SignalGroupMap::iterator k=mySignalGroups.begin(); 00138 k!=mySignalGroups.end(); k++) { 00139 delete(k->second); 00140 } 00141 } 00142 00143 SUMOTime 00144 NIVisumTL::GetCycleTime() { 00145 return myCycleTime; 00146 } 00147 00148 SUMOTime 00149 NIVisumTL::GetIntermediateTime() { 00150 return myIntermediateTime; 00151 } 00152 00153 bool 00154 NIVisumTL::GetPhaseDefined() { 00155 return myPhaseDefined; 00156 } 00157 00158 NIVisumTL::NodeVector* 00159 NIVisumTL::GetNodes() { 00160 return &myNodes; 00161 } 00162 00163 00164 NIVisumTL::PhaseMap* 00165 NIVisumTL::GetPhases() { 00166 return &myPhases; 00167 } 00168 00169 NIVisumTL::SignalGroupMap* NIVisumTL::GetSignalGroups() { 00170 return &mySignalGroups; 00171 } 00172 00173 void NIVisumTL::SetCycleTime(SUMOTime CycleTime) { 00174 myCycleTime = CycleTime; 00175 } 00176 00177 void NIVisumTL::SetIntermediateTime(SUMOTime IntermediateTime) { 00178 myIntermediateTime = IntermediateTime; 00179 } 00180 00181 void NIVisumTL::SetPhaseDefined(bool PhaseDefined) { 00182 myPhaseDefined = PhaseDefined; 00183 } 00184 00185 void NIVisumTL::AddSignalGroup(const std::string Name, SUMOTime StartTime, SUMOTime EndTime) { 00186 mySignalGroups[Name] = new NIVisumTL::SignalGroup(Name, StartTime, EndTime); 00187 } 00188 00189 void NIVisumTL::AddPhase(const std::string Name, SUMOTime StartTime, SUMOTime EndTime) { 00190 myPhases[Name] = new NIVisumTL::Phase(StartTime, EndTime); 00191 } 00192 00193 NIVisumTL::SignalGroup* NIVisumTL::GetSignalGroup(const std::string Name) { 00194 return (*mySignalGroups.find(Name)).second; 00195 } 00196 00197 void 00198 NIVisumTL::build(NBTrafficLightLogicCont& tlc) { 00199 for (NodeVector::iterator ni = myNodes.begin(); ni != myNodes.end(); ni++) { 00200 NBNode* Node = (*ni); 00201 NBLoadedTLDef* def = new NBLoadedTLDef(Node->getID(), Node); 00202 tlc.insert(def); 00203 def->setCycleDuration((unsigned int) myCycleTime); 00204 // signalgroups 00205 for (SignalGroupMap::iterator gi = mySignalGroups.begin(); gi != mySignalGroups.end(); gi++) { 00206 std::string GroupName = (*gi).first; 00207 NIVisumTL::SignalGroup& SG = *(*gi).second; 00208 def->addSignalGroup(GroupName); 00209 def->addToSignalGroup(GroupName, *SG.GetConnections()); 00210 def->setSignalYellowTimes(GroupName, myIntermediateTime, myIntermediateTime); 00211 // phases 00212 if (myPhaseDefined) { 00213 for (PhaseMap::iterator pi = SG.GetPhases()->begin(); pi!= SG.GetPhases()->end(); pi++) { 00214 NIVisumTL::Phase& PH = *(*pi).second; 00215 def->addSignalGroupPhaseBegin(GroupName, PH.GetStartTime(), NBTrafficLightDefinition::TLCOLOR_GREEN); 00216 def->addSignalGroupPhaseBegin(GroupName, PH.GetEndTime(), NBTrafficLightDefinition::TLCOLOR_RED); 00217 }; 00218 } else { 00219 def->addSignalGroupPhaseBegin(GroupName, SG.GetStartTime(), NBTrafficLightDefinition::TLCOLOR_GREEN); 00220 def->addSignalGroupPhaseBegin(GroupName, SG.GetEndTime(), NBTrafficLightDefinition::TLCOLOR_RED); 00221 } 00222 } 00223 } 00224 } 00225 00226 00227 00228 /****************************************************************************/ 00229