SUMO - Simulation of Urban MObility
GUIBusStop.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // A lane area vehicles can halt at (gui-version)
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
12 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <string>
36 #include <utils/geom/Boundary.h>
37 #include <utils/gui/div/GLHelper.h>
38 #include <utils/common/ToString.h>
39 #include <microsim/MSNet.h>
40 #include <microsim/MSLane.h>
41 #include <microsim/MSEdge.h>
42 #include "GUINet.h"
43 #include "GUIEdge.h"
44 #include "GUIPerson.h"
45 #include "GUIBusStop.h"
48 #include <gui/GUIGlobals.h>
54 #include <utils/geom/GeomHelper.h>
55 #include <guisim/GUIBusStop.h>
57 
58 
59 
60 // ===========================================================================
61 // method definitions
62 // ===========================================================================
63 GUIBusStop::GUIBusStop(const std::string& id, const std::vector<std::string>& lines, MSLane& lane,
64  double frompos, double topos, const std::string name) :
65  MSStoppingPlace(id, lines, lane, frompos, topos, name),
66  GUIGlObject_AbstractAdd("busStop", GLO_TRIGGER, id) {
67  const double offsetSign = MSNet::getInstance()->lefthand() ? -1 : 1;
68  myFGShape = lane.getShape();
69  myFGShape.move2side(1.65 * offsetSign);
71  lane.interpolateLanePosToGeometryPos(frompos),
73  myFGShapeRotations.reserve(myFGShape.size() - 1);
74  myFGShapeLengths.reserve(myFGShape.size() - 1);
75  int e = (int) myFGShape.size() - 1;
76  for (int i = 0; i < e; ++i) {
77  const Position& f = myFGShape[i];
78  const Position& s = myFGShape[i + 1];
79  myFGShapeLengths.push_back(f.distanceTo(s));
80  myFGShapeRotations.push_back((double) atan2((s.x() - f.x()), (f.y() - s.y())) * (double) 180.0 / (double) M_PI);
81  }
83  tmp.move2side(1.5 * offsetSign);
84  myFGSignPos = tmp.getLineCenter();
85  myFGSignRot = 0;
86  if (tmp.length() != 0) {
88  myFGSignRot -= 90;
89  }
90 }
91 
92 
94 
95 
96 void
97 GUIBusStop::addAccess(MSLane* lane, const double pos) {
98  MSStoppingPlace::addAccess(lane, pos);
99  myAccessCoords.push_back(lane->getShape().positionAtOffset(pos));
100 }
101 
102 
105  GUISUMOAbstractView& parent) {
106  GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this);
107  buildPopupHeader(ret, app);
112  buildPositionCopyEntry(ret, false);
113  return ret;
114 }
115 
116 
121  new GUIParameterTableWindow(app, *this, 5);
122  // add items
123  ret->mkItem("name", false, getMyName());
124  ret->mkItem("begin position [m]", false, myBegPos);
125  ret->mkItem("end position [m]", false, myEndPos);
126  ret->mkItem("person number [#]", true, new FunctionBinding<GUIBusStop, int>(this, &MSStoppingPlace::getTransportableNumber));
127  // close building
128  ret->closeBuilding();
129  return ret;
130 }
131 
132 
133 void
135  glPushName(getGlID());
136  glPushMatrix();
137  RGBColor green(76, 170, 50, 255);
138  RGBColor yellow(255, 235, 0, 255);
139  // draw the area
140  glTranslated(0, 0, getType());
141  GLHelper::setColor(green);
142  const double exaggeration = s.addSize.getExaggeration(s);
144  // draw details unless zoomed out to far
145  if (s.scale * exaggeration >= 10) {
146  glPushMatrix();
147  // draw the lines
148  const double rotSign = MSNet::getInstance()->lefthand() ? -1 : 1;
149  for (int i = 0; i != (int)myLines.size(); ++i) {
150  glPushMatrix();
151  glTranslated(myFGSignPos.x(), myFGSignPos.y(), 0);
152  glRotated(180, 1, 0, 0);
153  glRotated(rotSign * myFGSignRot, 0, 0, 1);
154  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
155  pfSetPosition(0, 0);
156  pfSetScale(1.f);
157  glTranslated(1.2, -(double)i, 0);
158  pfDrawString(myLines[i].c_str());
159  glPopMatrix();
160  }
161  for (std::vector<Position>::const_iterator i = myAccessCoords.begin(); i != myAccessCoords.end(); ++i) {
163  }
164  // draw the sign
165  glTranslated(myFGSignPos.x(), myFGSignPos.y(), 0);
166  int noPoints = 9;
167  if (s.scale * exaggeration > 25) {
168  noPoints = MIN2((int)(9.0 + (s.scale * exaggeration) / 10.0), 36);
169  }
170  glScaled(exaggeration, exaggeration, 1);
171  GLHelper::drawFilledCircle((double) 1.1, noPoints);
172  glTranslated(0, 0, .1);
173  GLHelper::setColor(yellow);
174  GLHelper::drawFilledCircle((double) 0.9, noPoints);
175  if (s.scale * exaggeration >= 4.5) {
176  GLHelper::drawText("H", Position(), .1, 1.6, green, myFGSignRot);
177  }
178  glPopMatrix();
179  }
180  //TODO: add pt stop show name options to gui settings [GL Mar '17]
181  if (s.streetName.show && getMyName() != "") {
183  }
184  glPopMatrix();
185  glPopName();
186  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName);
187 }
188 
189 
190 Boundary
194  return b;
195 }
196 
197 
198 
199 /****************************************************************************/
200 
int pfDrawString(const char *c)
Definition: polyfonts.c:1074
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0) const
draw name of item
bool lefthand() const
return whether the network was built for lefthand traffic
Definition: MSNet.h:688
a lane speed trigger,
double scale
information about a lane&#39;s width (temporary, used for a single view)
GUIVisualizationTextSettings streetName
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
Definition: Position.h:250
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:172
GUIVisualizationTextSettings addName
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Definition: GUIBusStop.cpp:104
void pfSetScale(double s)
Definition: polyfonts.c:465
A lane area vehicles can halt at.
void addAccess(MSLane *lane, const double pos)
adds an access point to this stop
Definition: GUIBusStop.cpp:97
const double myEndPos
The end position this bus stop is located at.
double x() const
Returns the x-position.
Definition: Position.h:63
virtual void addAccess(MSLane *lane, const double pos)
adds an access point to this stop
Stores the information about how to visualize structures.
Position myFGSignPos
The position of the sign.
Definition: GUIBusStop.h:147
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GUIBusStop.cpp:134
const double SUMO_const_laneWidth
Definition: StdDefs.h:50
double interpolateLanePosToGeometryPos(double lanePos) const
Definition: MSLane.h:442
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:169
double myFGSignRot
The rotation of the sign.
Definition: GUIBusStop.h:150
void pfSetPosition(double x, double y)
Definition: polyfonts.c:480
#define RAD2DEG(x)
Definition: GeomHelper.h:46
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
Definition: GLHelper.cpp:339
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.
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
GUIVisualizationSizeSettings addSize
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
double getExaggeration(const GUIVisualizationSettings &s, double factor=20) const
return the drawing size including exaggeration and constantSize values
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:438
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
A list of positions.
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
PositionVector myFGShape
The shape.
Definition: GUIBusStop.h:144
~GUIBusStop()
Destructor.
Definition: GUIBusStop.cpp:93
double y() const
Returns the y-position.
Definition: Position.h:68
double length() const
Returns the length.
T MIN2(T a, T b)
Definition: StdDefs.h:68
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUIBusStop.cpp:191
Boundary & grow(double by)
extends the boundary by the given amount
Definition: Boundary.cpp:302
void move2side(double amount)
move position vector to side using certain ammount
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:240
const double myBegPos
The begin position this bus stop is located at.
const std::string & getMyName() const
int getTransportableNumber() const
Returns the number of transportables waiting on this stop.
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
#define M_PI
Definition: odrSpiral.cpp:40
PositionVector myAccessCoords
The coordinates of access points.
Definition: GUIBusStop.h:153
The popup menu of a globject.
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Definition: GUIBusStop.cpp:118
std::vector< double > myFGShapeRotations
The rotations of the shape parts.
Definition: GUIBusStop.h:138
Position getLineCenter() const
get line center
const PositionVector & getShape() const
Returns this lane&#39;s shape.
Definition: MSLane.h:426
PositionVector getSubpart(double beginOffset, double endOffset) const
get subpart of a position vector
std::vector< double > myFGShapeLengths
The lengths of the shape parts.
Definition: GUIBusStop.h:141
empty max
static void drawBoxLine(const Position &beg, double rot, double visLength, double width, double offset=0)
Draws a thick line.
Definition: GLHelper.cpp:126
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)
draw Text with given parameters
Definition: GLHelper.cpp:455
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.
Representation of a lane in the micro simulation.
Definition: MSLane.h:79
A window containing a gl-object&#39;s parameter.
double angleTo2D(const Position &other) const
returns the angle in the plane of the vector pointing from here to the other position ...
Definition: Position.h:260
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
GUIBusStop(const std::string &id, const std::vector< std::string > &lines, MSLane &lane, double frompos, double topos, const std::string name)
Constructor.
Definition: GUIBusStop.cpp:63