Eclipse SUMO - Simulation of Urban MObility
LayeredRTree.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
18 // A wrapper around RT-trees for for efficient storing of SUMO's GL-objects and
19 // accessing them ordered by their layer
20 // Note that we only need two layers at this time:
21 // 1 (GLO_LANE, GLO_VEHICLE, GLO_POI)
22 // 2 all the rest
23 // The search order returns layer 2 first because it must be drawn before layer
24 // 1 for alpha blending to work
25 /****************************************************************************/
26 #pragma once
27 #include <config.h>
28 
32 #include <utils/geom/Boundary.h>
33 
34 #include "SUMORTree.h"
35 
36 
37 // ===========================================================================
38 // class definitions
39 // ===========================================================================
46 class LayeredRTree : public SUMORTree {
47 public:
50  myLayers.push_back(new SUMORTree());
51  myLayers.push_back(new SUMORTree());
52  }
53 
54 
57  for (std::vector<SUMORTree*>::iterator it = myLayers.begin(); it != myLayers.end(); ++it) {
58  delete *it;
59  }
60  myLayers.clear();
61  }
62 
63 
69  void Insert(const float a_min[2], const float a_max[2], GUIGlObject* const & a_dataId) {
70  myLayers[selectLayer(a_dataId)]->Insert(a_min, a_max, a_dataId);
71  }
72 
73 
79  void Remove(const float a_min[2], const float a_max[2], GUIGlObject* const & a_dataId) {
80  myLayers[selectLayer(a_dataId)]->Remove(a_min, a_max, a_dataId);
81  }
82 
91  int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings& c) const {
92  int result = 0;
93  for (std::vector<SUMORTree*>::const_iterator it = myLayers.begin(); it != myLayers.end(); ++it) {
94  result += (*it)->Search(a_min, a_max, c);
95  }
96  return result;
97  }
98 
99 
100 protected:
102  std::vector<SUMORTree*> myLayers;
103 
104 private:
105 
107  inline size_t selectLayer(GUIGlObject* o) {
108  switch (o->getType()) {
109  case GLO_EDGE:
110  case GLO_LANE:
111  case GLO_POI:
112  case GLO_VEHICLE:
113  case GLO_PERSON:
114  return 1;
115  break;
116  default:
117  return 0;
118  }
119  }
120 
121 };
@ GLO_LANE
a lane
@ GLO_EDGE
an edge
@ GLO_VEHICLE
a vehicle
@ GLO_PERSON
a person
@ GLO_POI
poi (over view, geo and lane)
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.h:156
Stores the information about how to visualize structures.
A RT-tree for efficient storing of SUMO's GL-objects in layers.
Definition: LayeredRTree.h:46
void Insert(const float a_min[2], const float a_max[2], GUIGlObject *const &a_dataId)
Insert entry (delegate to appropriate layer)
Definition: LayeredRTree.h:69
LayeredRTree()
Constructor.
Definition: LayeredRTree.h:49
std::vector< SUMORTree * > myLayers
the layers for drawing
Definition: LayeredRTree.h:102
~LayeredRTree()
Destructor.
Definition: LayeredRTree.h:56
int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle (searches all layers in order)
Definition: LayeredRTree.h:91
void Remove(const float a_min[2], const float a_max[2], GUIGlObject *const &a_dataId)
Remove entry (delegate to appropriate layer)
Definition: LayeredRTree.h:79
size_t selectLayer(GUIGlObject *o)
select the appropriate layer for each object
Definition: LayeredRTree.h:107
A RT-tree for efficient storing of SUMO's GL-objects.
Definition: SUMORTree.h:66
SUMORTree()
Constructor.
Definition: SUMORTree.h:69