Eclipse SUMO - Simulation of Urban MObility
GUIGlObject_AbstractAdd.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
16 // Base class for additional objects (detectors etc.)
17 /****************************************************************************/
18 
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #include <config.h>
24 
26 #include <cassert>
27 #include <iostream>
28 #include <algorithm>
29 #include <utils/gui/div/GLHelper.h>
30 
31 
32 // ===========================================================================
33 // static member definitions
34 // ===========================================================================
35 
36 std::map<std::string, GUIGlObject_AbstractAdd*> GUIGlObject_AbstractAdd::myObjects;
37 std::vector<GUIGlObject_AbstractAdd*> GUIGlObject_AbstractAdd::myObjectList;
38 
39 // ===========================================================================
40 // method definitions
41 // ===========================================================================
42 
44  GUIGlObject(type, id) {
45  myObjects[getFullName()] = this;
46  myObjectList.push_back(this);
47 }
48 
49 
51 
52 
53 void
55  std::map<std::string, GUIGlObject_AbstractAdd*>::iterator i;
56  for (i = myObjects.begin(); i != myObjects.end(); i++) {
58  }
59  myObjects.clear();
60  myObjectList.clear();
61 }
62 
63 
65 GUIGlObject_AbstractAdd::get(const std::string& name) {
66  auto i = myObjects.find(name);
67  if (i == myObjects.end()) {
68  return nullptr;
69  } else {
70  return i->second;
71  }
72 }
73 
74 
75 void
77  myObjects.erase(o->getFullName());
78  myObjectList.erase(std::remove(myObjectList.begin(), myObjectList.end(), o), myObjectList.end());
79 }
80 
81 
82 const std::vector<GUIGlObject_AbstractAdd*>&
84  return myObjectList;
85 }
86 
87 
88 std::vector<GUIGlID>
90  std::vector<GUIGlID> ret;
91  if (typeFilter == GLO_NETWORK) {
92  return ret;
93  } else if (typeFilter == GLO_NETELEMENT) {
94  // obtain all netElements
95  for (auto i : myObjectList) {
96  if ((i->getType() > GLO_NETELEMENT) && (i->getType() < GLO_ADDITIONAL)) {
97  ret.push_back(i->getGlID());
98  }
99  }
100  } else if (typeFilter == GLO_ADDITIONAL) {
101  // obtain all additionals
102  for (auto i : myObjectList) {
103  if ((i->getType() > GLO_ADDITIONAL) && (i->getType() < GLO_SHAPE)) {
104  ret.push_back(i->getGlID());
105  }
106  }
107  } else if (typeFilter == GLO_SHAPE) {
108  // obtain all Shapes
109  for (auto i : myObjectList) {
110  if ((i->getType() > GLO_SHAPE) && (i->getType() < GLO_ROUTEELEMENT)) {
111  ret.push_back(i->getGlID());
112  }
113  }
114  } else if (typeFilter == GLO_ROUTEELEMENT) {
115  // obtain all Shapes
116  for (auto i : myObjectList) {
117  if ((i->getType() > GLO_ROUTEELEMENT) && (i->getType() < GLO_MAX)) {
118  ret.push_back(i->getGlID());
119  }
120  }
121  } else {
122  for (auto i : myObjectList) {
123  if ((i->getType() & typeFilter) != 0) {
124  ret.push_back(i->getGlID());
125  }
126  }
127  }
128  return ret;
129 }
130 
131 /****************************************************************************/
132 
GUIGlObject_AbstractAdd::getIDList
static std::vector< GUIGlID > getIDList(GUIGlObjectType typeFilter)
Returns the list of gl-ids of all additional objects that match the given type.
Definition: GUIGlObject_AbstractAdd.cpp:89
GLO_MAX
@ GLO_MAX
empty max
Definition: GUIGlObjectTypes.h:165
GUIGlObject_AbstractAdd::GUIGlObject_AbstractAdd
GUIGlObject_AbstractAdd(GUIGlObjectType type, const std::string &id)
constructor
Definition: GUIGlObject_AbstractAdd.cpp:43
GUIGlObject::getFullName
const std::string & getFullName() const
Definition: GUIGlObject.cpp:137
GLHelper.h
GUIGlObject_AbstractAdd
Definition: GUIGlObject_AbstractAdd.h:39
GUIGlObject_AbstractAdd::myObjectList
static std::vector< GUIGlObject_AbstractAdd * > myObjectList
The list of all addtional objects currently loaded.
Definition: GUIGlObject_AbstractAdd.h:68
GUIGlObjectType
GUIGlObjectType
Definition: GUIGlObjectTypes.h:39
GUIGlObject_AbstractAdd::remove
static void remove(GUIGlObject_AbstractAdd *o)
Removes an object.
Definition: GUIGlObject_AbstractAdd.cpp:76
GUIGlObject_AbstractAdd::get
static GUIGlObject_AbstractAdd * get(const std::string &name)
Returns a named object.
Definition: GUIGlObject_AbstractAdd.cpp:65
GLO_ROUTEELEMENT
@ GLO_ROUTEELEMENT
reserved GLO type to pack all RouteElements (note: In this case the sorting of GLO_<element> is impor...
Definition: GUIGlObjectTypes.h:109
GLO_SHAPE
@ GLO_SHAPE
reserved GLO type to pack shapes
Definition: GUIGlObjectTypes.h:102
GUIGlObject_AbstractAdd::clearDictionary
static void clearDictionary()
Clears the dictionary (the objects will not be deleted)
Definition: GUIGlObject_AbstractAdd.cpp:54
GUIGlObject_AbstractAdd.h
GUIGlObject
Definition: GUIGlObject.h:65
GLO_NETELEMENT
@ GLO_NETELEMENT
reserved GLO type to pack all netElements
Definition: GUIGlObjectTypes.h:44
GUIGlObject_AbstractAdd::getObjectList
static const std::vector< GUIGlObject_AbstractAdd * > & getObjectList()
Returns the list of all additional objects.
Definition: GUIGlObject_AbstractAdd.cpp:83
GUIGlObject_AbstractAdd::myObjects
static std::map< std::string, GUIGlObject_AbstractAdd * > myObjects
Map from names of loaded additional objects to the objects themselves.
Definition: GUIGlObject_AbstractAdd.h:65
config.h
GLO_ADDITIONAL
@ GLO_ADDITIONAL
reserved GLO type to pack all additionals
Definition: GUIGlObjectTypes.h:59
GUIGlObject_AbstractAdd::~GUIGlObject_AbstractAdd
~GUIGlObject_AbstractAdd()
destructor
Definition: GUIGlObject_AbstractAdd.cpp:50
GLO_NETWORK
@ GLO_NETWORK
The network - empty.
Definition: GUIGlObjectTypes.h:41