51 #ifdef CHECK_MEMORY_LEAKS
53 #endif // CHECK_MEMORY_LEAKS
64 const std::string& name,
65 const std::vector<int>& groupids,
69 const std::vector<int>& vehicleTypes)
70 : myLSA(lsaid), myID(id), myName(name), myGroupIDs(groupids),
71 myEdgeID(edgeid), myLane(laneno), myPosition(position),
72 myVehicleTypes(vehicleTypes) {}
79 return poly.
around(getPosition());
92 SignalDictType::iterator i =
myDict.find(lsaid);
97 SSignalDictType::iterator j = (*i).second.find(
id);
98 if (j == (*i).second.end()) {
108 SignalDictType::iterator i =
myDict.find(lsaid);
112 SSignalDictType::iterator j = (*i).second.find(
id);
113 if (j == (*i).second.end()) {
122 for (SignalDictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
123 for (SSignalDictType::iterator j = (*i).second.begin(); j != (*i).second.end(); j++) {
133 SignalDictType::iterator i =
myDict.find(tlid);
149 WRITE_WARNING(
"Could not set tls signal at edge '" +
toString(myEdgeID) +
"' - the edge was not built.");
157 for (std::vector<NBEdge::Connection>::iterator i = connections.begin(); i != connections.end(); i++) {
164 for (
unsigned int j = 0; j < edge->
getNumLanes(); j++) {
166 for (std::vector<NBEdge::Connection>::iterator i = connections.begin(); i != connections.end(); i++) {
177 if (tmpFrom != 0 && tmpTo != 0) {
179 assignedConnections.push_back(
NBConnection(tmpFrom, -1, tmpTo, -1));
186 assert(myGroupIDs.size() != 0);
198 return tl->
addToSignalGroup(toString<int>(myGroupIDs.front()), assignedConnections);
212 const std::string& name,
213 bool isGreenBegin,
const std::vector<SUMOReal>& times,
215 : myLSA(lsaid),
myID(id),
myName(name), myTimes(times),
216 myFirstIsRed(!isGreenBegin), myTRedYellow(tredyellow),
217 myTYellow(tyellow) {}
226 GroupDictType::iterator i =
myDict.find(lsaid);
231 SGroupDictType::iterator j = (*i).second.find(
id);
232 if (j == (*i).second.end()) {
250 GroupDictType::iterator i =
myDict.find(lsaid);
254 SGroupDictType::iterator j = (*i).second.find(
id);
255 if (j == (*i).second.end()) {
263 for (GroupDictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
264 for (SGroupDictType::iterator j = (*i).second.begin(); j != (*i).second.end(); j++) {
274 GroupDictType::iterator i =
myDict.find(tlid);
287 std::string
id = toString<int>(
myID);
289 for (std::vector<SUMOReal>::const_iterator i = myTimes.begin(); i != myTimes.end(); i++) {
294 if (myTimes.size() == 0) {
315 const std::string& name,
SUMOTime absdur,
331 const std::string& name,
SUMOTime absdur,
343 DictType::iterator i =
myDict.find(
id);
354 DictType::iterator i =
myDict.find(
id);
364 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
378 size_t ref_groups = 0;
379 size_t ref_signals = 0;
380 size_t no_signals = 0;
381 size_t no_groups = 0;
382 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
390 std::string
id = toString<int>(tl->
myID);
395 WRITE_ERROR(
"Error on adding a traffic light\n Must be a multiple id ('" +
id +
"')");
401 for (SGroupDictType::const_iterator j = sgs.begin(); j != sgs.end(); j++) {
402 if (!(*j).second->addTo(def)) {
403 WRITE_WARNING(
"The signal group '" + toString<int>((*j).first) +
"' could not be assigned to tl '" + toString<int>(tl->
myID) +
"'.");
410 for (SSignalDictType::const_iterator k = signals.begin(); k != signals.end(); k++) {
411 if (!(*k).second->addTo(ec, def)) {
412 WRITE_WARNING(
"The signal '" + toString<int>((*k).first) +
"' could not be assigned to tl '" + toString<int>(tl->
myID) +
"'.");
419 WRITE_WARNING(
"Could not set " + toString<size_t>(ref) +
" of " + toString<size_t>(
myDict.size()) +
" traffic lights.");
421 if (ref_groups != 0) {
422 WRITE_WARNING(
"Could not set " + toString<size_t>(ref_groups) +
" of " + toString<size_t>(no_groups) +
" groups.");
424 if (ref_signals != 0) {
425 WRITE_WARNING(
"Could not set " + toString<size_t>(ref_signals) +
" of " + toString<size_t>(no_signals) +
" signals.");
A structure which describes a connection between edges or lanes.
void setSignalYellowTimes(const std::string &groupid, SUMOTime tRedYellow, SUMOTime tYellow)
Sets the times the light is yellow or red/yellow.
int toLane
The lane the connections yields in.
NIVissimTLSignalGroup(int lsaid, int id, const std::string &name, bool isGreenBegin, const std::vector< SUMOReal > ×, SUMOTime tredyellow, SUMOTime tyellow)
static bool dictionary(int id, NIVissimAbstractEdge *e)
NIVissimTLSignal(int lsaid, int id, const std::string &name, const std::vector< int > &groupids, int edgeid, int laneno, SUMOReal position, const std::vector< int > &assignedVehicleTypes)
NBEdge * toEdge
The edge the connections yields in.
NIVissimTL(int id, const std::string &type, const std::string &name, SUMOTime absdur, SUMOTime offset)
std::string getType() const
std::map< int, NIVissimTL * > DictType
void addSignalGroupPhaseBegin(const std::string &groupid, SUMOTime time, TLColor color)
Sets the information about the begin of a phase.
static SSignalDictType getSignalsFor(int tlid)
A container for traffic light definitions and built programs.
A loaded (complete) traffic light logic.
The representation of a single edge during network building.
NIVissimTLSignalGroup * myCurrentGroup
std::map< int, SSignalDictType > SignalDictType
TLColor
An enumeration of possible tl-signal states.
bool around(const Position &p, SUMOReal offset=0) const
Returns the information whether the position vector describes a polygon lying around the given point ...
std::vector< Connection > getConnectionsFromLane(unsigned int lane) const
Returns connections from a given lane.
static bool dictionary(int lsaid, int id, NIVissimTLSignal *o)
#define WRITE_WARNING(msg)
bool addTo(NBLoadedTLDef *node) const
std::map< int, SGroupDictType > GroupDictType
std::map< int, NIVissimTLSignal * > SSignalDictType
bool addToSignalGroup(const std::string &groupid, const NBConnection &connection)
Adds a connection to a signal group.
A point in 2D or 3D with translation and scaling methods.
static bool dictionary(int id, const std::string &type, const std::string &name, SUMOTime absdur, SUMOTime offset)
bool lanesWereAssigned() const
static bool dictionary(int lsaid, int id, NIVissimTLSignalGroup *o)
unsigned int getNumLanes() const
Returns the number of lanes.
static bool dict_SetSignals(NBTrafficLightLogicCont &tlc, NBEdgeCont &ec)
Storage for edges, including some functionality operating on multiple edges.
std::map< int, NIVissimTLSignalGroup * > SGroupDictType
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
bool isWithin(const PositionVector &poly) const
std::vector< NBConnection > NBConnectionVector
Definition of a connection vector.
static GroupDictType myDict
static SignalDictType myDict
void setCycleDuration(unsigned int cycleDur)
Sets the duration of a cycle.
void addSignalGroup(const std::string &id)
Adds a signal group.
static bool dictionary(int id, const std::string &name, const NIVissimExtendedEdgePoint &from_def, const NIVissimExtendedEdgePoint &to_def, const PositionVector &geom, Direction direction, SUMOReal dxnothalt, SUMOReal dxeinordnen, SUMOReal zuschlag1, SUMOReal zuschlag2, SUMOReal seglength, const std::vector< int > &assignedVehicles, const NIVissimClosedLanesVector &clv)
Position getPosition() const
bool insert(NBTrafficLightDefinition *logic, bool forceInsert=false)
Adds a logic definition to the dictionary.
static SGroupDictType getGroupsFor(int tlid)
bool addTo(NBEdgeCont &ec, NBLoadedTLDef *node) const
NBEdge * retrievePossiblySplit(const std::string &id, const std::string &hint, bool incoming) const
Tries to retrieve an edge, even if it is splitted.
int getFromEdgeID() const