Eclipse SUMO - Simulation of Urban MObility
GUIParkingArea.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // A area where vehicles can park next to the road (gui version)
16 /****************************************************************************/
17 
18 
19 // ===========================================================================
20 // included modules
21 // ===========================================================================
22 #include <config.h>
23 
24 #include <string>
27 #include <utils/geom/Boundary.h>
28 #include <utils/gui/div/GLHelper.h>
29 #include <utils/common/ToString.h>
30 #include <microsim/MSNet.h>
31 #include <microsim/MSLane.h>
32 #include <microsim/MSEdge.h>
33 #include "GUINet.h"
34 #include "GUIEdge.h"
35 #include "GUIContainer.h"
36 #include "GUIParkingArea.h"
39 #include <gui/GUIGlobals.h>
44 #include <utils/geom/GeomHelper.h>
45 #include <guisim/GUIParkingArea.h>
46 #include <guisim/GUIVehicle.h>
49 
50 
51 
52 // ===========================================================================
53 // method definitions
54 // ===========================================================================
55 GUIParkingArea::GUIParkingArea(const std::string& id, const std::vector<std::string>& lines, MSLane& lane,
56  double frompos, double topos, unsigned int capacity,
57  double width, double length, double angle, const std::string& name,
58  bool onRoad) :
59  MSParkingArea(id, lines, lane, frompos, topos, capacity, width, length, angle, name, onRoad),
61  const double offsetSign = MSNet::getInstance()->lefthand() ? -1 : 1;
62  myShapeRotations.reserve(myShape.size() - 1);
63  myShapeLengths.reserve(myShape.size() - 1);
64  int e = (int) myShape.size() - 1;
65  for (int i = 0; i < e; ++i) {
66  const Position& f = myShape[i];
67  const Position& s = myShape[i + 1];
68  myShapeLengths.push_back(f.distanceTo(s));
69  myShapeRotations.push_back((double) atan2((s.x() - f.x()), (f.y() - s.y())) * (double) 180.0 / (double) M_PI);
70  }
71  PositionVector tmp = myShape;
72  tmp.move2side((lane.getWidth() + myWidth) * offsetSign);
73  mySignPos = tmp.getLineCenter();
74  mySignRot = 0;
75  if (tmp.length() != 0) {
77  mySignRot -= 90;
78  }
80  myBoundary.grow(20);
81 }
82 
84 
85 
88  GUISUMOAbstractView& parent) {
89  GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this);
90  buildPopupHeader(ret, app);
95  buildPositionCopyEntry(ret, false);
96  return ret;
97 }
98 
99 
104  new GUIParameterTableWindow(app, *this, 6);
105  // add items
106  ret->mkItem("name", false, getMyName());
107  ret->mkItem("begin position [m]", false, myBegPos);
108  ret->mkItem("end position [m]", false, myEndPos);
109  ret->mkItem("occupancy [#]", true, getOccupancy());
110  ret->mkItem("capacity [#]", false, getCapacity());
111  ret->mkItem("alternatives [#]", false, getNumAlternatives());
112  // close building
113  ret->closeBuilding();
114  return ret;
115 }
116 
117 
118 void
120  glPushName(getGlID());
121  glPushMatrix();
122  RGBColor grey(177, 184, 186, 171);
123  RGBColor blue(83, 89, 172, 255);
124  RGBColor red(255, 0, 0, 255);
125  RGBColor green(0, 255, 0, 255);
126  // draw the area
127  glTranslated(0, 0, getType());
128  GLHelper::setColor(blue);
130  // draw details unless zoomed out to far
131  const double exaggeration = s.addSize.getExaggeration(s, this);
132  if (s.scale * exaggeration >= 1) {
133  // draw the lots
134  glTranslated(0, 0, .1);
135  for (const auto& lsd : mySpaceOccupancies) {
136  glPushMatrix();
137  glTranslated(lsd.myPosition.x(), lsd.myPosition.y(), lsd.myPosition.z());
138  glRotated(lsd.myRotation, 0, 0, 1);
139  Position pos = lsd.myPosition;
140  PositionVector geom;
141  double w = lsd.myWidth / 2. - 0.1 * exaggeration;
142  double h = lsd.myLength;
143  geom.push_back(Position(- w, + 0, 0.));
144  geom.push_back(Position(+ w, + 0, 0.));
145  geom.push_back(Position(+ w, + h, 0.));
146  geom.push_back(Position(- w, + h, 0.));
147  geom.push_back(Position(- w, + 0, 0.));
148  /*
149  geom.push_back(Position(pos.x(), pos.y(), pos.z()));
150  geom.push_back(Position(pos.x() + (*l).second.myWidth, pos.y(), pos.z()));
151  geom.push_back(Position(pos.x() + (*l).second.myWidth, pos.y() - (*l).second.myLength, pos.z()));
152  geom.push_back(Position(pos.x(), pos.y() - (*l).second.myLength, pos.z()));
153  geom.push_back(Position(pos.x(), pos.y(), pos.z()));
154  */
155  GLHelper::setColor(lsd.vehicle == nullptr ? green : red);
156  GLHelper::drawBoxLines(geom, 0.1 * exaggeration);
157  glPopMatrix();
158  }
159  GLHelper::setColor(blue);
160  // draw the lines
161  for (size_t i = 0; i != myLines.size(); ++i) {
162  // push a new matrix for every line
163  glPushMatrix();
164  // traslate and rotate
165  glTranslated(mySignPos.x(), mySignPos.y(), 0);
166  glRotated(180, 1, 0, 0);
167  glRotated(mySignRot, 0, 0, 1);
168  // draw line
169  GLHelper::drawText(myLines[i].c_str(), Position(1.2, (double)i), .1, 1.f, RGBColor(76, 170, 50), 0, FONS_ALIGN_LEFT);
170  // pop matrix for every line
171  glPopMatrix();
172 
173  }
174  // draw the sign
175  glTranslated(mySignPos.x(), mySignPos.y(), 0);
176  int noPoints = 9;
177  if (s.scale * exaggeration > 25) {
178  noPoints = MIN2((int)(9.0 + (s.scale * exaggeration) / 10.0), 36);
179  }
180  glScaled(exaggeration, exaggeration, 1);
181  GLHelper::drawFilledCircle((double) 1.1, noPoints);
182  glTranslated(0, 0, .1);
183  GLHelper::setColor(grey);
184  GLHelper::drawFilledCircle((double) 0.9, noPoints);
185  if (s.drawDetail(s.detailSettings.stoppingPlaceText, exaggeration)) {
186  GLHelper::drawText("P", Position(), .1, 1.6, blue, mySignRot);
187  }
188  }
189  glPopMatrix();
190  if (s.addFullName.show && getMyName() != "") {
192  }
193  glPopName();
194  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName, s.angle);
195  // draw parking vehicles (their lane might not be within drawing range. if it is, they are drawn twice)
197  for (std::set<const MSVehicle*>::const_iterator v = myLane.getParkingVehicles().begin(); v != myLane.getParkingVehicles().end(); ++v) {
198  static_cast<const GUIVehicle* const>(*v)->drawGL(s);
199  }
201 
202 }
203 
204 void
205 GUIParkingArea::addLotEntry(double x, double y, double z,
206  double width, double length, double angle) {
207  MSParkingArea::addLotEntry(x, y, z, width, length, angle);
208  Boundary b;
209  b.add(Position(x, y));
210  b.grow(MAX2(width, length) + 5);
211  myBoundary.add(b);
212 }
213 
214 Boundary
216  return myBoundary;
217 }
218 
219 
220 const std::string
222  return myName;
223 }
224 
225 /****************************************************************************/
226 
MSLane::releaseVehicles
virtual void releaseVehicles() const
Allows to use the container for microsimulation again.
Definition: MSLane.h:457
GUIGlObject::getType
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.cpp:180
Boundary.h
GLO_MAX
empty max
Definition: GUIGlObjectTypes.h:165
MSLane::getVehiclesSecure
virtual const VehCont & getVehiclesSecure() const
Returns the vehicles container; locks it for microsimulation.
Definition: MSLane.h:427
ToString.h
GLHelper::drawTextSettings
static void drawTextSettings(const GUIVisualizationTextSettings &settings, const std::string &text, const Position &pos, const double scale, const double angle=0, const double layer=2048)
Definition: GLHelper.cpp:706
MIN2
T MIN2(T a, T b)
Definition: StdDefs.h:73
GUIParameterTableWindow
A window containing a gl-object's parameter.
Definition: GUIParameterTableWindow.h:62
MSStoppingPlace::myLines
std::vector< std::string > myLines
The list of lines that are assigned to this stop.
Definition: MSStoppingPlace.h:216
MSParkingArea
A lane area vehicles can halt at.
Definition: MSParkingArea.h:59
GUIParkingArea::getPopUpMenu
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Definition: GUIParkingArea.cpp:87
GUIVehicle.h
GUIContainer.h
GUISUMOAbstractView
Definition: GUISUMOAbstractView.h:72
MSNet.h
MSLane
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
GUIVisualizationSettings::getTextAngle
double getTextAngle(double objectAngle) const
return an angle that is suitable for reading text aligned with the given angle (degrees)
Definition: GUIVisualizationSettings.cpp:1647
GUIParameterTableWindow.h
GUIGlObject::drawName
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0) const
draw name of item
Definition: GUIGlObject.cpp:354
GUIVisualizationSettings::angle
double angle
The current view rotation angle.
Definition: GUIVisualizationSettings.h:405
GUIGlObject::buildSelectionPopupEntry
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
Definition: GUIGlObject.cpp:235
GLHelper::drawBoxLines
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
Definition: GLHelper.cpp:182
MsgHandler.h
GUIGLObjectPopupMenu.h
MSParkingArea::getNumAlternatives
int getNumAlternatives() const
Definition: MSParkingArea.h:239
GUIGlobalSelection.h
FONS_ALIGN_LEFT
Definition: fontstash.h:42
PositionVector::length
double length() const
Returns the length.
Definition: PositionVector.cpp:484
MSEdge.h
GLHelper.h
GUIParkingArea::addLotEntry
void addLotEntry(double x, double y, double z, double width, double length, double angle)
extend boundary
Definition: GUIParkingArea.cpp:205
GUIGlObject_AbstractAdd
Definition: GUIGlObject_AbstractAdd.h:39
GUINet.h
PositionVector
A list of positions.
Definition: PositionVector.h:45
GUIGLObjectPopupMenu
The popup menu of a globject.
Definition: GUIGLObjectPopupMenu.h:47
GLHelper::setColor
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:621
PositionVector::getBoxBoundary
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
Definition: PositionVector.cpp:390
GUIParameterTableWindow::closeBuilding
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
Definition: GUIParameterTableWindow.cpp:219
GUIAppEnum.h
MSStoppingPlace::myBegPos
const double myBegPos
The begin position this bus stop is located at.
Definition: MSStoppingPlace.h:225
MAX2
T MAX2(T a, T b)
Definition: StdDefs.h:79
GLHelper::drawFilledCircle
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
Definition: GLHelper.cpp:348
GLHelper::drawText
static void drawText(const std::string &text, const Position &pos, const double layer, const double size, const RGBColor &col=RGBColor::BLACK, const double angle=0, int align=0, double width=-1)
Definition: GLHelper.cpp:673
RGBColor
Definition: RGBColor.h:39
GUIParkingArea::~GUIParkingArea
~GUIParkingArea()
Destructor.
Definition: GUIParkingArea.cpp:83
GUIVisualizationSettings::addName
GUIVisualizationTextSettings addName
Definition: GUIVisualizationSettings.h:591
MSLane::getParkingVehicles
const std::set< const MSVehicle * > & getParkingVehicles() const
retrieve the parking vehicles (see GUIParkingArea)
Definition: MSLane.h:1123
GUIParkingArea::myShapeLengths
std::vector< double > myShapeLengths
The lengths of the shape parts.
Definition: GUIParkingArea.h:141
GUIVisualizationSettings::detailSettings
GUIVisualizationDetailSettings detailSettings
detail settings
Definition: GUIVisualizationSettings.h:683
MSStoppingPlace::myName
const std::string myName
The name of the stopping place.
Definition: MSStoppingPlace.h:234
GUIGlObject::buildNameCopyPopupEntry
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
Definition: GUIGlObject.cpp:225
MSNet::lefthand
bool lefthand() const
return whether the network was built for lefthand traffic
Definition: MSNet.h:663
MSStoppingPlace::myEndPos
const double myEndPos
The end position this bus stop is located at.
Definition: MSStoppingPlace.h:228
Position::distanceTo
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:233
GUIParameterTableWindow::mkItem
void mkItem(const char *name, bool dynamic, ValueSource< T > *src)
Adds a row which obtains its value from a ValueSource.
Definition: GUIParameterTableWindow.h:108
MSParkingArea::myShape
PositionVector myShape
The roadside shape of this parkingArea.
Definition: MSParkingArea.h:299
MSParkingArea::getCapacity
int getCapacity() const
Returns the area capacity.
Definition: MSParkingArea.cpp:348
GUIGlobals.h
PositionVector::rotationDegreeAtOffset
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
Definition: PositionVector.cpp:319
GUIGlObject::getGlID
GUIGlID getGlID() const
Returns the numerical id of the object.
Definition: GUIGlObject.cpp:149
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
MSParkingArea::mySpaceOccupancies
std::vector< LotSpaceDefinition > mySpaceOccupancies
All the spaces in this parking area.
Definition: MSParkingArea.h:296
GUIVisualizationSettings::scale
double scale
information about a lane's width (temporary, used for a single view)
Definition: GUIVisualizationSettings.h:632
GUIApplicationWindow.h
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
Position::x
double x() const
Returns the x-position.
Definition: Position.h:56
Boundary::add
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition: Boundary.cpp:78
GUIParkingArea::mySignPos
Position mySignPos
The position of the sign.
Definition: GUIParkingArea.h:144
GUIVisualizationSettings::addFullName
GUIVisualizationTextSettings addFullName
Definition: GUIVisualizationSettings.h:593
GUIVisualizationTextSettings::show
bool show
flag show
Definition: GUIVisualizationSettings.h:68
MSParkingArea::addLotEntry
virtual void addLotEntry(double x, double y, double z, double width, double length, double angle)
Add a lot entry to parking area.
Definition: MSParkingArea.cpp:98
GUIParkingArea::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GUIParkingArea.cpp:119
GUIParkingArea::getParameterWindow
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Definition: GUIParkingArea.cpp:101
GUIParkingArea.h
GUIGlObject::buildPopupHeader
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
Definition: GUIGlObject.cpp:207
MSStoppingPlace::getMyName
const std::string & getMyName() const
Definition: MSStoppingPlace.cpp:265
GLO_PARKING_AREA
a ParkingArea
Definition: GUIGlObjectTypes.h:67
GUIParkingArea::mySignRot
double mySignRot
The rotation of the sign.
Definition: GUIParkingArea.h:147
GLIncludes.h
MSParkingArea::getOccupancy
int getOccupancy() const
Returns the area occupancy.
Definition: MSParkingArea.cpp:354
FunctionBinding.h
MSNet::getInstance
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:167
GUIMainWindow
Definition: GUIMainWindow.h:46
Position::y
double y() const
Returns the y-position.
Definition: Position.h:61
GUIParkingArea::myBoundary
Boundary myBoundary
the centering boundary
Definition: GUIParkingArea.h:150
M_PI
#define M_PI
Definition: odrSpiral.cpp:40
GUIParkingArea::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUIParkingArea.cpp:215
GUIEdge.h
GUIGlObject::buildShowParamsPopupEntry
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
Definition: GUIGlObject.cpp:248
GUIVisualizationDetailSettings::stoppingPlaceText
static const double stoppingPlaceText
details for stopping place texts
Definition: GUIVisualizationSettings.h:301
GUIGlObject::buildCenterPopupEntry
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
Definition: GUIGlObject.cpp:216
GUIGlObject::buildPositionCopyEntry
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used,...
Definition: GUIGlObject.cpp:266
GUIParkingArea::GUIParkingArea
GUIParkingArea(const std::string &id, const std::vector< std::string > &lines, MSLane &lane, double frompos, double topos, unsigned int capacity, double width, double length, double angle, const std::string &name, bool onRoad)
Constructor.
Definition: GUIParkingArea.cpp:55
MSLane::getWidth
double getWidth() const
Returns the lane's width.
Definition: MSLane.h:556
config.h
GUIVisualizationSettings::addSize
GUIVisualizationSizeSettings addSize
Definition: GUIVisualizationSettings.h:589
GUIParkingArea::getOptionalName
const std::string getOptionalName() const
Returns the stopping place name.
Definition: GUIParkingArea.cpp:221
GeomHelper.h
Boundary::grow
Boundary & grow(double by)
extends the boundary by the given amount
Definition: Boundary.cpp:300
GUIVisualizationSettings::drawDetail
bool drawDetail(const double detail, const double exaggeration) const
check if details can be drawn for the given GUIVisualizationDetailSettings and current scale and exxa...
Definition: GUIVisualizationSettings.cpp:1669
MSLane.h
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
PositionVector::getLineCenter
Position getLineCenter() const
get line center
Definition: PositionVector.cpp:474
GUIParkingArea::myShapeRotations
std::vector< double > myShapeRotations
The rotations of the shape parts.
Definition: GUIParkingArea.h:138
PositionVector.h
MSStoppingPlace::myLane
const MSLane & myLane
The lane this bus stop is located at.
Definition: MSStoppingPlace.h:222
GUIVisualizationSizeSettings::getExaggeration
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
Definition: GUIVisualizationSettings.cpp:212
PositionVector::move2side
void move2side(double amount, double maxExtension=100)
move position vector to side using certain ammount
Definition: PositionVector.cpp:1103
MSParkingArea::myWidth
double myWidth
The default width of each parking space.
Definition: MSParkingArea.h:286
fontstash.h