90 myChosenValue(0), myChosenTarget(myChosenValue,
nullptr, MID_OPTION),
91 myUsageProbability(o.getProbability()), myUsageProbabilityTarget(myUsageProbability),
93 myChosenTarget.setTarget(
this);
95 new FXVerticalFrame(
this, LAYOUT_FILL_X | LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0);
97 FXGroupBox* gp =
new FXGroupBox(f1,
"Change Trigger Probability",
98 GROUPBOX_TITLE_LEFT | FRAME_SUNKEN | FRAME_RIDGE,
99 0, 0, 0, 0, 4, 4, 1, 1, 2, 0);
102 FXHorizontalFrame* gf1 =
103 new FXHorizontalFrame(gp, LAYOUT_TOP | LAYOUT_LEFT, 0, 0, 0, 0, 10, 10, 5, 5);
104 new FXRadioButton(gf1,
"Default", &myChosenTarget, FXDataTarget::ID_OPTION + 0,
105 ICON_BEFORE_TEXT | LAYOUT_SIDE_TOP,
106 0, 0, 0, 0, 2, 2, 0, 0);
110 FXHorizontalFrame* gf12 =
111 new FXHorizontalFrame(gp, LAYOUT_TOP | LAYOUT_LEFT, 0, 0, 0, 0, 10, 10, 5, 5);
112 new FXRadioButton(gf12,
"User Given: ", &myChosenTarget, FXDataTarget::ID_OPTION + 1,
113 ICON_BEFORE_TEXT | LAYOUT_SIDE_TOP | LAYOUT_CENTER_Y,
114 0, 0, 0, 0, 2, 2, 0, 0);
115 myUsageProbabilityDial =
116 new FXRealSpinner(gf12, 10,
this, MID_USER_DEF,
117 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK);
120 myUsageProbabilityDial->setIncrement(.1);
121 myUsageProbabilityDial->setRange(0, 1);
122 myUsageProbabilityDial->setValue(myObject->getUserProbability());
126 FXHorizontalFrame* gf13 =
127 new FXHorizontalFrame(gp, LAYOUT_TOP | LAYOUT_LEFT, 0, 0, 0, 0, 10, 10, 5, 5);
128 new FXRadioButton(gf13,
"Off", &myChosenTarget, FXDataTarget::ID_OPTION + 2,
129 ICON_BEFORE_TEXT | LAYOUT_SIDE_TOP,
130 0, 0, 0, 0, 2, 2, 0, 0);
132 myChosenValue = myObject->inUserMode()
133 ? myObject->getUserProbability() > 0
137 FXGroupBox* gp2 =
new FXGroupBox(f1,
"Change Route Probability",
138 GROUPBOX_TITLE_LEFT | FRAME_SUNKEN | FRAME_RIDGE,
139 0, 0, 0, 0, 4, 4, 1, 1, 2, 0);
140 new FXButton(gp2,
"Shift",
nullptr,
this, MID_SHIFT_PROBS,
141 BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
143 new FXButton(f1,
"Close",
nullptr,
this, MID_CLOSE,
144 BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
161 myUsageProbability = (double)(myUsageProbabilityDial->getValue());
164 myParent->updateChildren();
172 myChosenValue != 1 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
174 myParent->updateChildren();
182 switch (myChosenValue) {
196 myParent->updateChildren();
203 myParent->updateChildren();
226 *myApplication, *myParent);
235 const std::string& aXMLFilename,
bool off,
SUMOTime timeThreshold,
const std::string& vTypes,
SUMORTree& rtree) :
240 for (MSEdgeVector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
262 for (MSEdgeVector::const_iterator it = ri.
closed.begin(); it != ri.
closed.end(); ++it) {
271 const MSEdge* lastEdge =
nullptr;
273 for (
int i = 0; i < (int)route0->
getEdges().size(); i++) {
276 const MSEdge* nextEdge = i < (int)route->getEdges().size() ? route->getEdges()[i] :
nullptr;
277 if (nextEdge != cand) {
281 if (cand !=
nullptr) {
288 if (lastEdge !=
nullptr) {
291 if (nextIndex < (
int)edges.size()) {
366 for (
const MSVehicle* veh : lane->getVehiclesSecure()) {
367 const_cast<MSVehicle*
>(veh)->addReminder(
this);
369 lane->releaseVehicles();
385 myEdgeType(edgeType),
386 myDistIndex(distIndex) {
387 const std::vector<MSLane*>& lanes = edge->
getLanes();
390 for (std::vector<MSLane*>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
393 myFGPositions.push_back((*i)->geometryPositionAtOffset(pos));
406 return myParent->getPopUpMenu(app, parent);
420 if (s.
scale * exaggeration >= 3) {
422 const double prob = myParent->getProbability();
427 if (ri !=
nullptr && prob > 0) {
430 const int noLanes = (int)myFGPositions.size();
431 for (
int j = 0; j < noLanes; ++j) {
433 double rot = myFGRotations[j];
435 glTranslated(pos.
x(), pos.
y(), 0);
436 glRotated(rot, 0, 0, 1);
437 glTranslated(0, -1.5, 0);
440 noPoints = (int)(9.0 + s.
scale / 10.0);
447 glColor3d(0.7, 0, 0);
449 glTranslated(0, 0, .1);
452 glTranslated(0, 0, .1);
454 glRotated(-90, 0, 0, 1);
455 glBegin(GL_TRIANGLES);
456 glVertex2d(0 - .3, -1.);
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.);
470 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
471 const Position& pos = myFGPositions[i];
472 double rot = myFGRotations[i];
474 glTranslated(pos.
x(), pos.
y(), 0);
475 glRotated(rot, 0, 0, 1);
477 glScaled(exaggeration, exaggeration, 1);
478 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
480 glBegin(GL_TRIANGLES);
481 glColor3d(1, .8f, 0);
483 glVertex2d(0 - 1.4, 0);
484 glVertex2d(0 - 1.4, 6);
485 glVertex2d(0 + 1.4, 6);
486 glVertex2d(0 + 1.4, 0);
487 glVertex2d(0 - 1.4, 0);
488 glVertex2d(0 + 1.4, 6);
504 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
505 const Position& pos = myFGPositions[i];
506 double rot = myFGRotations[i];
508 glTranslated(pos.
x(), pos.
y(), 0);
509 glRotated(rot, 0, 0, 1);
511 glScaled(exaggeration, exaggeration, 1);
512 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
514 glBegin(GL_TRIANGLES);
517 glVertex2d(0 - 0.0, 0);
518 glVertex2d(0 - 1.4, 6);
519 glVertex2d(0 + 1.4, 6);
520 glVertex2d(0 + 0.0, 0);
521 glVertex2d(0 + 1.4, 6);
549 myParent->shiftProbs();
@ MID_MANIP
Open the object's manipulator.
@ GLO_REROUTER_EDGE
a Rerouter
FXDEFMAP(GUITriggeredRerouter::GUIManip_TriggeredRerouter) GUIManip_TriggeredRerouterMap[]
GUITriggeredRerouterPopupMenuMap[]
std::vector< const MSEdge * > ConstMSEdgeVector
std::vector< MSEdge * > MSEdgeVector
@ SUMO_TAG_INTERVAL
an aggreagated-output interval
#define UNUSED_PARAMETER(x)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Boundary & grow(double by)
extends the boundary by the given amount
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
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, const int align=0, double width=-1)
A road/street connecting two junctions (gui-version)
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used,...
void buildShowManipulatorPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the manipulator window.
const std::string & getFullName() const
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
GUIGlID getGlID() const
Returns the numerical id of the object.
A MSNet extended by some values for usage within the gui.
A window containing a gl-object's parameter.
long onUpdUserDef(FXObject *, FXSelector, void *)
virtual ~GUIManip_TriggeredRerouter()
Destructor.
long onCmdClose(FXObject *, FXSelector, void *)
long onCmdChangeOption(FXObject *, FXSelector, void *)
long onCmdShiftProbs(FXObject *, FXSelector, void *)
long onCmdUserDef(FXObject *, FXSelector, void *)
void onLeftBtnPress(void *data)
notify object about left click
Boundary myBoundary
The boundary of this rerouter.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GUITriggeredRerouterEdge(GUIEdge *edge, GUITriggeredRerouter *parent, RerouterEdgeType edgeType, int distIndex=-1)
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
virtual ~GUITriggeredRerouterEdge()
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
PosCont myFGPositions
The positions in full-geometry mode.
RotCont myFGRotations
The rotations in full-geometry mode.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Reroutes vehicles passing an edge One rerouter can be active on multiple edges. To reduce drawing loa...
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
std::vector< GUITriggeredRerouterEdge * > myEdgeVisualizations
void shiftProbs()
shit route probabilities
GUIManipulator * openManipulator(GUIMainWindow &app, GUISUMOAbstractView &parent)
void myEndElement(int element)
Called when a closing tag occurs.
~GUITriggeredRerouter()
Destructor.
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.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Boundary myBoundary
The boundary of this rerouter.
Stores the information about how to visualize structures.
GUIVisualizationSizeSettings addSize
double scale
information about a lane's width (temporary, used for a single view)
A road/street connecting two junctions.
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
Representation of a lane in the micro simulation.
MSEdge & getEdge() const
Returns the lane's edge.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
const ConstMSEdgeVector & getEdges() const
Reroutes vehicles passing an edge.
void setUserUsageProbability(double prob)
Sets the probability with which a vehicle is rerouted given by the user.
virtual void myEndElement(int element)
Called when a closing tag occurs.
const RerouteInterval * getCurrentReroute(SUMOTime time, SUMOVehicle &veh) const
Returns the rerouting definition valid for the given time and vehicle, 0 if none.
std::vector< RerouteInterval > myIntervals
List of rerouting definition intervals.
void setUserMode(bool val)
Sets whether the process is currently steered by the user.
Representation of a vehicle in the micro simulation.
A point in 2D or 3D with translation and scaling methods.
double x() const
Returns the x-position.
double y() const
Returns the y-position.
double length() const
Returns the length.
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
static const RGBColor BLACK
double getOverallProb() const
Return the sum of the probabilites assigned to the members.
const std::vector< double > & getProbs() const
Returns the probabilities assigned to the members of the distribution.
const std::vector< T > & getVals() const
Returns the members of the distribution.
A RT-tree for efficient storing of SUMO's GL-objects.
void addAdditionalGLObject(GUIGlObject *o)
Adds an additional object (detector/shape/trigger) for visualisation.
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
RandomDistributor< const MSRoute * > routeProbs
The distributions of new routes to use.
MSEdgeVector closed
The list of closed edges.