Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GUIBaseVehicle.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-2025 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/****************************************************************************/
21// A MSVehicle extended by some values for usage within the gui
22/****************************************************************************/
23#pragma once
24#include <config.h>
25
26#include <vector>
27#include <set>
28#include <string>
36#include <microsim/MSVehicle.h>
37
38
39// ===========================================================================
40// class declarations
41// ===========================================================================
45
46
47// ===========================================================================
48// class definitions
49// ===========================================================================
60public:
61
63
66
67 struct Seat {
69
70 Seat(const Position& _pos, double _angle):
71 pos(_pos), angle(_angle) {}
72
74 double angle;
75 };
76 typedef std::vector<Seat> Seats;
77
85 virtual Position getPosition(const double offset = 0) const = 0;
86
91 virtual Position getVisualPosition(bool s2, const double offset = 0) const = 0;
92
96 virtual double getAngle() const = 0;
97
102 virtual double getVisualAngle(bool s2) const = 0;
103
105 double getNaviDegree() const {
107 }
108
110 virtual void drawAction_drawCarriageClass(const GUIVisualizationSettings& s, double scaledLength, bool asImage) const = 0;
111
116 virtual double getLastLaneChangeOffset() const = 0;
117
121 virtual void drawRouteHelper(const GUIVisualizationSettings& s, ConstMSRoutePtr r, bool future, bool noLoop, const RGBColor& col) const = 0;
122
124 virtual std::string getStopInfo() const = 0;
125
127 virtual void selectBlockingFoes() const = 0;
128
129 virtual void drawAction_drawVehicleBlinker(double /*length*/) const {}
130 virtual void drawAction_drawVehicleBrakeLight(double length, bool onlyOne = false) const {
131 UNUSED_PARAMETER(length);
132 UNUSED_PARAMETER(onlyOne);
133 }
134 virtual void drawAction_drawLinkItems(const GUIVisualizationSettings& /*s*/) const {}
137 virtual void drawBestLanes() const {};
138 virtual void drawAction_drawVehicleBlueLight() const {}
139
141
142
151
153 void removedPopupMenu() override;
154
156 double getExaggeration(const GUIVisualizationSettings& s) const override;
157
163 virtual Boundary getCenteringBoundary() const override;
164
166 const std::string getOptionalName() const override;
167
173 void drawOnPos(const GUIVisualizationSettings& s, const Position& pos, const double angle) const;
174
175
180 void drawGL(const GUIVisualizationSettings& s) const override;
181
182
187 virtual void drawGLAdditional(GUISUMOAbstractView* const parent, const GUIVisualizationSettings& s) const override;
189
192
198 bool hasActiveAddVisualisation(GUISUMOAbstractView* const parent, int which) const;
199
205 void addActiveAddVisualisation(GUISUMOAbstractView* const parent, int which);
206
212 void removeActiveAddVisualisation(GUISUMOAbstractView* const parent, int which) override;
214
216 int getNumPassengers() const;
217
219 int getNumContainers() const;
220
222 std::string getDeviceDescription();
223
231 FXDECLARE(GUIBaseVehiclePopupMenu)
232
233 public:
240
243
245 long onCmdShowAllRoutes(FXObject*, FXSelector, void*);
247 long onCmdHideAllRoutes(FXObject*, FXSelector, void*);
249 long onCmdShowCurrentRoute(FXObject*, FXSelector, void*);
251 long onCmdHideCurrentRoute(FXObject*, FXSelector, void*);
253 long onCmdShowFutureRoute(FXObject*, FXSelector, void*);
255 long onCmdHideFutureRoute(FXObject*, FXSelector, void*);
257 long onCmdShowRouteNoLoops(FXObject*, FXSelector, void*);
259 long onCmdHideRouteNoLoops(FXObject*, FXSelector, void*);
261 long onCmdShowBestLanes(FXObject*, FXSelector, void*);
263 long onCmdHideBestLanes(FXObject*, FXSelector, void*);
265 long onCmdStartTrack(FXObject*, FXSelector, void*);
267 long onCmdStopTrack(FXObject*, FXSelector, void*);
269 long onCmdShowLFLinkItems(FXObject*, FXSelector, void*);
271 long onCmdHideLFLinkItems(FXObject*, FXSelector, void*);
273 long onCmdShowFoes(FXObject*, FXSelector, void*);
275 long onCmdSelectTransported(FXObject*, FXSelector, void*);
277 long onCmdRemoveObject(FXObject*, FXSelector, void*);
279 long onCmdToggleStop(FXObject*, FXSelector, void*);
280
281 protected:
282 FOX_CONSTRUCTOR(GUIBaseVehiclePopupMenu)
283 };
284
285
288
309
311 std::map<GUISUMOAbstractView*, int> myAdditionalVisualizations;
312
313
319 void drawRoute(const GUIVisualizationSettings& s, int routeNo, double darken, bool future = false, bool noLoop = false) const;
320
321 void drawStopLabels(const GUIVisualizationSettings& s, bool noLoop, const RGBColor& col) const;
322
323 void drawParkingInfo(const GUIVisualizationSettings& s) const;
324
325 void drawChargingInfo(const GUIVisualizationSettings& s) const;
327
329 return myVehicle;
330 }
331
333 double getScaleValue(const GUIVisualizationSettings& s, int activeScheme) const;
334
335 double getScaleVisual() const override {
337 }
338
340 static bool setFunctionalColor(int activeScheme, const MSBaseVehicle* veh, RGBColor& col);
341
342protected:
343
346
348 const Seat& getSeatPosition(int personIndex) const;
349 const Seat& getContainerPosition(int containerIndex) const;
350
351 static void drawLinkItem(const Position& pos, SUMOTime arrivalTime, SUMOTime leaveTime, double exagerate);
352
354 inline const MSVehicleType& getVType() const {
355 return myVehicle.getVehicleType();
356 }
357
359 bool drawAction_drawVehicleAsPolyWithCarriagges(const GUIVisualizationSettings& s, double scaledLength, bool asImage = false) const;
360
362 void computeSeats(const Position& front, const Position& back, double seatOffset, int maxSeats, double exaggeration, int& requiredSeats, Seats& into, double extraOffset = 0) const;
363
365 bool drawReversed(const GUIVisualizationSettings& s) const;
366
367
368protected:
370 mutable FXMutex myLock;
371
375
376private:
379
381
384
385};
long long int SUMOTime
Definition GUI.h:36
std::shared_ptr< const MSRoute > ConstMSRoutePtr
Definition Route.h:32
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
long onCmdHideFutureRoute(FXObject *, FXSelector, void *)
Called if the current route of the vehicle shall be hidden.
long onCmdStartTrack(FXObject *, FXSelector, void *)
Called if the vehicle shall be tracked.
long onCmdHideBestLanes(FXObject *, FXSelector, void *)
Called if the vehicle's best lanes shall be hidden.
long onCmdHideCurrentRoute(FXObject *, FXSelector, void *)
Called if the current route of the vehicle shall be hidden.
long onCmdShowBestLanes(FXObject *, FXSelector, void *)
Called if the vehicle's best lanes shall be shown.
long onCmdShowRouteNoLoops(FXObject *, FXSelector, void *)
Called if the current route of the vehicle shall be shown.
long onCmdShowLFLinkItems(FXObject *, FXSelector, void *)
Called if all routes of the vehicle shall be shown.
long onCmdShowFoes(FXObject *, FXSelector, void *)
Called to show (select) a vehicles foes.
long onCmdHideRouteNoLoops(FXObject *, FXSelector, void *)
Called if the current route of the vehicle shall be hidden.
long onCmdShowFutureRoute(FXObject *, FXSelector, void *)
Called if the current route of the vehicle shall be shown.
long onCmdShowAllRoutes(FXObject *, FXSelector, void *)
Called if all routes of the vehicle shall be shown.
long onCmdToggleStop(FXObject *, FXSelector, void *)
Called when toggling stop state.
long onCmdStopTrack(FXObject *, FXSelector, void *)
Called if the current shall not be tracked any longer.
long onCmdSelectTransported(FXObject *, FXSelector, void *)
Called to select all riding persons and containers.
long onCmdRemoveObject(FXObject *, FXSelector, void *)
Called when removing the vehicle.
long onCmdHideAllRoutes(FXObject *, FXSelector, void *)
Called if all routes of the vehicle shall be hidden.
long onCmdHideLFLinkItems(FXObject *, FXSelector, void *)
Called if all routes of the vehicle shall be hidden.
long onCmdShowCurrentRoute(FXObject *, FXSelector, void *)
Called if the current route of the vehicle shall be shown.
A MSVehicle extended by some values for usage within the gui.
const Seat & getContainerPosition(int containerIndex) const
static bool setFunctionalColor(int activeScheme, const MSBaseVehicle *veh, RGBColor &col)
sets the color according to the current scheme index and some vehicle function
virtual void drawAction_drawLinkItems(const GUIVisualizationSettings &) const
const Seat & getSeatPosition(int personIndex) const
returns the seat position for the person with the given index
RGBColor setColor(const GUIVisualizationSettings &s) const
sets the color according to the current settings
int getNumContainers() const
return the number of passengers
void drawOnPos(const GUIVisualizationSettings &s, const Position &pos, const double angle) const
Draws the object on the specified position with the specified angle.
double getExaggeration(const GUIVisualizationSettings &s) const override
return exaggeration associated with this GLObject
GUIGLObjectPopupMenu * myPopup
current popup (to clean up in destructor). GUIBaseVehicle is not responsible for removal
virtual double getLastLaneChangeOffset() const =0
Returns the time since the last lane change in seconds.
void drawParkingInfo(const GUIVisualizationSettings &s) const
MSDevice_Vehroutes * myRoutes
virtual void drawAction_drawPersonsAndContainers(const GUIVisualizationSettings &s) const
virtual void drawAction_drawCarriageClass(const GUIVisualizationSettings &s, double scaledLength, bool asImage) const =0
draws the given guiShape with distinct carriages/modules
void removedPopupMenu() override
notify object about popup menu removal
bool hasActiveAddVisualisation(GUISUMOAbstractView *const parent, int which) const
Returns whether the named feature is enabled in the given view.
virtual void drawRouteHelper(const GUIVisualizationSettings &s, ConstMSRoutePtr r, bool future, bool noLoop, const RGBColor &col) const =0
Draws the route.
void drawRoute(const GUIVisualizationSettings &s, int routeNo, double darken, bool future=false, bool noLoop=false) const
Chooses the route to draw and draws it, darkening it as given.
virtual Position getVisualPosition(bool s2, const double offset=0) const =0
Return current position taking into account secondary shape.
std::vector< Seat > Seats
MSBaseVehicle & myVehicle
The vehicle to which all calls should be delegated.
virtual void drawAction_drawVehicleBlinker(double) const
virtual Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
const std::string getOptionalName() const override
Returns the value for generic parameter 'name' or ''.
virtual void drawGLAdditional(GUISUMOAbstractView *const parent, const GUIVisualizationSettings &s) const override
Draws additionally triggered visualisations.
void addActiveAddVisualisation(GUISUMOAbstractView *const parent, int which)
Adds the named visualisation feature to the given view.
static void drawLinkItem(const Position &pos, SUMOTime arrivalTime, SUMOTime leaveTime, double exagerate)
double getScaleValue(const GUIVisualizationSettings &s, int activeScheme) const
gets the size multiplier value according to the current scheme index
virtual void drawBestLanes() const
Draws the vehicle's best lanes.
void drawChargingInfo(const GUIVisualizationSettings &s) const
VisualisationFeatures
Additional visualisation feature ids.
@ VO_SHOW_LFLINKITEMS
LFLinkItems.
@ VO_SHOW_ALL_ROUTES
show all vehicle's routes
@ VO_TRACK
track the vehicle (only needed for cleaning up)
@ VO_SHOW_ROUTE_NOLOOP
show vehicle's routes without loops
@ VO_DRAW_OUTSIDE_NETWORK
draw vehicle outside the road network
@ VO_SHOW_FUTURE_ROUTE
show vehicle's current continued from the current position
@ VO_SHOW_ROUTE
show vehicle's current route
@ VO_SHOW_BEST_LANES
show vehicle's best lanes
virtual std::string getStopInfo() const =0
retrieve information about the current stop state
void removeActiveAddVisualisation(GUISUMOAbstractView *const parent, int which) override
Adds the named visualisation feature to the given view.
virtual double getAngle() const =0
Returns the vehicle's direction in radians.
bool drawReversed(const GUIVisualizationSettings &s) const
whether to reverse trains in their reversed state
FXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
double getNaviDegree() const
return the current angle in navigational degrees
virtual void drawAction_drawVehicleBrakeLight(double length, bool onlyOne=false) const
void computeSeats(const Position &front, const Position &back, double seatOffset, int maxSeats, double exaggeration, int &requiredSeats, Seats &into, double extraOffset=0) const
add seats to mySeatPositions and update requiredSeats
int getNumPassengers() const
return the number of passengers
bool drawAction_drawVehicleAsPolyWithCarriagges(const GUIVisualizationSettings &s, double scaledLength, bool asImage=false) const
draw vehicle body and return whether carriages are being drawn
virtual Position getPosition(const double offset=0) const =0
Return current position (x/y, cartesian)
~GUIBaseVehicle()
destructor
virtual void drawAction_drawVehicleBlueLight() const
std::map< GUISUMOAbstractView *, int > myAdditionalVisualizations
Enabled visualisations, per view.
virtual void selectBlockingFoes() const =0
adds the blocking foes to the current selection
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
void drawStopLabels(const GUIVisualizationSettings &s, bool noLoop, const RGBColor &col) const
Seats mySeatPositions
positions of seats in the vehicle (updated at every drawing step)
const MSBaseVehicle & getVehicle()
std::string getDeviceDescription()
lists equipped device (types) for the current vehicle
virtual double getVisualAngle(bool s2) const =0
Returns the vehicle's direction in radians taking into account secondary shape.
const MSVehicleType & getVType() const
A shortcut to myVehicle.myType.
double getScaleVisual() const override
return individual scaling factor for this object
The popup menu of a globject.
Stores the information about how to visualize structures.
static double naviDegree(const double angle)
The base class for microscopic and mesoscopic vehicles.
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
A device which collects info on the vehicle trip (mainly on departure and arrival)
The car-following model and parameter.
const SUMOVTypeParameter & getParameter() const
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
double scaleVisual
the scaling factor when drawing the object
#define UNUSED_PARAMETER(x)
Seat(const Position &_pos, double _angle)