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) {
398 const std::vector<MSLane*>& lanes = edge->
getLanes();
400 for (
const MSLane* lane : lanes) {
445 return myParent->getPopUpMenu(app, parent);
459 if (s.
scale * exaggeration >= 3) {
461 const double prob = myParent->getProbability();
466 if (ri !=
nullptr && prob > 0) {
468 const auto& closedEdges = ri->
getClosed();
469 if (closedEdges.find(myEdge) != closedEdges.end()) {
470 const int noLanes = (int)myFGPositions.size();
471 for (
int j = 0; j < noLanes; ++j) {
473 double rot = myFGRotations[j];
475 glTranslated(pos.
x(), pos.
y(), 0);
476 glRotated(rot, 0, 0, 1);
477 glTranslated(0, -1.5, 0);
480 noPoints = (int)(9.0 + s.
scale / 10.0);
487 glColor3d(0.7, 0, 0);
489 glTranslated(0, 0, .1);
492 glTranslated(0, 0, .1);
494 glRotated(-90, 0, 0, 1);
495 glBegin(GL_TRIANGLES);
496 glVertex2d(0 - .3, -1.);
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.);
510 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
511 const Position& pos = myFGPositions[i];
512 double rot = myFGRotations[i];
513 const double w = myHalfWidths[i];
515 glTranslated(pos.
x(), pos.
y(), 0);
516 glRotated(rot, 0, 0, 1);
518 glTranslated(0, -6, 0);
520 glScaled(exaggeration, exaggeration, 1);
521 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
523 glBegin(GL_TRIANGLES);
524 glColor3d(1, .8f, 0);
526 glVertex2d(0 - w, 0);
527 glVertex2d(0 - w, 6);
528 glVertex2d(0 + w, 6);
529 glVertex2d(0 + w, 0);
530 glVertex2d(0 - w, 0);
531 glVertex2d(0 + w, 6);
547 for (
int i = 0; i < (int)myFGPositions.size(); ++i) {
548 const Position& pos = myFGPositions[i];
549 double rot = myFGRotations[i];
550 const double w = myHalfWidths[i];
552 glTranslated(pos.
x(), pos.
y(), 0);
553 glRotated(rot, 0, 0, 1);
555 glScaled(exaggeration, exaggeration, 1);
556 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
558 glBegin(GL_TRIANGLES);
561 glVertex2d(0 - 0.0, 0);
562 glVertex2d(0 - w, 6);
563 glVertex2d(0 + w, 6);
564 glVertex2d(0 + 0.0, 0);
565 glVertex2d(0 + w, 6);
602 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) override
notify object about left click
Boundary myBoundary
The boundary of this rerouter.
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
virtual ~GUITriggeredRerouterEdge()
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
std::vector< double > myHalfWidths
The sign half-widths.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own parameter window.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
double getExaggeration(const GUIVisualizationSettings &s) const override
return exaggeration associated with this GLObject
GUITriggeredRerouterEdge(GUIEdge *edge, GUITriggeredRerouter *parent, RerouterEdgeType edgeType, int distIndex=-1, const Position &pos=Position::INVALID, const double radius=std::numeric_limits< double >::max())
PosCont myFGPositions
The positions in full-geometry mode.
RotCont myFGRotations
The rotations in full-geometry mode.
Reroutes vehicles passing an edge One rerouter can be active on multiple edges. To reduce drawing loa...
double getExaggeration(const GUIVisualizationSettings &s) const override
return exaggeration associated with this GLObject
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
std::vector< GUITriggeredRerouterEdge * > myEdgeVisualizations
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
void shiftProbs()
shift route probabilities
void myEndElement(int element) override
Called when a closing tag occurs.
GUIManipulator * openManipulator(GUIMainWindow &app, GUISUMOAbstractView &parent)
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
~GUITriggeredRerouter()
Destructor.
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.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own parameter window.
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