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();
224 *myApplication, *myParent);
233 bool off,
bool optional,
SUMOTime timeThreshold,
const std::string& vTypes,
const Position& pos,
const double radius,
SUMORTree& rtree) :
238 for (MSEdgeVector::const_iterator it = edges.begin(); it != edges.end(); ++it) {
273 const MSEdge* lastEdge =
nullptr;
275 for (
int i = 0; i < (int)route0->getEdges().size(); i++) {
276 const MSEdge* cand = route0->getEdges()[i];
278 const MSEdge* nextEdge = i < (int)route->getEdges().size() ? route->getEdges()[i] :
nullptr;
279 if (nextEdge != cand) {
283 if (cand !=
nullptr) {
290 if (lastEdge !=
nullptr) {
294 if (nextIndex < (
int)edges.size()) {
301 if (prob > maxProb) {
357 gui->show(PLACEMENT_SCREEN);
375 for (
MSLane* lane : rrEdge->getEdge()->getLanes()) {
376 for (
const MSVehicle* veh : lane->getVehiclesSecure()) {
377 const_cast<MSVehicle*
>(veh)->addReminder(
this);
379 lane->releaseVehicles();
392 const Position& pos,
const double radius) :
396 myEdgeType(edgeType),
397 myDistIndex(distIndex) {
399 const std::vector<MSLane*>& lanes = edge->
getLanes();
401 for (
const MSLane* lane : lanes) {
446 return myParent->getPopUpMenu(app, parent);
460 if (s.
scale * exaggeration >= 3) {
462 const double prob = myParent->getProbability();
467 if (ri !=
nullptr && prob > 0) {
469 const auto& closedEdges = ri->
getClosed();
470 if (closedEdges.find(myEdge) != closedEdges.end()) {
471 const int noLanes = (int)myFGPositions.size();
472 for (
int j = 0; j < noLanes; ++j) {
474 double rot = myFGRotations[j];
476 glTranslated(pos.
x(), pos.
y(), 0);
477 glRotated(rot, 0, 0, 1);
478 glTranslated(0, -1.5, 0);
481 noPoints = (int)(9.0 + s.
scale / 10.0);
488 glColor3d(0.7, 0, 0);
490 glTranslated(0, 0, .1);
493 glTranslated(0, 0, .1);
495 glRotated(-90, 0, 0, 1);
496 glBegin(GL_TRIANGLES);
497 glVertex2d(0 - .3, -1.);
498 glVertex2d(0 - .3, 1.);
499 glVertex2d(0 + .3, 1.);
500 glVertex2d(0 + .3, -1.);
501 glVertex2d(0 - .3, -1.);
502 glVertex2d(0 + .3, 1.);
511 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
512 const Position& pos = myFGPositions[i];
513 double rot = myFGRotations[i];
514 const double w = myHalfWidths[i];
516 glTranslated(pos.
x(), pos.
y(), 0);
517 glRotated(rot, 0, 0, 1);
519 glTranslated(0, -6, 0);
521 glScaled(exaggeration, exaggeration, 1);
522 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
524 glBegin(GL_TRIANGLES);
525 glColor3d(1, .8f, 0);
527 glVertex2d(0 - w, 0);
528 glVertex2d(0 - w, 6);
529 glVertex2d(0 + w, 6);
530 glVertex2d(0 + w, 0);
531 glVertex2d(0 - w, 0);
532 glVertex2d(0 + w, 6);
548 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
549 const Position& pos = myFGPositions[i];
550 double rot = myFGRotations[i];
551 const double w = myHalfWidths[i];
553 glTranslated(pos.
x(), pos.
y(), 0);
554 glRotated(rot, 0, 0, 1);
556 glScaled(exaggeration, exaggeration, 1);
557 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
559 glBegin(GL_TRIANGLES);
562 glVertex2d(0 - 0.0, 0);
563 glVertex2d(0 - w, 6);
564 glVertex2d(0 + w, 6);
565 glVertex2d(0 + 0.0, 0);
566 glVertex2d(0 + w, 6);
603 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
const double SUMO_const_halfLaneWidth
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 void drawTextSettings(const GUIVisualizationTextSettings &settings, const std::string &text, const Position &pos, const double scale, const double angle=0, const double layer=2048, const int align=0)
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 buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, const GUIMainWindow &app, bool addSeparator=true) const
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.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
virtual ~GUITriggeredRerouterEdge()
std::vector< double > myHalfWidths
The sign half-widths.
GUITriggeredRerouterEdge(GUIEdge *edge, GUITriggeredRerouter *parent, RerouterEdgeType edgeType, int distIndex=-1, const Position &pos=Position::INVALID, const double radius=std::numeric_limits< double >::max())
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
GUITriggeredRerouter(const std::string &id, const MSEdgeVector &edges, double prob, bool off, bool optional, SUMOTime timeThreshold, const std::string &vTypes, const Position &pos, const double radius, SUMORTree &rtree)
Constructor.
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.
GUIVisualizationTextSettings addName
GUIVisualizationSizeSettings addSize
double scale
information about a lane's width (temporary, used for a single view)
double angle
The current view rotation angle.
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.
static const Position INVALID
used to indicate that a position is valid
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.
#define UNUSED_PARAMETER(x)
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
bool show(const GUIGlObject *o) const
whether to show the text
RandomDistributor< ConstMSRoutePtr > routeProbs
The distributions of new routes to use.
Prohibitions getClosed() const