Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GUIBasePersonHelper.cpp
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// Functions used in GUIPerson and GNEPerson
19/****************************************************************************/
20#include <config.h>
21
25
26#include "GLHelper.h"
27#include "GUIBasePersonHelper.h"
28
29// ===========================================================================
30// method definitions
31// ===========================================================================
32
33void
34GUIBasePersonHelper::drawAction_drawAsTriangle(const double angle, const double length, const double width) {
35 // draw triangle pointing forward
36 glRotated(RAD2DEG(angle), 0, 0, 1);
37 glScaled(length, width, 1);
38 glBegin(GL_TRIANGLES);
39 glVertex2d(0., 0.);
40 glVertex2d(-1, -0.5);
41 glVertex2d(-1, 0.5);
42 glEnd();
43 // draw a smaller triangle to indicate facing
44 GLHelper::setColor(GLHelper::getColor().changedBrightness(-64));
45 glTranslated(0, 0, .045);
46 glBegin(GL_TRIANGLES);
47 glVertex2d(0., 0.);
48 glVertex2d(-0.5, -0.25);
49 glVertex2d(-0.5, 0.25);
50 glEnd();
51 glTranslated(0, 0, -.045);
52}
53
54
55void
56GUIBasePersonHelper::drawAction_drawAsCircle(const double angle, const double length, const double width, double detail) {
57 glRotated(RAD2DEG(angle), 0, 0, 1);
58 const double maxDim = MAX2(length, width);
59 const int steps = MIN2(MAX2(8, int(detail / 10)), 64);
60 glScaled(maxDim, maxDim, 1);
61 glTranslated(-0.8, 0, 0);
63}
64
65
66void
67GUIBasePersonHelper::drawAction_drawAsCenteredCircle(const double length, const double width, double detail) {
68 const double maxDim = MAX2(length, width);
69 const int steps = MIN2(MAX2(8, int(detail / 10)), 64);
70 glScaled(maxDim, maxDim, 1);
72}
73
74
75void
76GUIBasePersonHelper::drawAction_drawAsPoly(const double angle, const double length, const double width) {
77 // draw pedestrian shape
78 glRotated(RAD2DEG(angle), 0, 0, 1);
79 glScaled(length, width, 1);
81 glTranslated(0, 0, .045);
82 // front is at the nose
83 glTranslated(-0.5, 0, 0);
84 // head
85 glScaled(1, 0.5, 1.);
87 // nose
88 glBegin(GL_TRIANGLES);
89 glVertex2d(0.0, -0.2);
90 glVertex2d(0.0, 0.2);
91 glVertex2d(0.6, 0.0);
92 glEnd();
93 glTranslated(0, 0, -.045);
94 // body
95 glScaled(0.9, 2.0, 1);
96 glTranslated(0, 0, .04);
97 GLHelper::setColor(lighter);
99 glTranslated(0, 0, -.04);
100}
101
102
103void
104GUIBasePersonHelper::drawAction_drawAsImage(const double angle, const double length, const double width, const std::string& file,
105 const SUMOVehicleShape guiShape, const double exaggeration) {
106 // first check if filename isn't empty
107 if (file != "") {
108 if (guiShape == SUMOVehicleShape::PEDESTRIAN) {
109 glRotated(RAD2DEG(angle + M_PI / 2.), 0, 0, 1);
110 }
111 int textureID = GUITexturesHelper::getTextureID(file);
112 if (textureID > 0) {
113 const double halfLength = length / 2.0 * exaggeration;
114 const double halfWidth = width / 2.0 * exaggeration;
115 GUITexturesHelper::drawTexturedBox(textureID, -halfWidth, -halfLength, halfWidth, halfLength);
116 }
117 } else {
118 // fallback if no image is defined
119 drawAction_drawAsPoly(angle, length, width);
120 }
121}
122
123
124/****************************************************************************/
#define RAD2DEG(x)
Definition GeomHelper.h:36
SUMOVehicleShape
Definition of vehicle classes to differ between different appearances.
@ PEDESTRIAN
render as a pedestrian
T MIN2(T a, T b)
Definition StdDefs.h:76
T MAX2(T a, T b)
Definition StdDefs.h:82
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition GLHelper.cpp:649
static void drawFilledCircle(const double widradiusth, const int steps=8)
Draws a filled circle around (0,0)
Definition GLHelper.cpp:564
static RGBColor getColor()
gets the gl-color
Definition GLHelper.cpp:655
static void drawAction_drawAsPoly(const double angle, const double length, const double width)
static void drawAction_drawAsImage(const double angle, const double length, const double width, const std::string &file, const SUMOVehicleShape guiShape, const double exaggeration)
static void drawAction_drawAsCenteredCircle(const double length, const double width, double detail)
static void drawAction_drawAsCircle(const double angle, const double length, const double width, double detail)
static void drawAction_drawAsTriangle(const double angle, const double length, const double width)
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
static int getTextureID(const std::string &filename, const bool mirrorX=false)
return texture id for the given filename (initialize on first use)
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
Definition RGBColor.cpp:200
#define M_PI
Definition odrSpiral.cpp:45