53 if (tagProperty->planConsecutiveEdges()) {
55 }
else if (tagProperty->planRoute()) {
57 }
else if (tagProperty->planEdge()) {
59 }
else if (tagProperty->planBusStop()) {
61 }
else if (tagProperty->planTrainStop()) {
63 }
else if (tagProperty->planContainerStop()) {
65 }
else if (tagProperty->planChargingStation()) {
67 }
else if (tagProperty->planParkingArea()) {
73 if (tagProperty->planFromEdge()) {
75 }
else if (tagProperty->planFromTAZ()) {
77 }
else if (tagProperty->planFromJunction()) {
83 if (tagProperty->planToEdge()) {
85 }
else if (tagProperty->planToJunction()) {
87 }
else if (tagProperty->planToTAZ()) {
89 }
else if (tagProperty->planToBusStop()) {
91 }
else if (tagProperty->planToTrainStop()) {
93 }
else if (tagProperty->planToContainerStop()) {
95 }
else if (tagProperty->planToChargingStation()) {
97 }
else if (tagProperty->planToParkingArea()) {
120 if (tagProperty->planFromStoppingPlace()
123 const std::string stopID =
myPlanElement->getParentStoppingPlaces().front()->getID();
124 if (tagProperty->planFromBusStop()) {
126 }
else if (tagProperty->planFromTrainStop()) {
128 }
else if (tagProperty->planFromContainerStop()) {
130 }
else if (tagProperty->planFromChargingStation()) {
132 }
else if (tagProperty->planFromParkingArea()) {
159 if (tagProperty->planRoute()) {
161 return myPlanElement->getParentDemandElements().at(1)->getParentEdges().front()->getLaneByAllowedVClass(vClass);
162 }
else if (tagProperty->planConsecutiveEdges() || tagProperty->planFromEdge() || tagProperty->planEdge()) {
164 return myPlanElement->getParentEdges().front()->getLaneByAllowedVClass(vClass);
165 }
else if (tagProperty->planStoppingPlace() || tagProperty->planFromStoppingPlace() || tagProperty->planToStoppingPlace()) {
167 return myPlanElement->getParentStoppingPlaces().front()->getParentLanes().front();
182 if (tagProperty->planRoute()) {
184 return myPlanElement->getParentDemandElements().at(1)->getParentEdges().back()->getLaneByAllowedVClass(vClass);
185 }
else if (tagProperty->planConsecutiveEdges() || tagProperty->planToEdge() || tagProperty->planEdge()) {
187 return myPlanElement->getParentEdges().back()->getLaneByAllowedVClass(vClass);
188 }
else if (tagProperty->planStoppingPlace() || tagProperty->planFromStoppingPlace() || tagProperty->planToStoppingPlace()) {
190 return myPlanElement->getParentStoppingPlaces().back()->getParentLanes().front()->getParentEdge()->getLaneByAllowedVClass(vClass);
205 auto pathManager =
myPlanElement->getNet()->getDemandPathManager();
207 if (tagProperty->planRoute()) {
209 pathManager->calculateConsecutivePathEdges(
myPlanElement, vClass,
myPlanElement->getParentDemandElements().at(1)->getParentEdges());
210 }
else if (tagProperty->planConsecutiveEdges()) {
216 }
else if (
myPlanElement->myTagProperty->planFromJunction()) {
220 lastLane =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().back();
221 }
else if (
myPlanElement->myTagProperty->planToStoppingPlace()) {
222 lastLane =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().front();
224 lastLane =
myPlanElement->getParentEdges().back()->getLaneByAllowedVClass(vClass);
234 firstLane =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().back();
235 }
else if (
myPlanElement->myTagProperty->planFromStoppingPlace()) {
236 firstLane =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().front();
238 firstLane =
myPlanElement->getParentEdges().front()->getLaneByAllowedVClass(vClass);
248 firstLane =
myPlanElement->getParentEdges().front()->getLaneByAllowedVClass(vClass);
249 }
else if (
myPlanElement->myTagProperty->planStoppingPlace()) {
250 firstLane =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().back();
251 }
else if (
myPlanElement->myTagProperty->planFromStoppingPlace()) {
252 firstLane =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().front();
257 lastLane =
myPlanElement->getParentEdges().back()->getLaneByAllowedVClass(vClass);
258 }
else if (
myPlanElement->myTagProperty->planStoppingPlace()) {
259 lastLane =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().back();
260 }
else if (
myPlanElement->myTagProperty->planToStoppingPlace()) {
261 lastLane =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().front();
263 if (firstLane && lastLane) {
264 pathManager->calculatePath(
myPlanElement, vClass, firstLane, lastLane);
265 }
else if (firstLane) {
266 pathManager->calculateConsecutivePathLanes(
myPlanElement, {firstLane});
267 }
else if (lastLane) {
268 pathManager->calculateConsecutivePathLanes(
myPlanElement, {lastLane});
281 if (tagProperty->planFromTAZ() || tagProperty->planToTAZ()) {
286 if (tagProperty->planFromEdge()) {
288 firstPos =
myPlanElement->getFirstPathLane()->getLaneShape().back();
289 }
else if (tagProperty->planFromJunction()) {
291 firstPos =
myPlanElement->getParentJunctions().front()->getPositionInView();
292 }
else if (tagProperty->planFromStoppingPlace()) {
294 firstPos =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().front()->getLaneShape().back();
295 }
else if (tagProperty->planFromTAZ()) {
304 if (tagProperty->planToEdge()) {
306 lastPos =
myPlanElement->getLastPathLane()->getLaneShape().back();
307 }
else if (tagProperty->planToJunction()) {
309 lastPos =
myPlanElement->getParentJunctions().back()->getPositionInView();
310 }
else if (tagProperty->planToStoppingPlace()) {
312 lastPos =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().front()->getLaneShape().front();
313 }
else if (tagProperty->planToTAZ()) {
323 myPlanElement->myDemandElementGeometry.updateGeometry({firstPos, lastPos});
331 for (
const auto& demandElement :
myPlanElement->getChildDemandElements()) {
332 demandElement->updateGeometry();
359 for (
const auto& junction :
myPlanElement->getParentJunctions()) {
363 for (
const auto& additional :
myPlanElement->getParentAdditionals()) {
364 if (additional->getTagProperty()->getTag() ==
SUMO_TAG_TAZ) {
390 if (tagProperty->planRoute()) {
392 return myPlanElement->getParentDemandElements().at(1)->getPositionInView();
393 }
else if (tagProperty->isPlanStop()) {
394 return myPlanElement->getDemandElementGeometry().getShape().front();
395 }
else if (tagProperty->planFromEdge() || tagProperty->planConsecutiveEdges() || tagProperty->planEdge()) {
397 return myPlanElement->getParentEdges().front()->getPositionInView();
398 }
else if (tagProperty->planFromJunction()) {
400 return myPlanElement->getParentJunctions().front()->getPositionInView();
401 }
else if (tagProperty->planStoppingPlace() || tagProperty->planFromStoppingPlace()) {
403 return myPlanElement->getParentStoppingPlaces().front()->getPositionInView();
404 }
else if (tagProperty->planFromTAZ()) {
424 return myPlanElement->getParentDemandElements().at(0)->getID();
440 return myPlanElement->getParentDemandElements().at(1)->getID();
451 return myPlanElement->getParentStoppingPlaces().back()->getID();
464 return myPlanElement->getParentStoppingPlaces().front()->getID();
483 const auto planParent =
myPlanElement->getParentDemandElements().at(0);
487 if (tagProperty->planStoppingPlace()) {
489 const auto factor =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().front()->getLengthGeometryFactor();
491 }
else if (tagProperty->planFromStoppingPlace()) {
493 const auto factor =
myPlanElement->getParentStoppingPlaces().front()->getParentLanes().front()->getLengthGeometryFactor();
495 }
else if (tagProperty->planFromTAZ()) {
497 }
else if (tagProperty->planFromJunction()) {
501 const auto previousPlan = planParent->getPreviousChildDemandElement(
myPlanElement);
507 if (posOverLane == -1) {
521 if (tagProperty->planStoppingPlace()) {
523 const auto factor =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().front()->getLengthGeometryFactor();
525 }
else if (tagProperty->planToStoppingPlace()) {
527 const auto factor =
myPlanElement->getParentStoppingPlaces().back()->getParentLanes().front()->getLengthGeometryFactor();
529 }
else if (tagProperty->planToJunction() || tagProperty->planToTAZ()) {
532 }
else if ((tagProperty->isPlanStopPerson() || tagProperty->isPlanStopContainer()) && tagProperty->planEdge()) {
537 const auto nextPlan = planParent->getNextChildDemandElement(
myPlanElement);
538 if (nextPlan && (nextPlan->getTagProperty()->isPlanStopPerson() ||
539 nextPlan->getTagProperty()->isPlanStopContainer()) &&
540 nextPlan->getTagProperty()->planEdge()) {
564 const auto planParent =
myPlanElement->getParentDemandElements().at(0);
569 const auto previousPlan = planParent->getPreviousChildDemandElement(
myPlanElement);
570 if (previousPlan && previousPlan->getTagProperty()->isPlanStop() && previousPlan->getTagProperty()->planStoppingPlace()) {
571 return previousPlan->getParentStoppingPlaces().front()->getAdditionalGeometry().getShape().back();
574 if (tagProperty->planStoppingPlace()) {
575 return myPlanElement->getParentStoppingPlaces().front()->getAdditionalGeometry().getShape().front();
576 }
else if (tagProperty->planFromStoppingPlace()) {
577 return myPlanElement->getParentStoppingPlaces().front()->getAdditionalGeometry().getShape().back();
578 }
else if (tagProperty->planFromJunction()) {
580 return myPlanElement->getParentJunctions().front()->getPositionInView();
581 }
else if (tagProperty->planFromTAZ()) {
587 }
else if (tagProperty->planConsecutiveEdges() || tagProperty->planRoute() || tagProperty->planFromEdge()) {
591 if (firstLane ==
nullptr) {
595 double lanePosition = 0;
605 const auto& laneShape = firstLane->getLaneShape();
607 if (lanePosition <= 0) {
608 return laneShape.front();
609 }
else if (lanePosition >= laneShape.length2D()) {
610 return laneShape.back();
612 return laneShape.positionAtOffset2D(lanePosition);
620 if (tagProperty->planToJunction()) {
622 return myPlanElement->getParentJunctions().back()->getPositionInView();
623 }
else if (tagProperty->planStoppingPlace()) {
625 return myPlanElement->getParentStoppingPlaces().back()->getAdditionalGeometry().getShape().back();
626 }
else if (tagProperty->planToStoppingPlace()) {
628 return myPlanElement->getParentStoppingPlaces().back()->getAdditionalGeometry().getShape().front();
629 }
else if (tagProperty->planToTAZ()) {
636 }
else if (tagProperty->planConsecutiveEdges() || tagProperty->planRoute() || tagProperty->planFromEdge()) {
638 const auto nextPlan = planParent->getNextChildDemandElement(
myPlanElement);
640 const auto lastLane = nextPlan ? nextPlan->getFirstPathLane() :
myPlanElement->getLastPathLane();
642 if (lastLane ==
nullptr) {
646 const auto& laneShape = lastLane->getLaneShape();
648 if (nextPlan && nextPlan->getTagProperty()->isPlanStop()) {
651 return laneShape.front();
653 return laneShape.back();
747 bool recompute =
false;
799 while (tagProperty->getTagStr().at(index) !=
':') {
800 result.push_back(tagProperty->getTagStr().at(index));
805 if (tagProperty->planConsecutiveEdges()) {
808 }
else if (tagProperty->planRoute()) {
810 return result +
myPlanElement->getParentDemandElements().at(1)->getID();
811 }
else if (tagProperty->planEdge()) {
813 return result +
myPlanElement->getParentEdges().front()->getID();
814 }
else if (tagProperty->planStoppingPlace()) {
816 return myPlanElement->getParentStoppingPlaces().front()->getID();
819 if (tagProperty->planFromStoppingPlace()) {
820 result +=
myPlanElement->getParentStoppingPlaces().front()->getID();
823 if (tagProperty->planFromTAZ()) {
827 if (tagProperty->planFromJunction()) {
828 result +=
myPlanElement->getParentJunctions().front()->getID();
831 if (tagProperty->planFromEdge()) {
837 if (tagProperty->planToStoppingPlace()) {
838 result +=
myPlanElement->getParentStoppingPlaces().back()->getID();
841 if (tagProperty->planToTAZ()) {
845 if (tagProperty->planToJunction()) {
846 result +=
myPlanElement->getParentJunctions().back()->getID();
849 if (tagProperty->planToEdge()) {
860 const auto& inspectedElements = viewNet->getInspectedElements();
862 if (viewNet->getEditModes().isCurrentSupermodeNetwork() &&
863 viewNet->getNetworkViewOptions().showDemandElements() &&
864 viewNet->getDemandViewOptions().showAllPersonPlans()) {
867 }
else if (viewNet->getEditModes().isCurrentSupermodeDemand() &&
868 viewNet->getDemandViewOptions().showAllPersonPlans()) {
871 }
else if (viewNet->getEditModes().isCurrentSupermodeDemand() &&
myPlanElement->isAttributeCarrierSelected()) {
874 }
else if (inspectedElements.isACInspected(
myPlanElement->getParentDemandElements().front())) {
877 }
else if (viewNet->getDemandViewOptions().getLockedPerson() ==
myPlanElement->getParentDemandElements().front()) {
882 if (inspectedElements.getFirstAC() && inspectedElements.getFirstAC()->getTagProperty()->isPlanPerson() &&
897 const auto& inspectedElements = viewNet->getInspectedElements();
899 if (viewNet->getEditModes().isCurrentSupermodeNetwork() &&
900 viewNet->getNetworkViewOptions().showDemandElements() &&
901 viewNet->getDemandViewOptions().showAllContainerPlans()) {
904 }
else if (viewNet->getEditModes().isCurrentSupermodeDemand() &&
905 viewNet->getDemandViewOptions().showAllContainerPlans()) {
908 }
else if (viewNet->getEditModes().isCurrentSupermodeDemand() &&
myPlanElement->isAttributeCarrierSelected()) {
911 }
else if (inspectedElements.isACInspected(
myPlanElement->getParentDemandElements().front())) {
914 }
else if (viewNet->getDemandViewOptions().getLockedContainer() ==
myPlanElement->getParentDemandElements().front()) {
919 if (inspectedElements.getFirstAC() && inspectedElements.getFirstAC()->getTagProperty()->isPlanContainer() &&
934 const auto& inspectedElements = viewNet->getInspectedElements();
942 if (drawPlan && (planGeometry.getShape().size() > 0)) {
953 if (tagProperty->isPlanRide()) {
955 }
else if (tagProperty->isPlanPersonTrip()) {
981 1,
true,
true, 0,
nullptr,
nullptr);
994 const double offsetFront,
const double planWidth,
const RGBColor& planColor,
const RGBColor& planSelectedColor)
const {
996 const auto& inspectedElements = viewNet->getInspectedElements();
1002 if (drawPlan && segment->
getLane() &&
myPlanElement->getNet()->getDemandPathManager()->getPathDraw()->checkDrawPathGeometry(s, segment->
getLane(), tagProperty->getTag(),
true)) {
1013 if (tagProperty->planFromTAZ()) {
1019 }
else if (tagProperty->planToTAZ()) {
1052 const double endPosRadius =
getEndPosRadius(s, segment, drawHalfWidth);
1089 segment->
getContour()->
calculateContourExtrudedShape(s, d,
myPlanElement, shape,
myPlanElement->getType(), drawingWidth, 1,
false,
false, 0,
1106 const double offsetFront,
const double planWidth,
const RGBColor& planColor,
const RGBColor& planSelectedColor)
const {
1108 const auto& inspectedElements = viewNet->getInspectedElements();
1114 if (drawPlan &&
myPlanElement->getNet()->getDemandPathManager()->getPathDraw()->checkDrawPathGeometry(s, segment, tagProperty->getTag(),
false)) {
1166 segment->
getContour()->
calculateContourExtrudedShape(s, d,
myPlanElement, shape,
myPlanElement->getType(), pathWidthDouble, 1,
false,
false, 0, segment, segment->
getJunction());
1193 const auto previousLastLane = previousPlan->getLastPathLane();
1197 if (previousLastLane && firstLane && (previousLastLane->getParentEdge() != firstLane->getParentEdge())) {
1206 const auto nextFirstLane = nextPlan->getFirstPathLane();
1210 if (nextFirstLane && lastLane && (nextFirstLane->getParentEdge() != lastLane->getParentEdge())) {
1226 const auto previousLastLane = previousPlan->getLastPathLane();
1230 if (previousLastLane && firstLane && (previousLastLane->getParentEdge() != firstLane->getParentEdge())) {
1231 return TLF(
"Edge '%' is not consecutive with edge '%'", previousLastLane->getParentEdge()->getID(), firstLane->getParentEdge()->getID());
1239 const auto nextFirstLane = nextPlan->getFirstPathLane();
1243 if (nextFirstLane && lastLane && (nextFirstLane->getParentEdge() != lastLane->getParentEdge())) {
1244 return TLF(
"Edge '%' is not consecutive with edge '%'", nextFirstLane->getParentEdge()->getID(), lastLane->getParentEdge()->getID());
1249 return "undefined problem";
1277 glTranslated(0, 0, 4);
1297 glTranslated(0, 0, 4);
1309 if (endPosRadius > 0) {
1314 glTranslated(geometryEndPos.
x(), geometryEndPos.
y(), 4);
@ GLO_TAZ
Traffic Assignment Zones (TAZs).
GUIViewObjectsHandler gViewObjectsHandler
const std::string invalid_return< std::string >::value
@ SUMO_TAG_TAZ
a traffic assignment zone
@ SUMO_TAG_STOP
stop for vehicles
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ GNE_ATTR_FROM_TRAINSTOP
@ GNE_ATTR_PLAN_GEOMETRY_STARTPOS
person/container geometry start position
@ SUMO_ATTR_FROM_JUNCTION
@ SUMO_ATTR_CONTAINER_STOP
@ GNE_ATTR_PARENT
parent of an additional element
@ GNE_ATTR_TAZ_CENTROID
TAZ Center (uses to return the TAZ centroid if center is not defined).
@ SUMO_ATTR_EDGES
the edges of a route
@ SUMO_ATTR_CHARGING_STATION
@ GNE_ATTR_FROM_PARKINGAREA
@ GNE_ATTR_FROM_CONTAINERSTOP
@ GNE_ATTR_FROM_CHARGINGSTATION
@ GNE_ATTR_PLAN_GEOMETRY_ENDPOS
person/container geometry end position
const double INVALID_DOUBLE
invalid double
const double SUMO_const_halfLaneWidth
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
static void drawTriangleAtEnd(const Position &p1, const Position &p2, double tLength, double tWidth, const double extraOffset=0)
Draws a triangle at the end of the given line.
static void popMatrix()
pop matrix
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
static void drawBoundary(const GUIVisualizationSettings &s, const Boundary &b)
Draw a boundary (used for debugging).
static void drawFilledCircleDetailled(const GUIVisualizationSettings::Detail d, const double radius)
Draws a filled circle around (0,0) depending of level of detail.
static void pushMatrix()
push matrix
static T parse(const std::string &string)
parses a value of type T from string (used for basic types: int, double, bool, etc....
static bool canParse(const std::string &string)
true if a value of type T can be parsed from string
static void changeAttribute(GNEAttributeCarrier *AC, SumoXMLAttr key, const std::string &value, GNEUndoList *undoList, const bool force=false)
change attribute
void calculateContourExtrudedShape(const GUIVisualizationSettings &s, const GUIVisualizationSettings::Detail d, const GUIGlObject *glObject, const PositionVector &shape, const double layer, const double extrusionWidth, const double scale, const bool closeFirstExtrem, const bool closeLastExtrem, const double offset, const GNESegment *segment, const GUIGlObject *boundaryParent, const bool addToSelectedObjects=true) const
calculate contour extruded (used in elements formed by a central shape)
bool drawDottedContours(const GUIVisualizationSettings &s, const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC, const double lineWidth, const bool addOffset) const
draw dotted contours (basics, select, delete, inspect...)
bool checkDrawPathContour(const GUIVisualizationSettings &s, const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC) const
drawing contour functions
Problem
enum class for demandElement problems
GNEDemandElement * getPreviousChildDemandElement(const GNEDemandElement *demandElement) const
get previous child demand element to the given demand element
Boundary myPlanBoundary
plan boundary
bool isPlanValid(SumoXMLAttr key, const std::string &value)
check if plan attribute is valid
Boundary getPlanCenteringBoundary() const
get plan centering boundary
Position getPlanPositionInView() const
Returns position of additional in view.
std::string getPersonPlanProblem() const
get plan problem
void computePlanPathElement()
compute plan pathElement
Position getPlanAttributePosition(SumoXMLAttr key) const
get plan attribute position
GNEDemandElement::Problem isPlanPersonValid() const
check if plan is valid
GNEContour myPlanContourEnd
variable used for draw contour end
GUIGLObjectPopupMenu * getPlanPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
GNEMoveElementPlan * myMoveElementPlan
move element plan
GNEDemandElementPlan(GNEDemandElement *planElement, const double departPosition, const double arrivalPosition)
constructor
std::string getPlanHierarchyName() const
get plan Hierarchy Name (Used in AC Hierarchy)
void drawEndPosition(const GUIVisualizationSettings &s, const GUIVisualizationSettings::Detail d, const double endPosRadius) const
draw to arrow
void drawFromArrow(const GUIVisualizationSettings &s, const GNELane *lane, const GNESegment *segment) const
draw from arrow
void writeLocationAttributes(OutputDevice &device) const
write plan element common attributes
bool checkDrawPersonPlan() const
check if person plan can be drawn
void replacePlanParent(const std::string &newParentID)
replace plan parent
GNEContour myPlanContour
variable used for draw central contour
double getEndPosRadius(const GUIVisualizationSettings &s, const GNESegment *segment, const bool drawHalfWidth) const
get end position radius
double getPlanAttributeDouble(SumoXMLAttr key) const
get plan attribute double
void setPlanAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
set plan attribute
double myArrivalPosition
arrival position (used in all plans over edges)
double myDepartPosition
depart position (used in tranships)
static const double myArrivalPositionDiameter
arrival position diameter
void drawToArrow(const GUIVisualizationSettings &s, const GNELane *lane, const GNESegment *segment) const
draw to arrow
std::string getPlanAttribute(SumoXMLAttr key) const
get plan attribute string
bool isPlanAttributeEnabled(SumoXMLAttr key) const
check if plan attribute is enabled
bool checkDrawContainerPlan() const
check if container plan can be drawn
GNELane * getLastPlanPathLane() const
get last plan path lane
GNEDemandElement * myPlanElement
pointer to plan element
void updatePlanCenteringBoundary(const bool updateGrid)
update plan centering boundary
void drawPlanGL(const bool drawPlan, const GUIVisualizationSettings &s, const RGBColor &planColor, const RGBColor &planSelectedColor) const
draw plan
void updatePlanGeometry()
update pre-computed geometry information
GNELane * getFirstPlanPathLane() const
get first plan path lane
void drawPlanLanePartial(const bool drawPlan, const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront, const double planWidth, const RGBColor &planColor, const RGBColor &planSelectedColor) const
draw plan partial lane
void drawPlanJunctionPartial(const bool drawPlan, const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront, const double planWidth, const RGBColor &planColor, const RGBColor &planSelectedColor) const
draw plan partial junction
void writeOriginStop(OutputDevice &device) const
write initial stop stage if plan starts at a stopping place
bool exist(const GNELane *toLane) const
check if exist a lane2lane geometry for the given toLane
const GUIGeometry & getLane2laneGeometry(const GNELane *toLane) const
get lane2lane geometry
const PositionVector & getLaneShape() const
get elements shape
const GNELane2laneConnection & getLane2laneConnections() const
get Lane2laneConnection struct
const GUIGeometry & getLaneGeometry() const
get lane geometry
GNEEdge * getParentEdge() const
get parent edge
const GNELane * getLane() const
get lane associated with this segment
const GNEJunction * getJunction() const
get junction associated with this segment
const GNELane * getNextLane() const
get next lane
const GNELane * getPreviousLane() const
get previous lane
bool isFirstSegment() const
check if segment is the first path's segment
GNEContour * getContour() const
bool isLastSegment() const
check if segment is the last path's segment
static FXMenuCommand * buildFXMenuCommand(FXComposite *p, const std::string &text, FXIcon *icon, FXObject *tgt, FXSelector sel, const bool disable=false)
build menu command
static void drawGeometry(const GUIVisualizationSettings::Detail d, const GUIGeometry &geometry, const double width, double offset=0)
draw geometry
static void drawChildLine(const GUIVisualizationSettings &s, const Position &child, const Position &parent, const RGBColor &color, const bool drawEntire, const double lineWidth)
draw line between child and parent (used in netedit)
const PositionVector & getShape() const
The shape of the additional element.
void updateGeometry(const PositionVector &shape)
update entire geometry
virtual void drawGL(const GUIVisualizationSettings &s) const =0
Draws the object.
Stores the information about how to visualize structures.
GUIVisualizationTextSettings addName
bool drawBoundaries
enable or disable draw boundaries
GUIVisualizationSizeSettings addSize
GUIVisualizationWidthSettings widthSettings
width settings
Detail getDetailLevel(const double exaggeration) const
return the detail level
double laneWidthExaggeration
The lane exaggeration (upscale thickness).
bool checkDrawContainer(Detail d, const bool selected) const
check if draw container
GUIVisualizationDottedContourSettings dottedContourSettings
dotted contour settings
double scale
information about a lane's width (temporary, used for a single view)
bool drawForViewObjectsHandler
whether drawing is performed for the purpose of selecting objects in view using ViewObjectsHandler
bool checkDrawPerson(Detail d, const bool selected) const
check if draw person
static const std::vector< SumoXMLTag > persons
persons namespace
static const std::vector< SumoXMLTag > containers
containers namespace
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
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.
static const RGBColor RED
named colors
static void drawLockIcon(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier *AC, GUIGlObjectType type, const Position position, const double exaggeration, const double size=0.5, const double offsetx=0, const double offsety=0)
draw lock icon
static const double segmentWidth
width of dotted contour segments
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
double walkWidth
width for walks
double personTripWidth
width for person trips
double rideWidth
width for rides