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);
141 BUTTON_INITIAL | BUTTON_DEFAULT | FRAME_RAISED | FRAME_THICK | LAYOUT_TOP | LAYOUT_LEFT | LAYOUT_CENTER_X, 0, 0, 0, 0, 30, 30, 4, 4);
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);
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++) {
274 const MSEdge* cand = route0->getEdges()[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()) {
350 gui->show(PLACEMENT_SCREEN);
369 for (
MSLane* lane : rrEdge->getEdge()->getLanes()) {
370 for (
const MSVehicle* veh : lane->getVehiclesSecure()) {
371 const_cast<MSVehicle*
>(veh)->addReminder(
this);
373 lane->releaseVehicles();
389 myEdgeType(edgeType),
390 myDistIndex(distIndex) {
391 const std::vector<MSLane*>& lanes = edge->
getLanes();
394 for (
const MSLane* lane : lanes) {
414 return myParent->getPopUpMenu(app, parent);
428 if (s.
scale * exaggeration >= 3) {
430 const double prob = myParent->getProbability();
435 if (ri !=
nullptr && prob > 0) {
438 const int noLanes = (int)myFGPositions.size();
439 for (
int j = 0; j < noLanes; ++j) {
441 double rot = myFGRotations[j];
443 glTranslated(pos.
x(), pos.
y(), 0);
444 glRotated(rot, 0, 0, 1);
445 glTranslated(0, -1.5, 0);
448 noPoints = (int)(9.0 + s.
scale / 10.0);
455 glColor3d(0.7, 0, 0);
457 glTranslated(0, 0, .1);
460 glTranslated(0, 0, .1);
462 glRotated(-90, 0, 0, 1);
463 glBegin(GL_TRIANGLES);
464 glVertex2d(0 - .3, -1.);
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.);
478 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
479 const Position& pos = myFGPositions[i];
480 double rot = myFGRotations[i];
481 const double w = myHalfWidths[i];
483 glTranslated(pos.
x(), pos.
y(), 0);
484 glRotated(rot, 0, 0, 1);
486 glScaled(exaggeration, exaggeration, 1);
487 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
489 glBegin(GL_TRIANGLES);
490 glColor3d(1, .8f, 0);
492 glVertex2d(0 - w, 0);
493 glVertex2d(0 - w, 6);
494 glVertex2d(0 + w, 6);
495 glVertex2d(0 + w, 0);
496 glVertex2d(0 - w, 0);
497 glVertex2d(0 + w, 6);
513 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
514 const Position& pos = myFGPositions[i];
515 double rot = myFGRotations[i];
516 const double w = myHalfWidths[i];
518 glTranslated(pos.
x(), pos.
y(), 0);
519 glRotated(rot, 0, 0, 1);
521 glScaled(exaggeration, exaggeration, 1);
522 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
524 glBegin(GL_TRIANGLES);
527 glVertex2d(0 - 0.0, 0);
528 glVertex2d(0 - w, 6);
529 glVertex2d(0 + w, 6);
530 glVertex2d(0 + 0.0, 0);
531 glVertex2d(0 + w, 6);
565 myParent->shiftProbs();
@ MID_MANIP
Open the object's manipulator.
@ GLO_REROUTER_EDGE
a Rerouter over edge
GUIIcon
An enumeration of icons used by the gui applications.
FXDEFMAP(GUITriggeredRerouter::GUIManip_TriggeredRerouter) GUIManip_TriggeredRerouterMap[]
GUITriggeredRerouterPopupMenuMap[]
std::vector< const MSEdge * > ConstMSEdgeVector
std::vector< MSEdge * > MSEdgeVector
std::shared_ptr< const MSRoute > ConstMSRoutePtr
@ 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 pushName(unsigned int name)
push Name
static void drawFilledCircle(const double widradiusth, const int steps=8)
Draws a filled circle around (0,0)
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)
static FXButton * buildFXButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXIcon *ic, FXObject *tgt, FXSelector sel, FXuint opts=BUTTON_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
build button
A road/street connecting two junctions (gui-version)
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.
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, const GUIMainWindow &app) const
Builds an entry which allows to copy the cursor position if geo projection is used,...
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 associated 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()
shift route probabilities
GUIManipulator * openManipulator(GUIMainWindow &app, GUISUMOAbstractView &parent)
void myEndElement(int element)
Called when a closing tag occurs.
~GUITriggeredRerouter()
Destructor.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
double getExaggeration(const GUIVisualizationSettings &s) const
return exaggeration associated with this GLObject
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
GUITriggeredRerouter(const std::string &id, const MSEdgeVector &edges, double prob, bool off, bool optional, SUMOTime timeThreshold, const std::string &vTypes, const Position &pos, SUMORTree &rtree)
Constructor.
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.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Reroutes traffic objects 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, SUMOTrafficObject &obj) const
Returns the rerouting definition valid for the given time and object, nullptr 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
Represents a generic random distribution.
double getOverallProb() const
Return the sum of the probabilites assigned to the members.
const std::vector< T > & getVals() const
Returns the members of the distribution.
const std::vector< double > & getProbs() const
Returns the probabilities assigned to 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< ConstMSRoutePtr > routeProbs
The distributions of new routes to use.
MSEdgeVector closed
The list of closed edges.