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()) {
371 for (
const MSVehicle* veh : lane->getVehiclesSecure()) {
372 const_cast<MSVehicle*
>(veh)->addReminder(
this);
374 lane->releaseVehicles();
390 myEdgeType(edgeType),
391 myDistIndex(distIndex) {
392 const std::vector<MSLane*>& lanes = edge->
getLanes();
395 for (
const MSLane* lane : lanes) {
415 return myParent->getPopUpMenu(app, parent);
429 if (s.
scale * exaggeration >= 3) {
431 const double prob = myParent->getProbability();
436 if (ri !=
nullptr && prob > 0) {
439 const int noLanes = (int)myFGPositions.size();
440 for (
int j = 0; j < noLanes; ++j) {
442 double rot = myFGRotations[j];
444 glTranslated(pos.
x(), pos.
y(), 0);
445 glRotated(rot, 0, 0, 1);
446 glTranslated(0, -1.5, 0);
449 noPoints = (int)(9.0 + s.
scale / 10.0);
456 glColor3d(0.7, 0, 0);
458 glTranslated(0, 0, .1);
461 glTranslated(0, 0, .1);
463 glRotated(-90, 0, 0, 1);
464 glBegin(GL_TRIANGLES);
465 glVertex2d(0 - .3, -1.);
466 glVertex2d(0 - .3, 1.);
467 glVertex2d(0 + .3, 1.);
468 glVertex2d(0 + .3, -1.);
469 glVertex2d(0 - .3, -1.);
470 glVertex2d(0 + .3, 1.);
479 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
480 const Position& pos = myFGPositions[i];
481 double rot = myFGRotations[i];
482 const double w = myHalfWidths[i];
484 glTranslated(pos.
x(), pos.
y(), 0);
485 glRotated(rot, 0, 0, 1);
487 glScaled(exaggeration, exaggeration, 1);
488 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
490 glBegin(GL_TRIANGLES);
491 glColor3d(1, .8f, 0);
493 glVertex2d(0 - w, 0);
494 glVertex2d(0 - w, 6);
495 glVertex2d(0 + w, 6);
496 glVertex2d(0 + w, 0);
497 glVertex2d(0 - w, 0);
498 glVertex2d(0 + w, 6);
514 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
515 const Position& pos = myFGPositions[i];
516 double rot = myFGRotations[i];
517 const double w = myHalfWidths[i];
519 glTranslated(pos.
x(), pos.
y(), 0);
520 glRotated(rot, 0, 0, 1);
522 glScaled(exaggeration, exaggeration, 1);
523 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
525 glBegin(GL_TRIANGLES);
528 glVertex2d(0 - 0.0, 0);
529 glVertex2d(0 - w, 6);
530 glVertex2d(0 + w, 6);
531 glVertex2d(0 + 0.0, 0);
532 glVertex2d(0 + w, 6);
566 myParent->shiftProbs();
@ MID_MANIP
Open the object's manipulator.
@ GLO_REROUTER_EDGE
a Rerouter over edge
FXDEFMAP(GUITriggeredRerouter::GUIManip_TriggeredRerouter) GUIManip_TriggeredRerouterMap[]
GUITriggeredRerouterPopupMenuMap[]
std::vector< const MSEdge * > ConstMSEdgeVector
std::vector< MSEdge * > MSEdgeVector
@ SVC_PEDESTRIAN
pedestrian
@ 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 pushName(unsigned int name)
push Name
static void popMatrix()
pop matrix
static void popName()
pop Name
static void pushMatrix()
push matrix
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()
std::vector< double > myHalfWidths
The sign half-widths.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
PosCont myFGPositions
The positions in full-geometry mode.
double getExaggeration(const GUIVisualizationSettings &s) const
return exaggeration asociated with this GLObject
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.
double getExaggeration(const GUIVisualizationSettings &s) const
return exaggeration asociated with this GLObject
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.
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position 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, const double exaggeration=1)
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.