SUMO - Simulation of Urban MObility
GUIParkingArea.cpp
Go to the documentation of this file.
1 /****************************************************************************/
8 // A area where vehicles can park next to the road (gui version)
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
11 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
12 /****************************************************************************/
13 //
14 // This file is part of SUMO.
15 // SUMO is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 /****************************************************************************/
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #ifdef _MSC_VER
27 #include <windows_config.h>
28 #else
29 #include <config.h>
30 #endif
31 
32 #include <string>
35 #include <utils/geom/Boundary.h>
36 #include <utils/gui/div/GLHelper.h>
37 #include <utils/common/ToString.h>
38 #include <microsim/MSNet.h>
39 #include <microsim/MSLane.h>
40 #include <microsim/MSEdge.h>
41 #include "GUINet.h"
42 #include "GUIEdge.h"
43 #include "GUIContainer.h"
44 #include "GUIParkingArea.h"
47 #include <gui/GUIGlobals.h>
53 #include <utils/geom/GeomHelper.h>
54 #include <guisim/GUIParkingArea.h>
56 
57 #ifdef CHECK_MEMORY_LEAKS
58 #include <foreign/nvwa/debug_new.h>
59 #endif // CHECK_MEMORY_LEAKS
60 
61 
62 // ===========================================================================
63 // method definitions
64 // ===========================================================================
65 GUIParkingArea::GUIParkingArea(const std::string& id, const std::vector<std::string>& lines, MSLane& lane,
66  SUMOReal frompos, SUMOReal topos, unsigned int capacity,
67  SUMOReal width, SUMOReal length, SUMOReal angle)
68  : MSParkingArea(id, lines, lane, frompos, topos, capacity, width, length, angle),
69  GUIGlObject_AbstractAdd("parkingArea", GLO_TRIGGER, id) {
70 
71  myShapeRotations.reserve(myShape.size() - 1);
72  myShapeLengths.reserve(myShape.size() - 1);
73  int e = (int) myShape.size() - 1;
74  for (int i = 0; i < e; ++i) {
75  const Position& f = myShape[i];
76  const Position& s = myShape[i + 1];
77  myShapeLengths.push_back(f.distanceTo(s));
78  myShapeRotations.push_back((SUMOReal) atan2((s.x() - f.x()), (f.y() - s.y())) * (SUMOReal) 180.0 / (SUMOReal) PI);
79  }
80  PositionVector tmp = myShape;
81  tmp.move2side(lane.getWidth() + myWidth);
82  mySignPos = tmp.getLineCenter();
83  mySignRot = 0;
84  if (tmp.length() != 0) {
86  mySignRot -= 90;
87  }
88 }
89 
91 
92 
95  GUISUMOAbstractView& parent) {
96  GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this);
97  buildPopupHeader(ret, app);
102  buildPositionCopyEntry(ret, false);
103  return ret;
104 }
105 
106 
111  new GUIParameterTableWindow(app, *this, 4);
112  // add items
113  ret->mkItem("begin position [m]", false, myBegPos);
114  ret->mkItem("end position [m]", false, myEndPos);
115  ret->mkItem("occupancy [#]", true, getOccupancy());
116  ret->mkItem("capacity [#]", false, getCapacity());
117  // close building
118  ret->closeBuilding();
119  return ret;
120 }
121 
122 
123 void
125  glPushName(getGlID());
126  glPushMatrix();
127  RGBColor grey(177, 184, 186, 171);
128  RGBColor blue(83, 89, 172, 255);
129  RGBColor red(255, 0, 0, 255);
130  RGBColor green(0, 255, 0, 255);
131  // draw the area
132  glTranslated(0, 0, getType());
133  GLHelper::setColor(blue);
135  // draw details unless zoomed out to far
136  const SUMOReal exaggeration = s.addSize.getExaggeration(s);
137  if (s.scale * exaggeration >= 10) {
138  // draw the lots
139  glTranslated(0, 0, .1);
140  std::map<unsigned int, LotSpaceDefinition >::const_iterator i;
141  for (i = mySpaceOccupancies.begin(); i != mySpaceOccupancies.end(); i++) {
142  glPushMatrix();
143  glTranslated((*i).second.myPosition.x(), (*i).second.myPosition.y(), (*i).second.myPosition.z());
144  glRotated((*i).second.myRotation, 0, 0, 1);
145  Position pos = (*i).second.myPosition;
146  PositionVector geom;
147  SUMOReal w = (*i).second.myWidth / 2.;
148  SUMOReal h = (*i).second.myLength;
149  geom.push_back(Position(- w, + 0, 0.));
150  geom.push_back(Position(+ w, + 0, 0.));
151  geom.push_back(Position(+ w, + h, 0.));
152  geom.push_back(Position(- w, + h, 0.));
153  geom.push_back(Position(- w, + 0, 0.));
154  /*
155  geom.push_back(Position(pos.x(), pos.y(), pos.z()));
156  geom.push_back(Position(pos.x() + (*l).second.myWidth, pos.y(), pos.z()));
157  geom.push_back(Position(pos.x() + (*l).second.myWidth, pos.y() - (*l).second.myLength, pos.z()));
158  geom.push_back(Position(pos.x(), pos.y() - (*l).second.myLength, pos.z()));
159  geom.push_back(Position(pos.x(), pos.y(), pos.z()));
160  */
161  GLHelper::setColor((*i).second.vehicle == 0 ? green : red);
162  GLHelper::drawBoxLines(geom, 0.1);
163  glPopMatrix();
164  }
165  GLHelper::setColor(blue);
166  // draw the lines
167  for (size_t i = 0; i != myLines.size(); ++i) {
168  glPushMatrix();
169  glTranslated(mySignPos.x(), mySignPos.y(), 0);
170  glRotated(180, 1, 0, 0);
171  glRotated(mySignRot, 0, 0, 1);
172  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
173  pfSetPosition(0, 0);
174  pfSetScale(1.f);
175  glScaled(exaggeration, exaggeration, 1);
176  glTranslated(1.2, -(double)i, 0);
177  pfDrawString(myLines[i].c_str());
178  glPopMatrix();
179  }
180  // draw the sign
181  glTranslated(mySignPos.x(), mySignPos.y(), 0);
182  int noPoints = 9;
183  if (s.scale * exaggeration > 25) {
184  noPoints = MIN2((int)(9.0 + (s.scale * exaggeration) / 10.0), 36);
185  }
186  glScaled(exaggeration, exaggeration, 1);
187  GLHelper::drawFilledCircle((SUMOReal) 1.1, noPoints);
188  glTranslated(0, 0, .1);
189  GLHelper::setColor(grey);
190  GLHelper::drawFilledCircle((SUMOReal) 0.9, noPoints);
191  if (s.scale * exaggeration >= 4.5) {
192  GLHelper::drawText("P", Position(), .1, 1.6 * exaggeration, blue, mySignRot);
193  }
194  }
195  glPopMatrix();
196  glPopName();
197  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName);
198  for (std::vector<MSTransportable*>::const_iterator i = myWaitingTransportables.begin(); i != myWaitingTransportables.end(); ++i) {
199  glTranslated(0, 1, 0); // make multiple containers viewable
200  static_cast<GUIContainer*>(*i)->drawGL(s);
201  }
202 }
203 
204 
205 Boundary
208  b.grow(20);
209  return b;
210 }
211 
212 
213 
214 /****************************************************************************/
215 
SUMOReal getExaggeration(const GUIVisualizationSettings &s, SUMOReal factor=20) const
return the drawing size including exaggeration and constantSize values
A lane area vehicles can halt at.
Definition: MSParkingArea.h:66
int getCapacity() const
Returns the area capacity.
int getOccupancy() const
Returns the area occupancy.
int pfDrawString(const char *c)
Definition: polyfonts.c:1074
std::vector< SUMOReal > myShapeLengths
The lengths of the shape parts.
a lane speed trigger,
GUIVisualizationTextSettings addName
std::vector< MSTransportable * > myWaitingTransportables
Persons waiting at this stop.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
Stores the information about how to visualize structures.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
void pfSetPosition(SUMOReal x, SUMOReal y)
Definition: polyfonts.c:480
static void drawBoxLines(const PositionVector &geom, const std::vector< SUMOReal > &rots, const std::vector< SUMOReal > &lengths, SUMOReal width, int cornerDetail=0, SUMOReal offset=0)
Draws thick lines.
Definition: GLHelper.cpp:176
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
SUMOReal getWidth() const
Returns the lane&#39;s width.
Definition: MSLane.h:496
std::vector< SUMOReal > myShapeRotations
The rotations of the shape parts.
SUMOReal distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:240
static void drawText(const std::string &text, const Position &pos, const SUMOReal layer, const SUMOReal size, const RGBColor &col=RGBColor::BLACK, const SUMOReal angle=0)
draw Text with given parameters
Definition: GLHelper.cpp:460
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
const SUMOReal myEndPos
The end position this bus stop is located at.
SUMOReal x() const
Returns the x-position.
Definition: Position.h:63
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used, also builds an entry for copying the geo-position.
GUIGlID getGlID() const
Returns the numerical id of the object.
const SUMOReal myBegPos
The begin position this bus stop is located at.
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
SUMOReal scale
information about a lane&#39;s width (temporary, used for a single view)
static void drawFilledCircle(SUMOReal width, int steps=8)
Draws a filled circle around (0,0)
Definition: GLHelper.cpp:344
GUIVisualizationSizeSettings addSize
GUIParkingArea(const std::string &id, const std::vector< std::string > &lines, MSLane &lane, SUMOReal frompos, SUMOReal topos, unsigned int capacity, SUMOReal width, SUMOReal length, SUMOReal angle)
Constructor.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
#define PI
Definition: polyfonts.c:61
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:443
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
A list of positions.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
PositionVector myShape
The roadside shape of this parkingArea.
T MIN2(T a, T b)
Definition: StdDefs.h:64
void drawName(const Position &pos, const SUMOReal scale, const GUIVisualizationTextSettings &settings, const SUMOReal angle=0) const
draw name of item
SUMOReal mySignRot
The rotation of the sign.
SUMOReal length() const
Returns the length.
SUMOReal rotationDegreeAtOffset(SUMOReal pos) const
Returns the rotation at the given length.
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
Definition: Boundary.cpp:238
void pfSetScale(SUMOReal s)
Definition: polyfonts.c:465
SUMOReal y() const
Returns the y-position.
Definition: Position.h:68
The popup menu of a globject.
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
Position getLineCenter() const
get line center
SUMOReal myWidth
The default width of each parking space.
void move2side(SUMOReal amount)
move position vector to side using certain ammount
#define SUMOReal
Definition: config.h:208
~GUIParkingArea()
Destructor.
std::map< unsigned int, LotSpaceDefinition > mySpaceOccupancies
A map from objects (vehicles) to the areas they acquire after entering the stop.
std::vector< std::string > myLines
The list of lines that are assigned to this stop.
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
void mkItem(const char *name, bool dynamic, ValueSource< unsigned > *src)
Adds a row which obtains its value from an unsigned-ValueSource.
void closeBuilding()
Closes the building of the table.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Representation of a lane in the micro simulation.
Definition: MSLane.h:79
A window containing a gl-object&#39;s parameter.
Position mySignPos
The position of the sign.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.