SUMO - Simulation of Urban MObility
GUIContainerStop.cpp
Go to the documentation of this file.
1 /****************************************************************************/
8 // A lane area vehicles can halt at (gui-version)
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
11 // Copyright (C) 2001-2016 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 "GUIContainerStop.h"
47 #include <gui/GUIGlobals.h>
53 #include <utils/geom/GeomHelper.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 GUIContainerStop::GUIContainerStop(const std::string& id, const std::vector<std::string>& lines, MSLane& lane,
66  SUMOReal frompos, SUMOReal topos)
67  : MSStoppingPlace(id, lines, lane, frompos, topos),
68  GUIGlObject_AbstractAdd("containerStop", GLO_TRIGGER, id) {
69  myFGShape = lane.getShape();
71  myFGShape = myFGShape.getSubpart(frompos, topos);
72  myFGShapeRotations.reserve(myFGShape.size() - 1);
73  myFGShapeLengths.reserve(myFGShape.size() - 1);
74  int e = (int) myFGShape.size() - 1;
75  for (int i = 0; i < e; ++i) {
76  const Position& f = myFGShape[i];
77  const Position& s = myFGShape[i + 1];
78  myFGShapeLengths.push_back(f.distanceTo(s));
79  myFGShapeRotations.push_back((SUMOReal) atan2((s.x() - f.x()), (f.y() - s.y())) * (SUMOReal) 180.0 / (SUMOReal) PI);
80  }
82  tmp.move2side(1.5);
83  myFGSignPos = tmp.getLineCenter();
84  myFGSignRot = 0;
85  if (tmp.length() != 0) {
87  myFGSignRot -= 90;
88  }
89 }
90 
91 
93 
94 
97  GUISUMOAbstractView& parent) {
98  GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this);
99  buildPopupHeader(ret, app);
104  buildPositionCopyEntry(ret, false);
105  return ret;
106 }
107 
108 
113  new GUIParameterTableWindow(app, *this, 4);
114  // add items
115  ret->mkItem("begin position [m]", false, myBegPos);
116  ret->mkItem("end position [m]", false, myEndPos);
118  // close building
119  ret->closeBuilding();
120  return ret;
121 }
122 
123 
124 void
126  glPushName(getGlID());
127  glPushMatrix();
128  RGBColor grey(177, 184, 186, 171);
129  RGBColor blue(83, 89, 172, 255);
130  // draw the area
131  size_t i;
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 lines
139  for (i = 0; i != myLines.size(); ++i) {
140  glPushMatrix();
141  glTranslated(myFGSignPos.x(), myFGSignPos.y(), 0);
142  glRotated(180, 1, 0, 0);
143  glRotated(myFGSignRot, 0, 0, 1);
144  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
145  pfSetPosition(0, 0);
146  pfSetScale(1.f);
147  glScaled(exaggeration, exaggeration, 1);
148  glTranslated(1.2, -(double)i, 0);
149  pfDrawString(myLines[i].c_str());
150  glPopMatrix();
151  }
152  // draw the sign
153  glTranslated(myFGSignPos.x(), myFGSignPos.y(), 0);
154  int noPoints = 9;
155  if (s.scale * exaggeration > 25) {
156  noPoints = MIN2((int)(9.0 + (s.scale * exaggeration) / 10.0), 36);
157  }
158  glScaled(exaggeration, exaggeration, 1);
159  GLHelper::drawFilledCircle((SUMOReal) 1.1, noPoints);
160  glTranslated(0, 0, .1);
161  GLHelper::setColor(grey);
162  GLHelper::drawFilledCircle((SUMOReal) 0.9, noPoints);
163  if (s.scale * exaggeration >= 4.5) {
164  GLHelper::drawText("C", Position(), .1, 1.6 * exaggeration, blue, myFGSignRot);
165  }
166  }
167  glPopMatrix();
168  glPopName();
169  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName);
170  for (std::vector<MSTransportable*>::const_iterator i = myWaitingTransportables.begin(); i != myWaitingTransportables.end(); ++i) {
171  glTranslated(0, 1, 0); // make multiple containers viewable
172  static_cast<GUIContainer*>(*i)->drawGL(s);
173  }
174 }
175 
176 
177 Boundary
180  b.grow(20);
181  return b;
182 }
183 
184 
185 
186 /****************************************************************************/
187 
PositionVector myFGShape
The shape.
int pfDrawString(const char *c)
Definition: polyfonts.c:1074
a lane speed trigger,
unsigned int getTransportableNumber() const
Returns the number of transportables waiting on this stop.
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.
A lane area vehicles can halt at.
SUMOReal myFGSignRot
The rotation of the sign.
Stores the information about how to visualize structures.
~GUIContainerStop()
Destructor.
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 distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:221
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.
Definition: GUIGlObject.h:123
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)
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
static void drawFilledCircle(SUMOReal width, int steps=8)
Draws a filled circle around (0,0)
Definition: GLHelper.cpp:344
GUIVisualizationSizeSettings addSize
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.h:180
#define PI
Definition: polyfonts.c:61
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition: GLHelper.cpp:443
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
A list of positions.
std::vector< SUMOReal > myFGShapeLengths
The lengths of the shape parts.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Position myFGSignPos
The position of the sign.
std::vector< SUMOReal > myFGShapeRotations
The rotations of the shape parts.
T MIN2(T a, T b)
Definition: StdDefs.h:69
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
void drawName(const Position &pos, const SUMOReal scale, const GUIVisualizationTextSettings &settings, const SUMOReal angle=0) const
GUIContainerStop(const std::string &id, const std::vector< std::string > &lines, MSLane &lane, SUMOReal frompos, SUMOReal topos)
Constructor.
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:201
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
const PositionVector & getShape() const
Returns this lane&#39;s shape.
Definition: MSLane.h:322
void move2side(SUMOReal amount)
#define SUMOReal
Definition: config.h:213
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
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.
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
A window containing a gl-object&#39;s parameter.
PositionVector getSubpart(SUMOReal beginOffset, SUMOReal endOffset) const
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
SUMOReal getExaggeration(const GUIVisualizationSettings &s) const
return the drawing size including exaggeration and constantSize values
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.