Line data Source code
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 : /****************************************************************************/
14 : /// @file GUIInductLoop.h
15 : /// @author Daniel Krajzewicz
16 : /// @author Jakob Erdmann
17 : /// @author Sascha Krieg
18 : /// @author Michael Behrisch
19 : /// @date Aug 2003
20 : ///
21 : // The gui-version of the MSInductLoop, together with the according
22 : /****************************************************************************/
23 : #pragma once
24 : #include <config.h>
25 :
26 : #include <utils/foxtools/fxheader.h>
27 : #include <microsim/output/MSInductLoop.h>
28 : #include <utils/geom/Position.h>
29 : #include "GUIDetectorWrapper.h"
30 :
31 :
32 : // ===========================================================================
33 : // class definitions
34 : // ===========================================================================
35 : /**
36 : * @class GUIInductLoop
37 : * @brief The gui-version of the MSInductLoop.
38 : *
39 : * Allows the building of a wrapper (also declared herein) which draws the
40 : * detector on the gl-canvas. Uses a mutex to avoid parallel read/write operations.
41 : * The mutex is only set within methods that change MSInductLoop-internal state
42 : * and within "collectVehiclesOnDet". All other reading operations should be performed
43 : * via the simulation loop only.
44 : */
45 : class GUIInductLoop : public MSInductLoop {
46 : public:
47 : /**
48 : * @brief Constructor.
49 : * @param[in] id Unique id
50 : * @param[in] lane Lane where detector woks on
51 : * @param[in] position Position of the detector within the lane
52 : * @param[in] vTypes which vehicle types are considered
53 : */
54 : GUIInductLoop(const std::string& id, MSLane* const lane, double position, double length,
55 : std::string name, const std::string& vTypes,
56 : const std::string& nextEdges,
57 : int detectPersons, bool show);
58 :
59 :
60 : /// @brief Destructor
61 : ~GUIInductLoop();
62 :
63 : /** @brief Returns this detector's visualisation-wrapper
64 : * @return The wrapper representing the detector
65 : */
66 : virtual GUIDetectorWrapper* buildDetectorGUIRepresentation();
67 :
68 : /// @brief sets special caller for myWrapper
69 : void setSpecialColor(const RGBColor* color);
70 :
71 : /// @brief whether the induction loop shall be visible
72 : bool isVisible() const {
73 63578 : return myShow;
74 : }
75 :
76 : /// @brief toggle visibility
77 0 : void setVisible(bool show) {
78 0 : myShow = show;
79 0 : }
80 :
81 : public:
82 : /**
83 : * @class GUIInductLoop::MyWrapper
84 : * @brief A MSInductLoop-visualiser
85 : */
86 : class MyWrapper : public GUIDetectorWrapper {
87 :
88 : public:
89 : /// @brief Constructor
90 : MyWrapper(GUIInductLoop& detector, double pos);
91 :
92 : /// @brief Destructor
93 : ~MyWrapper();
94 :
95 : /// @name inherited from GUIGlObject
96 : //@{
97 :
98 : /** @brief Returns an own parameter window
99 : *
100 : * @param[in] app The application needed to build the parameter window
101 : * @param[in] parent The parent window needed to build the parameter window
102 : * @return The built parameter window
103 : * @see GUIGlObject::getParameterWindow
104 : */
105 : GUIParameterTableWindow* getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
106 :
107 : /** @brief Returns the boundary to which the view shall be centered in order to show the object
108 : *
109 : * @return The boundary the object is within
110 : * @see GUIGlObject::getCenteringBoundary
111 : */
112 : Boundary getCenteringBoundary() const override;
113 :
114 : /** @brief Draws the object
115 : * @param[in] s The settings for the current view (may influence drawing)
116 : * @see GUIGlObject::drawGL
117 : */
118 : void drawGL(const GUIVisualizationSettings& s) const override;
119 : //@}
120 :
121 : /// @brief set (outline) color for extra visualization
122 : void setSpecialColor(const RGBColor* color) {
123 26975 : mySpecialColor = color;
124 26975 : }
125 :
126 : protected:
127 : /// @brief whether this detector has an active virtual detector call
128 : bool haveOverride() const override;
129 :
130 : /// @brief toggle virtual detector call
131 : void toggleOverride() const override;
132 :
133 : private:
134 : /// @brief The wrapped detector
135 : GUIInductLoop& myDetector;
136 :
137 : /// @brief The detector's boundary
138 : Boundary myBoundary;
139 :
140 : /// @brief The rotations of the shape parts
141 : std::vector<double> myFGShapeRotations;
142 :
143 : /// @brief The lengths of the shape parts
144 : std::vector<double> myFGShapeLengths;
145 :
146 : /// @brief The shape
147 : PositionVector myFGShape;
148 :
149 : /// @brief The position in full-geometry mode
150 : Position myFGPosition;
151 :
152 : /// @brief The rotation in full-geometry mode
153 : double myFGRotation;
154 :
155 : PositionVector myOutline;
156 : PositionVector myIndicators;
157 :
158 : /// @brief The position on the lane
159 : double myPosition;
160 :
161 : /// @brief Whether this detector has defined a length
162 : bool myHaveLength;
163 :
164 : /// @brief color for extra visualization
165 : const RGBColor* mySpecialColor;
166 :
167 : private:
168 : void setOutlineColor() const;
169 :
170 : private:
171 : /// @brief Invalidated copy constructor.
172 : MyWrapper(const MyWrapper&);
173 :
174 : /// @brief Invalidated assignment operator.
175 : MyWrapper& operator=(const MyWrapper&);
176 :
177 : };
178 :
179 : private:
180 :
181 : /// @brief the glObject wrapper for this induction loop
182 : MyWrapper* myWrapper;
183 :
184 : /// @brief whether this induction loop shall be visible in the gui
185 : bool myShow;
186 :
187 : };
|