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