Eclipse SUMO - Simulation of Urban MObility
GUITriggeredRerouter.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 /****************************************************************************/
16 // Reroutes vehicles passing an edge (gui version)
17 /****************************************************************************/
18 
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #include <config.h>
24 
25 #include <string>
28 #include <utils/geom/Boundary.h>
29 #include <utils/gui/div/GLHelper.h>
30 #include <utils/common/ToString.h>
31 #include <utils/common/Command.h>
32 #include <microsim/MSNet.h>
33 #include <microsim/MSLane.h>
34 #include <microsim/MSEdge.h>
35 #include <microsim/MSRoute.h>
36 #include <microsim/MSVehicle.h>
37 #include <guisim/GUINet.h>
38 #include <guisim/GUIEdge.h>
39 #include "GUITriggeredRerouter.h"
42 #include <gui/GUIGlobals.h>
48 
49 
50 // ===========================================================================
51 // FOX callback mapping
52 // ===========================================================================
53 /* -------------------------------------------------------------------------
54  * GUITriggeredRerouter::GUITriggeredRerouterPopupMenu - mapping
55  * ----------------------------------------------------------------------- */
59 
60 };
61 
62 // Object implementation
64 
65 
66 /* -------------------------------------------------------------------------
67  * GUITriggeredRerouter::GUIManip_TriggeredRerouter - mapping
68  * ----------------------------------------------------------------------- */
69 FXDEFMAP(GUITriggeredRerouter::GUIManip_TriggeredRerouter) GUIManip_TriggeredRerouterMap[] = {
75 };
76 
77 FXIMPLEMENT(GUITriggeredRerouter::GUIManip_TriggeredRerouter, GUIManipulator, GUIManip_TriggeredRerouterMap, ARRAYNUMBER(GUIManip_TriggeredRerouterMap))
78 
79 
80 // ===========================================================================
81 // method definitions
82 // ===========================================================================
83 /* -------------------------------------------------------------------------
84  * GUITriggeredRerouter::GUIManip_TriggeredRerouter - methods
85  * ----------------------------------------------------------------------- */
87  GUIMainWindow& app,
88  const std::string& name, GUITriggeredRerouter& o,
89  int /*xpos*/, int /*ypos*/)
90  : GUIManipulator(app, name, 0, 0), myParent(&app),
91  myChosenValue(0), myChosenTarget(myChosenValue, nullptr, MID_OPTION),
92  myUsageProbability(o.getProbability()), myUsageProbabilityTarget(myUsageProbability),
93  myObject(&o) {
94  myChosenTarget.setTarget(this);
95  FXVerticalFrame* f1 =
96  new FXVerticalFrame(this, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0);
97 
98  FXGroupBox* gp = new FXGroupBox(f1, "Change Trigger Probability",
99  GROUPBOX_TITLE_LEFT | FRAME_SUNKEN | FRAME_RIDGE,
100  0, 0, 0, 0, 4, 4, 1, 1, 2, 0);
101  {
102  // default
103  FXHorizontalFrame* gf1 =
104  new FXHorizontalFrame(gp, LAYOUT_TOP | LAYOUT_LEFT, 0, 0, 0, 0, 10, 10, 5, 5);
105  new FXRadioButton(gf1, "Default", &myChosenTarget, FXDataTarget::ID_OPTION + 0,
106  ICON_BEFORE_TEXT | LAYOUT_SIDE_TOP,
107  0, 0, 0, 0, 2, 2, 0, 0);
108  }
109  {
110  // free
111  FXHorizontalFrame* gf12 =
112  new FXHorizontalFrame(gp, LAYOUT_TOP | LAYOUT_LEFT, 0, 0, 0, 0, 10, 10, 5, 5);
113  new FXRadioButton(gf12, "User Given: ", &myChosenTarget, FXDataTarget::ID_OPTION + 1,
114  ICON_BEFORE_TEXT | LAYOUT_SIDE_TOP | LAYOUT_CENTER_Y,
115  0, 0, 0, 0, 2, 2, 0, 0);
116  myUsageProbabilityDial =
117  new FXRealSpinner(gf12, 10, this, MID_USER_DEF,
118  LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
119  //myUsageProbabilityDial->setFormatString("%.2f");
120  //myUsageProbabilityDial->setIncrements(.1, .1, .1);
121  myUsageProbabilityDial->setIncrement(.1);
122  myUsageProbabilityDial->setRange(0, 1);
123  myUsageProbabilityDial->setValue(myObject->getUserProbability());
124  }
125  {
126  // off
127  FXHorizontalFrame* gf13 =
128  new FXHorizontalFrame(gp, LAYOUT_TOP | LAYOUT_LEFT, 0, 0, 0, 0, 10, 10, 5, 5);
129  new FXRadioButton(gf13, "Off", &myChosenTarget, FXDataTarget::ID_OPTION + 2,
130  ICON_BEFORE_TEXT | LAYOUT_SIDE_TOP,
131  0, 0, 0, 0, 2, 2, 0, 0);
132  }
133  myChosenValue = myObject->inUserMode()
134  ? myObject->getUserProbability() > 0
135  ? 1 : 2
136  : 0;
137 
138  FXGroupBox* gp2 = new FXGroupBox(f1, "Change Route Probability",
139  GROUPBOX_TITLE_LEFT | FRAME_SUNKEN | FRAME_RIDGE,
140  0, 0, 0, 0, 4, 4, 1, 1, 2, 0);
141  new FXButton(gp2, "Shift", nullptr, this, MID_SHIFT_PROBS,
142  BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
143 
144  new FXButton(f1, "Close", nullptr, this, MID_CLOSE,
145  BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
146 
147 }
148 
149 
151 
152 
153 long
155  destroy();
156  return 1;
157 }
158 
159 
160 long
162  myUsageProbability = (double)(myUsageProbabilityDial->getValue());
163  static_cast<GUITriggeredRerouter*>(myObject)->setUserUsageProbability(myUsageProbability);
164  static_cast<GUITriggeredRerouter*>(myObject)->setUserMode(true);
165  myParent->updateChildren();
166  return 1;
167 }
168 
169 
170 long
171 GUITriggeredRerouter::GUIManip_TriggeredRerouter::onUpdUserDef(FXObject* sender, FXSelector, void* ptr) {
172  sender->handle(this,
173  myChosenValue != 1 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
174  ptr);
175  myParent->updateChildren();
176  return 1;
177 }
178 
179 
180 long
182  static_cast<GUITriggeredRerouter*>(myObject)->setUserUsageProbability(myUsageProbability);
183  switch (myChosenValue) {
184  case 0:
185  static_cast<GUITriggeredRerouter*>(myObject)->setUserMode(false);
186  break;
187  case 1:
188  static_cast<GUITriggeredRerouter*>(myObject)->setUserMode(true);
189  break;
190  case 2:
191  static_cast<GUITriggeredRerouter*>(myObject)->setUserUsageProbability(0);
192  static_cast<GUITriggeredRerouter*>(myObject)->setUserMode(true);
193  break;
194  default:
195  throw 1;
196  }
197  myParent->updateChildren();
198  return 1;
199 }
200 
201 long
203  static_cast<GUITriggeredRerouter*>(myObject)->shiftProbs();
204  myParent->updateChildren();
205  return 1;
206 }
207 
208 
209 
210 /* -------------------------------------------------------------------------
211  * GUITriggeredRerouter::GUITriggeredRerouterPopupMenu - methods
212  * ----------------------------------------------------------------------- */
214  GUIMainWindow& app, GUISUMOAbstractView& parent,
215  GUIGlObject& o)
216  : GUIGLObjectPopupMenu(app, parent, o) {}
217 
218 
220 
221 
222 long
224  FXSelector,
225  void*) {
226  static_cast<GUITriggeredRerouter*>(myObject)->openManipulator(
227  *myApplication, *myParent);
228  return 1;
229 }
230 
231 // -------------------------------------------------------------------------
232 // GUITriggeredRerouter - methods
233 // -------------------------------------------------------------------------
234 
235 GUITriggeredRerouter::GUITriggeredRerouter(const std::string& id, const MSEdgeVector& edges, double prob,
236  const std::string& aXMLFilename, bool off, SUMOTime timeThreshold, const std::string& vTypes, SUMORTree& rtree) :
237  MSTriggeredRerouter(id, edges, prob, aXMLFilename, off, timeThreshold, vTypes),
240  // add visualisation objects for edges which trigger the rerouter
241  for (MSEdgeVector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
242  myEdgeVisualizations.push_back(new GUITriggeredRerouterEdge(dynamic_cast<GUIEdge*>(*it), this, REROUTER_TRIGGER_EDGE));
244  myBoundary.add(myEdgeVisualizations.back()->getCenteringBoundary());
245  }
246 }
247 
248 
250  for (std::vector<GUITriggeredRerouterEdge*>::iterator it = myEdgeVisualizations.begin(); it != myEdgeVisualizations.end(); ++it) {
251  delete *it;
252  }
253  myEdgeVisualizations.clear();
254 }
255 
256 
257 void
260  if (element == SUMO_TAG_INTERVAL) {
261  // add visualisation objects for closed edges
262  const RerouteInterval& ri = myIntervals.back();
263  for (MSEdgeVector::const_iterator it = ri.closed.begin(); it != ri.closed.end(); ++it) {
264  myEdgeVisualizations.push_back(new GUITriggeredRerouterEdge(dynamic_cast<GUIEdge*>(*it), this, REROUTER_CLOSED_EDGE));
265  dynamic_cast<GUINet*>(GUINet::getInstance())->getVisualisationSpeedUp().addAdditionalGLObject(myEdgeVisualizations.back());
266  myBoundary.add(myEdgeVisualizations.back()->getCenteringBoundary());
267  }
268  // add visualisation objects for switches
269  if (ri.routeProbs.getProbs().size() > 1) {
270  // find last common edge of all routes
271  const MSRoute* route0 = ri.routeProbs.getVals()[0];
272  const MSEdge* lastEdge = nullptr;
273  int nextIndex = 0;
274  for (int i = 0; i < (int)route0->getEdges().size(); i++) {
275  const MSEdge* cand = route0->getEdges()[i];
276  for (const MSRoute* route : ri.routeProbs.getVals()) {
277  const MSEdge* nextEdge = i < (int)route->getEdges().size() ? route->getEdges()[i] : nullptr;
278  if (nextEdge != cand) {
279  cand = nullptr;
280  }
281  }
282  if (cand != nullptr) {
283  lastEdge = cand;
284  } else {
285  nextIndex = i;
286  break;
287  }
288  }
289  if (lastEdge != nullptr) {
290  for (int i = 0; i < (int)ri.routeProbs.getVals().size(); i++) {
291  const ConstMSEdgeVector& edges = ri.routeProbs.getVals()[i]->getEdges();
292  if (nextIndex < (int)edges.size()) {
293  GUIEdge* edge = dynamic_cast<GUIEdge*>(const_cast<MSEdge*>(edges[nextIndex]));
295  dynamic_cast<GUINet*>(GUINet::getInstance())->getVisualisationSpeedUp().addAdditionalGLObject(myEdgeVisualizations.back());
296  myBoundary.add(myEdgeVisualizations.back()->getCenteringBoundary());
297  }
298  }
299  }
300  }
301  }
302 }
303 
304 
307  GUISUMOAbstractView& parent) {
308  GUIGLObjectPopupMenu* ret = new GUITriggeredRerouterPopupMenu(app, parent, *this);
309  buildPopupHeader(ret, app);
311  buildShowManipulatorPopupEntry(ret, false);
314  buildPositionCopyEntry(ret, false);
315  return ret;
316 }
317 
318 
322  return nullptr;
323 }
324 
325 
326 void
328  UNUSED_PARAMETER(s);
329 }
330 
331 
332 Boundary
334  Boundary b(myBoundary);
335  b.grow(20);
336  return b;
337 }
338 
339 
340 
345  new GUIManip_TriggeredRerouter(app, getFullName(), *this, 0, 0);
346  gui->create();
347  gui->show();
348  return gui;
349 }
350 
351 
352 void
354  const RerouteInterval* const ri = getCurrentReroute(MSNet::getInstance()->getCurrentTimeStep());
355  if (ri != nullptr && ri->routeProbs.getProbs().size() > 1) {
356  auto& rp = const_cast<RandomDistributor<const MSRoute*>&>(ri->routeProbs);
357  myShiftProbDistIndex = myShiftProbDistIndex % rp.getProbs().size();
358  double prob = rp.getProbs()[myShiftProbDistIndex];
359  rp.add(rp.getVals()[myShiftProbDistIndex], -prob);
360  myShiftProbDistIndex = (myShiftProbDistIndex + 1) % rp.getProbs().size();
361  rp.add(rp.getVals()[myShiftProbDistIndex], prob);
362  // notify vehicles currently on a trigger edge
363  for (auto rrEdge : myEdgeVisualizations) {
364  if (rrEdge->getRerouterEdgeType() == REROUTER_TRIGGER_EDGE) {
365  if (!MSGlobals::gUseMesoSim) {
366  for (MSLane* lane : rrEdge->getEdge()->getLanes()) {
367  for (const MSVehicle* veh : lane->getVehiclesSecure()) {
368  const_cast<MSVehicle*>(veh)->addReminder(this);
369  }
370  lane->releaseVehicles();
371  }
372  }
373  }
374  }
375  }
376 }
377 
378 
379 /* -------------------------------------------------------------------------
380  * GUITriggeredRerouterEdge - methods
381  * ----------------------------------------------------------------------- */
383  GUIGlObject(GLO_REROUTER_EDGE, parent->getID() + ":" + edge->getID()),
384  myParent(parent),
385  myEdge(edge),
386  myEdgeType(edgeType),
387  myDistIndex(distIndex) {
388  const std::vector<MSLane*>& lanes = edge->getLanes();
389  myFGPositions.reserve(lanes.size());
390  myFGRotations.reserve(lanes.size());
391  for (std::vector<MSLane*>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
392  const PositionVector& v = (*i)->getShape();
393  const double pos = edgeType == REROUTER_TRIGGER_EDGE ? v.length() - (double) 6. : 3;
394  myFGPositions.push_back((*i)->geometryPositionAtOffset(pos));
395  myFGRotations.push_back(-v.rotationDegreeAtOffset(pos));
396  myBoundary.add(myFGPositions.back());
397  }
398 }
399 
400 
402 
403 
406  GUISUMOAbstractView& parent) {
407  return myParent->getPopUpMenu(app, parent);
408 }
409 
410 
414  return nullptr;
415 }
416 
417 
418 void
420  const double exaggeration = s.addSize.getExaggeration(s, this);
421  if (s.scale * exaggeration >= 3) {
422  glPushName(getGlID());
423  const double prob = myParent->getProbability();
424  if (myEdgeType == REROUTER_CLOSED_EDGE) {
425  // draw closing symbol onto all lanes
426  const RerouteInterval* const ri =
427  myParent->getCurrentReroute(MSNet::getInstance()->getCurrentTimeStep());
428  if (ri != nullptr && prob > 0) {
429  // draw only if the edge is closed at this time
430  if (std::find(ri->closed.begin(), ri->closed.end(), myEdge) != ri->closed.end()) {
431  const int noLanes = (int)myFGPositions.size();
432  for (int j = 0; j < noLanes; ++j) {
433  Position pos = myFGPositions[j];
434  double rot = myFGRotations[j];
435  glPushMatrix();
436  glTranslated(pos.x(), pos.y(), 0);
437  glRotated(rot, 0, 0, 1);
438  glTranslated(0, -1.5, 0);
439  int noPoints = 9;
440  if (s.scale > 25) {
441  noPoints = (int)(9.0 + s.scale / 10.0);
442  if (noPoints > 36) {
443  noPoints = 36;
444  }
445  }
446  glTranslated(0, 0, getType());
447  //glScaled(exaggeration, exaggeration, 1);
448  glColor3d(0.7, 0, 0);
449  GLHelper::drawFilledCircle((double) 1.3, noPoints);
450  glTranslated(0, 0, .1);
451  glColor3d(1, 0, 0);
452  GLHelper::drawFilledCircle((double) 1.3, noPoints, 0, prob * 360);
453  glTranslated(0, 0, .1);
454  glColor3d(1, 1, 1);
455  glRotated(-90, 0, 0, 1);
456  glBegin(GL_TRIANGLES);
457  glVertex2d(0 - .3, -1.);
458  glVertex2d(0 - .3, 1.);
459  glVertex2d(0 + .3, 1.);
460  glVertex2d(0 + .3, -1.);
461  glVertex2d(0 - .3, -1.);
462  glVertex2d(0 + .3, 1.);
463  glEnd();
464  glPopMatrix();
465  }
466  }
467  }
468 
469  } else if (myEdgeType == REROUTER_TRIGGER_EDGE) {
470  // draw rerouter symbol onto all lanes
471  for (int i = 0; i < (int)myFGPositions.size(); ++i) {
472  const Position& pos = myFGPositions[i];
473  double rot = myFGRotations[i];
474  glPushMatrix();
475  glTranslated(pos.x(), pos.y(), 0);
476  glRotated(rot, 0, 0, 1);
477  glTranslated(0, 0, getType());
478  glScaled(exaggeration, exaggeration, 1);
479  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
480 
481  glBegin(GL_TRIANGLES);
482  glColor3d(1, .8f, 0);
483  // base
484  glVertex2d(0 - 1.4, 0);
485  glVertex2d(0 - 1.4, 6);
486  glVertex2d(0 + 1.4, 6);
487  glVertex2d(0 + 1.4, 0);
488  glVertex2d(0 - 1.4, 0);
489  glVertex2d(0 + 1.4, 6);
490  glEnd();
491 
492  // draw "U"
493  GLHelper::drawText("U", Position(0, 2), .1, 3, RGBColor::BLACK, 180);
494 
495  // draw Probability
496  GLHelper::drawText((toString((int)(prob * 100)) + "%").c_str(), Position(0, 4), .1, 0.7, RGBColor::BLACK, 180);
497 
498  glPopMatrix();
499  }
500  } else if (myEdgeType == REROUTER_SWITCH_EDGE) {
501  const RerouteInterval* const ri =
502  myParent->getCurrentReroute(MSNet::getInstance()->getCurrentTimeStep());
503  const double routeProb = ri != nullptr && prob > 0 ? ri->routeProbs.getProbs()[myDistIndex] / ri->routeProbs.getOverallProb() : 0;
504  if (routeProb > 0) {
505  for (int i = 0; i < (int)myFGPositions.size(); ++i) {
506  const Position& pos = myFGPositions[i];
507  double rot = myFGRotations[i];
508  glPushMatrix();
509  glTranslated(pos.x(), pos.y(), 0);
510  glRotated(rot, 0, 0, 1);
511  glTranslated(0, 0, getType());
512  glScaled(exaggeration, exaggeration, 1);
513  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
514 
515  glBegin(GL_TRIANGLES);
516  glColor3d(0, 1, 1);
517  // base
518  glVertex2d(0 - 0.0, 0);
519  glVertex2d(0 - 1.4, 6);
520  glVertex2d(0 + 1.4, 6);
521  glVertex2d(0 + 0.0, 0);
522  glVertex2d(0 + 1.4, 6);
523  glEnd();
524 
525  // draw "P"
526  GLHelper::drawText("P", Position(0, 3.5), .1, 2, RGBColor::BLACK, 180);
527 
528  // draw Probability for this target edge
529  GLHelper::drawText((toString((int)(routeProb * 100)) + "%").c_str(), Position(0, 5), .1, 0.7, RGBColor::BLACK, 180);
530 
531  glPopMatrix();
532  }
533  }
534  }
535  glPopName();
536  }
537 }
538 
539 
540 Boundary
542  Boundary b(myBoundary);
543  b.grow(20);
544  return b;
545 }
546 
547 
548 void
550  myParent->shiftProbs();
551 }
552 
553 
554 /****************************************************************************/
555 
GUIGlObject::getType
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
Definition: GUIGlObject.cpp:180
MSTriggeredRerouter::getCurrentReroute
const RerouteInterval * getCurrentReroute(SUMOTime time, SUMOVehicle &veh) const
Returns the rerouting definition valid for the given time and vehicle, 0 if none.
Definition: MSTriggeredRerouter.cpp:313
Boundary.h
GUITriggeredRerouter::GUIManip_TriggeredRerouter::MID_OPTION
Definition: GUITriggeredRerouter.h:249
UNUSED_PARAMETER
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:31
MSTriggeredRerouter::RerouteInterval::routeProbs
RandomDistributor< const MSRoute * > routeProbs
The distributions of new routes to use.
Definition: MSTriggeredRerouter.h:107
MSTriggeredRerouter::RerouteInterval
Definition: MSTriggeredRerouter.h:91
ToString.h
GUITriggeredRerouter::REROUTER_TRIGGER_EDGE
Definition: GUITriggeredRerouter.h:132
GUITriggeredRerouter::myEdgeVisualizations
std::vector< GUITriggeredRerouterEdge * > myEdgeVisualizations
Definition: GUITriggeredRerouter.h:294
GUIParameterTableWindow
A window containing a gl-object's parameter.
Definition: GUIParameterTableWindow.h:62
GUITriggeredRerouter::RerouterEdgeType
RerouterEdgeType
Definition: GUITriggeredRerouter.h:131
GUITriggeredRerouter::GUITriggeredRerouterPopupMenu
Definition: GUITriggeredRerouter.h:225
GUISUMOAbstractView
Definition: GUISUMOAbstractView.h:72
MSNet.h
MSLane
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
GUIParameterTableWindow.h
RGBColor::BLACK
static const RGBColor BLACK
Definition: RGBColor.h:197
GUIGlObject::buildSelectionPopupEntry
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
Definition: GUIGlObject.cpp:235
GUITriggeredRerouter::GUITriggeredRerouterEdge::myFGPositions
PosCont myFGPositions
The positions in full-geometry mode.
Definition: GUITriggeredRerouter.h:212
MsgHandler.h
GUIGLObjectPopupMenu.h
GUIGlobalSelection.h
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
GUITriggeredRerouter::myBoundary
Boundary myBoundary
The boundary of this rerouter.
Definition: GUITriggeredRerouter.h:292
ConstMSEdgeVector
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:75
GUIGlObject::buildShowManipulatorPopupEntry
void buildShowManipulatorPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the manipulator window.
Definition: GUIGlObject.cpp:278
GUITriggeredRerouter::GUIManip_TriggeredRerouter::onCmdChangeOption
long onCmdChangeOption(FXObject *, FXSelector, void *)
Definition: GUITriggeredRerouter.cpp:181
MSGlobals::gUseMesoSim
static bool gUseMesoSim
Definition: MSGlobals.h:90
MSRoute::getEdges
const ConstMSEdgeVector & getEdges() const
Definition: MSRoute.h:120
GUIGlObject::getFullName
const std::string & getFullName() const
Definition: GUIGlObject.cpp:137
PositionVector::length
double length() const
Returns the length.
Definition: PositionVector.cpp:484
MSTriggeredRerouter
Reroutes vehicles passing an edge.
Definition: MSTriggeredRerouter.h:61
MSEdge.h
GLHelper.h
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
MSRoute
Definition: MSRoute.h:66
MSVehicle.h
GUITriggeredRerouter
Reroutes vehicles passing an edge One rerouter can be active on multiple edges. To reduce drawing loa...
Definition: GUITriggeredRerouter.h:50
GUIAppEnum.h
GUITriggeredRerouter::REROUTER_CLOSED_EDGE
Definition: GUITriggeredRerouter.h:133
GUITriggeredRerouter::GUIManip_TriggeredRerouter::onCmdClose
long onCmdClose(FXObject *, FXSelector, void *)
Definition: GUITriggeredRerouter.cpp:154
SUMORTree
A RT-tree for efficient storing of SUMO's GL-objects.
Definition: SUMORTree.h:68
GLHelper::drawFilledCircle
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
Definition: GLHelper.cpp:348
GUITriggeredRerouter::REROUTER_SWITCH_EDGE
Definition: GUITriggeredRerouter.h:134
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
GUITriggeredRerouter::GUIManip_TriggeredRerouter::onCmdShiftProbs
long onCmdShiftProbs(FXObject *, FXSelector, void *)
Definition: GUITriggeredRerouter.cpp:202
GUITriggeredRerouter::GUITriggeredRerouterEdge::getPopUpMenu
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Definition: GUITriggeredRerouter.cpp:405
GUITriggeredRerouter::GUITriggeredRerouterEdge
Definition: GUITriggeredRerouter.h:137
GUITriggeredRerouter::GUITriggeredRerouterEdge::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GUITriggeredRerouter.cpp:419
GUITriggeredRerouter::getPopUpMenu
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Definition: GUITriggeredRerouter.cpp:306
FXDEFMAP
FXDEFMAP(GUITriggeredRerouter::GUIManip_TriggeredRerouter) GUIManip_TriggeredRerouterMap[]
GUITriggeredRerouter::GUIManip_TriggeredRerouter::MID_CLOSE
Definition: GUITriggeredRerouter.h:250
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
GUITriggeredRerouter::GUITriggeredRerouterPopupMenu::~GUITriggeredRerouterPopupMenu
~GUITriggeredRerouterPopupMenu()
Definition: GUITriggeredRerouter.cpp:219
MSTriggeredRerouter::myEndElement
virtual void myEndElement(int element)
Called when a closing tag occurs.
Definition: MSTriggeredRerouter.cpp:236
GUIGlobals.h
GUITriggeredRerouter::shiftProbs
void shiftProbs()
shit route probabilities
Definition: GUITriggeredRerouter.cpp:353
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
GUITriggeredRerouter::GUIManip_TriggeredRerouter::onCmdUserDef
long onCmdUserDef(FXObject *, FXSelector, void *)
Definition: GUITriggeredRerouter.cpp:161
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
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
GUITriggeredRerouter::GUIManip_TriggeredRerouter::~GUIManip_TriggeredRerouter
virtual ~GUIManip_TriggeredRerouter()
Destructor.
Definition: GUITriggeredRerouter.cpp:150
GUITriggeredRerouter::GUITriggeredRerouterEdge::getParameterWindow
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Definition: GUITriggeredRerouter.cpp:412
GUITriggeredRerouter::~GUITriggeredRerouter
~GUITriggeredRerouter()
Destructor.
Definition: GUITriggeredRerouter.cpp:249
GUITriggeredRerouter::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUITriggeredRerouter.cpp:333
MSEdge
A road/street connecting two junctions.
Definition: MSEdge.h:78
GUITriggeredRerouter::GUIManip_TriggeredRerouter::MID_USER_DEF
Definition: GUITriggeredRerouter.h:247
GUITriggeredRerouter::GUITriggeredRerouterEdge::myFGRotations
RotCont myFGRotations
The rotations in full-geometry mode.
Definition: GUITriggeredRerouter.h:215
GUIGlObject
Definition: GUIGlObject.h:65
GUITriggeredRerouter::openManipulator
GUIManipulator * openManipulator(GUIMainWindow &app, GUISUMOAbstractView &parent)
Definition: GUITriggeredRerouter.cpp:342
RandomDistributor::getProbs
const std::vector< double > & getProbs() const
Returns the probabilities assigned to the members of the distribution.
Definition: RandomDistributor.h:162
GUITriggeredRerouter::GUITriggeredRerouterEdge::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUITriggeredRerouter.cpp:541
RandomDistributor< const MSRoute * >
GUIGlObject::buildPopupHeader
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
Definition: GUIGlObject.cpp:207
MSLane::getEdge
MSEdge & getEdge() const
Returns the lane's edge.
Definition: MSLane.h:669
GUITriggeredRerouter::GUIManip_TriggeredRerouter::onUpdUserDef
long onUpdUserDef(FXObject *, FXSelector, void *)
Definition: GUITriggeredRerouter.cpp:171
GLIncludes.h
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:47
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
GUIEdge
A road/street connecting two junctions (gui-version)
Definition: GUIEdge.h:52
GUIManipulator
Definition: GUIManipulator.h:42
GUITriggeredRerouter::GUITriggeredRerouter
GUITriggeredRerouter(const std::string &id, const MSEdgeVector &edges, double prob, const std::string &aXMLFilename, bool off, SUMOTime timeThreshold, const std::string &vTypes, SUMORTree &rtree)
Constructor.
Definition: GUITriggeredRerouter.cpp:235
GUITriggeredRerouter::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GUITriggeredRerouter.cpp:327
GLO_REROUTER
a Rerouter
Definition: GUIGlObjectTypes.h:85
GUITriggeredRerouter::myEndElement
void myEndElement(int element)
Called when a closing tag occurs.
Definition: GUITriggeredRerouter.cpp:258
MID_MANIP
Open the object's manipulator.
Definition: GUIAppEnum.h:412
GUIEdge.h
MSEdgeVector
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:74
MSRoute.h
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
GUITriggeredRerouter::getParameterWindow
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Definition: GUITriggeredRerouter.cpp:320
MSEdge::getLanes
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
Definition: MSEdge.h:167
GUITriggeredRerouter::myShiftProbDistIndex
int myShiftProbDistIndex
Definition: GUITriggeredRerouter.h:296
GUITriggeredRerouter::GUIManip_TriggeredRerouter::MID_SHIFT_PROBS
Definition: GUITriggeredRerouter.h:251
GUITriggeredRerouter::GUITriggeredRerouterPopupMenu::onCmdOpenManip
long onCmdOpenManip(FXObject *, FXSelector, void *)
Called if the object's manipulator shall be shown.
Definition: GUITriggeredRerouter.cpp:223
SUMORTree::addAdditionalGLObject
void addAdditionalGLObject(GUIGlObject *o)
Adds an additional object (detector/shape/trigger) for visualisation.
Definition: SUMORTree.h:126
GUITriggeredRerouterPopupMenuMap
GUITriggeredRerouterPopupMenuMap[]
Definition: GUITriggeredRerouter.cpp:57
GUITriggeredRerouter::GUITriggeredRerouterEdge::myBoundary
Boundary myBoundary
The boundary of this rerouter.
Definition: GUITriggeredRerouter.h:218
MSTriggeredRerouter::myIntervals
std::vector< RerouteInterval > myIntervals
List of rerouting definition intervals.
Definition: MSTriggeredRerouter.h:217
config.h
GUIVisualizationSettings::addSize
GUIVisualizationSizeSettings addSize
Definition: GUIVisualizationSettings.h:589
GUITriggeredRerouter.h
Boundary::grow
Boundary & grow(double by)
extends the boundary by the given amount
Definition: Boundary.cpp:300
Command.h
SUMO_TAG_INTERVAL
an aggreagated-output interval
Definition: SUMOXMLDefinitions.h:159
MSLane.h
GUITriggeredRerouter::GUITriggeredRerouterEdge::GUITriggeredRerouterEdge
GUITriggeredRerouterEdge(GUIEdge *edge, GUITriggeredRerouter *parent, RerouterEdgeType edgeType, int distIndex=-1)
Definition: GUITriggeredRerouter.cpp:382
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
GUITriggeredRerouter::GUIManip_TriggeredRerouter
Definition: GUITriggeredRerouter.h:243
MSTriggeredRerouter::RerouteInterval::closed
MSEdgeVector closed
The list of closed edges.
Definition: MSTriggeredRerouter.h:99
GUITriggeredRerouter::GUITriggeredRerouterPopupMenu::GUITriggeredRerouterPopupMenu
GUITriggeredRerouterPopupMenu()
Definition: GUITriggeredRerouter.h:238
RandomDistributor::getOverallProb
double getOverallProb() const
Return the sum of the probabilites assigned to the members.
Definition: RandomDistributor.h:133
GLO_REROUTER_EDGE
a Rerouter
Definition: GUIGlObjectTypes.h:87
GUITriggeredRerouter::GUITriggeredRerouterEdge::~GUITriggeredRerouterEdge
virtual ~GUITriggeredRerouterEdge()
Definition: GUITriggeredRerouter.cpp:401
PositionVector.h
GUITriggeredRerouter::GUITriggeredRerouterEdge::onLeftBtnPress
void onLeftBtnPress(void *data)
notify object about left click
Definition: GUITriggeredRerouter.cpp:549
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
RandomDistributor::getVals
const std::vector< T > & getVals() const
Returns the members of the distribution.
Definition: RandomDistributor.h:151
MSVehicle
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:79