64 FXIMPLEMENT(
GNELane, FXDelegator, 0, 0)
79 myParentEdge(*static_cast<
GNEEdge*>(0)),
92 int noLinks = (int)cons.size();
102 for (
int i = noLinks; --i >= 0;) {
103 double x2 = x1 - (double)(w / 2.);
105 cons[lefthand ? noLinks - 1 - i : i]);
116 int noLinks = (int)cons.size();
126 for (
int i = noLinks; --i >= 0;) {
127 double x2 = x1 - (double)(w / 2.);
128 int linkNo = cons[lefthand ? noLinks - 1 - i : i].tlLinkIndex;
145 double rot = (double) atan2((end.
x() - f.
x()), (f.
y() - end.
y())) * (double) 180.0 / (
double)
M_PI;
150 glTranslated(end.
x(), end.
y(), 0);
151 glRotated(rot, 0, 0, 1);
156 for (
auto i : edgeCons) {
199 glTranslated(0, 5, 0);
201 glTranslated(0, -5, 0);
219 for (
auto it : connections) {
232 glColor3d(.4, .4, .4);
235 glColor3d(.7, .4, .4);
238 glColor3d(.7, .7, .7);
241 glColor3d(.7, .7, 1);
243 glColor3d(.75, .5, 0.25);
248 const Position& endPos = it.toEdge->getLaneShape(it.toLane)[0];
250 glVertex2d(startPos.
x(), startPos.
y());
251 glVertex2d(endPos.
x(), endPos.
y());
277 glGetFloatv(GL_CURRENT_COLOR, color);
281 }
else if (s.
scale * exaggeration < 1.) {
306 if (spreadSuperposed) {
311 const double halfInnerFeetWidth = halfGauge - 0.039 * exaggeration;
312 const double halfRailWidth = halfInnerFeetWidth + 0.15 * exaggeration;
313 const double halfCrossTieWidth = halfGauge * 1.81;
323 glColor3d(0.8, 0.8, 0.8);
324 glTranslated(0, 0, .1);
337 if (halfWidth != halfWidth2 && !spreadSuperposed) {
340 glTranslated(0, 0, -.1);
365 glColor3d(0.3, 0.3, 0.3);
379 double iconWidth = 1;
394 glRotated(-90, 0, 0, 1);
421 glTranslated(customShape.front().x(), customShape.front().y(),
GLO_JUNCTION + 0.01);
423 glTranslated(0, 0, 0.01);
434 glTranslated(customShape.back().x(), customShape.back().y(),
GLO_JUNCTION + 0.01);
436 glTranslated(0, 0, 0.01);
465 int e = (int)
getShape().size() - 1;
466 for (
int i = 0; i < e; ++i) {
471 const double length =
MIN2((
double)3, myShapeLengths[i] - t);
474 glVertex2d(-mw, -t - length);
475 glVertex2d(-mw2, -t - length);
476 glVertex2d(-mw2, -t);
502 new FXMenuCommand(ret,
"Copy edge parent name to clipboard", 0, ret,
MID_COPY_EDGE_NAME);
526 bool edgeHasSidewalk =
false;
527 bool edgeHasBikelane =
false;
528 bool edgeHasBuslane =
false;
529 bool edgeHasGreenVerge =
false;
530 bool differentLaneShapes =
false;
533 for (
auto i : selectedLanes) {
535 edgeHasSidewalk =
true;
537 if (i->getParentEdge().hasRestrictedLane(
SVC_BICYCLE)) {
538 edgeHasBikelane =
true;
540 if (i->getParentEdge().hasRestrictedLane(
SVC_BUS)) {
541 edgeHasBuslane =
true;
543 if (i->getParentEdge().hasRestrictedLane(
SVC_IGNORING)) {
544 edgeHasGreenVerge =
true;
546 if (i->getParentEdge().getNBEdge()->getLaneStruct(i->getIndex()).customShape.size() != 0) {
547 differentLaneShapes =
true;
558 FXMenuPane* edgeOperations =
new FXMenuPane(ret);
560 new FXMenuCascade(ret,
"edge operations", 0, edgeOperations);
568 new FXMenuCommand(edgeOperations, (
"Straighten " + edgeDescPossibleMulti).c_str(), 0, &parent,
MID_GNE_EDGE_STRAIGHTEN);
569 new FXMenuCommand(edgeOperations, (
"Smooth " + edgeDescPossibleMulti).c_str(), 0, &parent,
MID_GNE_EDGE_SMOOTH);
573 FXMenuPane* laneOperations =
new FXMenuPane(ret);
575 new FXMenuCascade(ret,
"lane operations", 0, laneOperations);
577 if (differentLaneShapes) {
581 FXMenuPane* addSpecialLanes =
new FXMenuPane(laneOperations);
583 FXMenuPane* removeSpecialLanes =
new FXMenuPane(laneOperations);
585 FXMenuPane* transformSlanes =
new FXMenuPane(laneOperations);
588 FXMenuCommand* addSidewalk =
new FXMenuCommand(addSpecialLanes,
"Sidewalk", pedestrianIcon, &parent,
MID_GNE_LANE_ADD_SIDEWALK);
589 FXMenuCommand* addBikelane =
new FXMenuCommand(addSpecialLanes,
"Bikelane", bikeIcon, &parent,
MID_GNE_LANE_ADD_BIKE);
590 FXMenuCommand* addBuslane =
new FXMenuCommand(addSpecialLanes,
"Buslane", busIcon, &parent,
MID_GNE_LANE_ADD_BUS);
591 FXMenuCommand* addGreenVerge =
new FXMenuCommand(addSpecialLanes,
"Greenverge", greenVergeIcon, &parent,
MID_GNE_LANE_ADD_GREENVERGE);
593 FXMenuCommand* removeSidewalk =
new FXMenuCommand(removeSpecialLanes,
"Sidewalk", pedestrianIcon, &parent,
MID_GNE_LANE_REMOVE_SIDEWALK);
594 removeSidewalk->disable();
595 FXMenuCommand* removeBikelane =
new FXMenuCommand(removeSpecialLanes,
"Bikelane", bikeIcon, &parent,
MID_GNE_LANE_REMOVE_BIKE);
596 removeBikelane->disable();
597 FXMenuCommand* removeBuslane =
new FXMenuCommand(removeSpecialLanes,
"Buslane", busIcon, &parent,
MID_GNE_LANE_REMOVE_BUS);
598 removeBuslane->disable();
600 removeGreenVerge->disable();
603 FXMenuCommand* transformLaneToBikelane =
new FXMenuCommand(transformSlanes,
"Bikelane", bikeIcon, &parent,
MID_GNE_LANE_TRANSFORM_BIKE);
604 FXMenuCommand* transformLaneToBuslane =
new FXMenuCommand(transformSlanes,
"Buslane", busIcon, &parent,
MID_GNE_LANE_TRANSFORM_BUS);
607 FXMenuCascade* cascadeAddSpecialLane =
new FXMenuCascade(laneOperations, (
"add restricted " +
toString(
SUMO_TAG_LANE)).c_str(), 0, addSpecialLanes);
608 FXMenuCascade* cascadeRemoveSpecialLane =
new FXMenuCascade(laneOperations, (
"remove restricted " +
toString(
SUMO_TAG_LANE)).c_str(), 0, removeSpecialLanes);
609 new FXMenuCascade(laneOperations, (
"transform to restricted " +
toString(
SUMO_TAG_LANE)).c_str(), 0, transformSlanes);
611 if (edgeHasSidewalk) {
612 transformLaneToSidewalk->disable();
613 addSidewalk->disable();
614 removeSidewalk->enable();
616 if (edgeHasBikelane) {
617 transformLaneToBikelane->disable();
618 addBikelane->disable();
619 removeBikelane->enable();
621 if (edgeHasBuslane) {
622 transformLaneToBuslane->disable();
623 addBuslane->disable();
624 removeBuslane->enable();
626 if (edgeHasGreenVerge) {
627 transformLaneToGreenVerge->disable();
628 addGreenVerge->disable();
629 removeGreenVerge->enable();
632 if (edgeHasSidewalk && edgeHasBikelane && edgeHasBuslane && edgeHasGreenVerge) {
633 cascadeAddSpecialLane->disable();
635 if (!edgeHasSidewalk && !edgeHasBikelane && !edgeHasBuslane && !edgeHasGreenVerge) {
636 cascadeRemoveSpecialLane->disable();
640 new FXMenuCommand(ret,
"Select state for all links from this edge:", 0, 0, 0);
642 for (
auto it : names) {
644 FXMenuRadio* mc =
new FXMenuRadio(ret, it.c_str(),
this, FXDataTarget::ID_OPTION + state);
650 FXMenuCommand* mc =
new FXMenuCommand(ret,
"Additional options available in 'Inspect Mode'", 0, 0, 0);
651 mc->handle(&parent, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE), 0);
656 new FXMenuSeparator(ret);
659 new FXMenuCommand(ret, (
"Shape pos: " +
toString(pos)).c_str(), 0, 0, 0);
661 new FXMenuCommand(ret, (
"Height: " +
toString(height)).c_str(), 0, 0, 0);
684 const std::vector<double>&
690 const std::vector<double>&
717 int segments = (int)
getShape().size() - 1;
721 for (
int i = 0; i < segments; ++i) {
730 i->updateGeometry(updateGrid);
734 i->updateGeometry(updateGrid);
738 i->updateGeometry(updateGrid);
744 for (
auto i : incomingConnections) {
745 i->updateGeometry(updateGrid);
749 for (
auto i : outGoingConnections) {
750 i->updateGeometry(updateGrid);
787 if (laneParametricLenght > 0) {
788 return laneParametricLenght;
790 throw ProcessError(
"Lane Parametric Lenght cannot be never 0");
826 const std::vector<GNEShape*>&
909 return canParse<double>(value);
916 return canParse<double>(value) && (parse<double>(value) >= 0);
918 return canParse<bool>(value);
925 return ok && (shape.size() > 1);
929 return canParse<int>(value) && (parse<int>(value) ==
myIndex);
931 return canParse<bool>(value);
991 result += i.first +
"=" + i.second +
"|";
994 if (!result.empty()) {
1001 std::vector<std::pair<std::string, std::string> >
1003 std::vector<std::pair<std::string, std::string> > result;
1006 result.push_back(std::make_pair(i.first, i.second));
1017 std::vector<std::string> parsedValues;
1020 parsedValues.push_back(stValues.
next());
1023 for (
auto i : parsedValues) {
1024 std::vector<std::string> parsedParameters;
1027 parsedParameters.push_back(stParam.
next());
1073 if (value.empty()) {
1084 if (parse<bool>(value)) {
1128 switch (activeScheme) {
1144 switch (activeScheme) {
1146 for (PositionVector::const_iterator ii =
getShape().begin(); ii !=
getShape().end() - 1; ++ii) {
1151 for (
int ii = 1; ii < (int)
getShape().size(); ++ii) {
1165 switch (activeScheme) {
1167 switch (myPermissions) {
1189 return (
double)myPermissions;
1220 std::vector<std::string> laneIDs = parse<std::vector<std::string> >(i->getAttribute(
SUMO_ATTR_LANES));
1222 if (laneIDs.empty()) {
1224 }
else if ((laneIDs.size() == 1) && (allowEmpty ==
false)) {
1226 if (laneIDs.front() ==
getID()) {
1229 throw ProcessError(
"lane ID wasnt' found in Additional");
1232 auto it = std::find(laneIDs.begin(), laneIDs.end(),
getID());
1233 if (it != laneIDs.end()) {
1238 throw ProcessError(
"lane ID wasnt' found in Additional");
1260 * (spreadSuperposed ? 0.4 : 1)));
1261 const double sideOffset = spreadSuperposed ? width * -0.5 : 0;
1264 int e = (int)
getShape().size() - 1;
1265 for (
int i = 0; i < e; ++i) {
1270 const double length =
MIN2(width * 0.5, myShapeLengths[i] - t);
1271 glBegin(GL_TRIANGLES);
1272 glVertex2d(sideOffset, -t - length);
1273 glVertex2d(sideOffset - width * 0.25, -t);
1274 glVertex2d(sideOffset + width * 0.25, -t);
1303 std::vector<GNEConnection*>
1306 std::vector<GNEConnection*> incomingConnections;
1309 if (junctionSource) {
1313 for (
auto j : i->getGNEConnections()) {
1314 if (j->getNBEdgeConnection().fromLane ==
getIndex()) {
1315 incomingConnections.push_back(j);
1320 return incomingConnections;
1324 std::vector<GNEConnection*>
1328 std::vector<GNEConnection*> outcomingConnections;
1330 for (
auto i : edgeConnections) {
1331 if (i->getNBEdgeConnection().fromLane ==
getIndex()) {
1332 outcomingConnections.push_back(i);
1335 return outcomingConnections;
1343 for (
auto i : incomingConnections) {
1348 for (
auto i : outcomingConnections) {
1370 i->startGeometryMoving();
1374 i->startGeometryMoving();
1378 i->startGeometryMoving();
1388 i->endGeometryMoving();
1392 i->endGeometryMoving();
1396 i->endGeometryMoving();
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
int getConnectionIndex(const NBEdge *from, const NBEdge::Connection &con) const
return the index of the given connection
The link is a partial left direction.
std::string getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
double getLength() const
Returns the computed length of the edge.
bool setMultiColor(const GUIColorer &c) const
sets multiple colors according to the current scheme index and some lane function ...
std::vector< double > myShapeLengths
The lengths of the shape parts.
std::vector< GNELane * > retrieveLanes(bool onlySelected=false)
return all lanes
const GNEAttributeCarrier * getACUnderCursor() const
get AttributeCarrier under cursor
Position getPositionInView() const
Return current position.
void drawLane2LaneConnections() const
draw lane to lane connections
LinkState getLinkState(const NBEdge *incoming, NBEdge *outgoing, int fromLane, int toLane, bool mayDefinitelyPass, const std::string &tlID) const
get link state
bool isRestricted(SUMOVehicleClass vclass) const
check if this lane is restricted
const std::vector< T > & getSchemes() const
std::string getParentName() const
Returns the name of the parent object (if any)
double scale
information about a lane's width (temporary, used for a single view)
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
PositionVector shape
The lane's shape.
whether a given shape is user-defined
GNENet * myNet
the net to inform about updates
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.
double z() const
Returns the z-position.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
begin/end of the description of a single lane
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
void setEndOffset(int lane, double offset)
set lane specific end-offset (negative lane implies set for all lanes)
double getLaneSpeed(int lane) const
get lane speed
const RGBColor * mySpecialColor
optional special color
static const RGBColor selectedLaneColor
color of selected lane
void updateGeometry(bool updateGrid)
update pre-computed geometry information
static void drawTextAtEnd(const std::string &text, const PositionVector &shape, double x, double size, RGBColor color)
draw text and the end of shape
static RGBColor fromHSV(double h, double s, double v)
Converts the given hsv-triplet to rgb.
static const RGBColor WHITE
static GUIGlID getTexture(GUITexture which)
returns a texture previously defined in the enum GUITexture
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
void setSpeed(int lane, double speed)
set lane specific speed (negative lane implies set for all lanes)
Position positionAtOffset2D(double pos, double lateralOffset=0) const
Returns the position at the given length.
Boundary getBoundary() const
returns the boundry (including lanes)
GUIColorer laneColorer
The lane colorer.
Stores the information about how to visualize structures.
This is an uncontrolled, minor link, has to stop.
int getPriority() const
Returns the priority of the edge.
const double SUMO_const_laneWidth
static const double SNAP_RADIUS
GNEViewParent * getViewParent() const
get the net object
double y() const
Returns the y-position.
GUIVisualizationSettings * getVisualisationSettings() const
get visualitation settings
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
interpolate z values linear between junctions
The representation of a single edge during network building.
void unsetParameter(const std::string &key)
Removes a parameter.
bool showRails
Information whether rails shall be drawn.
The link is a 180 degree turn.
smooth elevation with regard to adjoining edges
static RGBColor colorForLinksState(FXuint state)
return the color for each linkstate
bool hasRestrictedLane(SUMOVehicleClass vclass) const
check if edge has a restricted lane
double x() const
Returns the x-position.
const std::vector< double > & getShapeRotations() const
returns the vector with the shape rotations
bool isBidiRail(bool ignoreSpread=false) const
whether this edge is part of a bidirectional railway
std::string getAttributeForSelection(SumoXMLAttr key) const
method for getting the attribute in the context of object selection
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
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, int align=0, double width=-1)
transform lane to bikelane
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given ...
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
int editMode
the current NETEDIT mode (temporary)
bool showLaneDirection
Whether to show direction indicators for lanes.
double getSpeed() const
returns the current speed of lane
double endOffset
This lane's offset to the intersection begin.
bool laneShowBorders
Information whether lane borders shall be drawn.
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
std::vector< RGBColor > myShapeColors
The color of the shape parts (cached)
This is an uncontrolled, right-before-left link.
bool drawAsRailway(const GUIVisualizationSettings &s) const
whether to draw this lane as a railway
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const std::vector< GNEConnection * > & getGNEConnections()
returns a reference to the GNEConnection vector
void handleMultiChange(GNELane *lane, FXObject *obj, FXSelector sel, void *data)
update phase definition for the current traffic light and phase
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
bool removeGenericParameter(const std::string &key)
remove generic parameter
bool isRailway(SVCPermissions permissions)
Returns whether an edge with the given permission is a railway edge.
const SVCPermissions SVCAll
all VClasses are allowed
double getColorValue(int activeScheme) const
return value for lane coloring according to the given scheme
bool updateGenericParameterValue(const std::string &key, const std::string &newValue)
update value generic parameter
Lane & getLaneStruct(int lane)
The link is controlled by a tls which is off, not blinking, may pass.
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
static bool isValidGenericParameterKey(const std::string &value)
whether the given string is a valid key for a generic parameter
This is an uncontrolled, all-way stop link.
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used, also builds an entry for copying the geo-position.
static const double UNSPECIFIED_WIDTH
unspecified lane width
A class that stores a 2D geometrical boundary.
int myIndex
The index of this lane.
bool setFunctionalColor(int activeScheme) const
sets the color according to the current scheme index and some lane function
This is an uncontrolled, zipper-merge link.
The link is a (hard) left direction.
std::vector< std::string > getStrings() const
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for GNE_MODE_TLS
static OptionsCont & getOptions()
Retrieves the options.
void setLaneShape(int lane, const PositionVector &shape)
sets a custom lane shape
bool accelRamp
Whether this lane is an acceleration lane.
void setAcceleration(int lane, bool accelRamp)
marks one lane as acceleration lane
std::vector< double > myLaneRestrictedTextureRotations
Rotations of textures of restricted lanes.
SVCPermissions invertPermissions(SVCPermissions permissions)
negate the given permissions and ensure that only relevant bits are set
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)...
The link is a straight direction.
void p_add(GNEChange_Attribute *cmd)
special method, avoid empty changes, always execute
std::vector< Connection > getConnectionsFromLane(int lane) const
Returns connections from a given lane.
bool addGenericParameter(const std::string &key, const std::string &value)
add generic parameter
bool drawAsWaterway(const GUIVisualizationSettings &s) const
whether to draw this lane as a waterways
static double naviDegree(const double angle)
int getIndex() const
returns the index of the lane
std::vector< std::pair< std::string, std::string > > getGenericParameters() const
return generic parameters as vector of pairs format
double getLaneParametricLength() const
returns the parameteric length of the lane
static bool isValidGenericParameterValue(const std::string &value)
whether the given string is a valid value for a generic parameter
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
bool knowsParameter(const std::string &key) const
Returns whether the parameter is known.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
GNEEdge & getParentEdge()
Returns underlying parent edge.
void endGeometryMoving()
begin movement (used when user click over edge to start a movement, to avoid problems with problems w...
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
std::string getGenericParametersStr() const
return generic parameters in string format
transform lane to busLane
Copy edge name (for lanes only)
const std::vector< GNEEdge * > & getGNEIncomingEdges() const
Returns incoming GNEEdges.
This is an uncontrolled, minor link, has to brake.
std::string getLaneID(int lane) const
get Lane ID (Secure)
int getNumLanes() const
Returns the number of lanes.
A point in 2D or 3D with translation and scaling methods.
bool controlsEdge(GNEEdge &edge) const
whether the given edge is controlled by the currently edited tlDef
static bool isGenericParametersValid(const std::string &value)
check if given string can be parsed to a map/list of generic parameters
bool isLogicValid()
whether this junction has a valid logic
void removeGLObjectFromGrid(GUIGlObject *o)
add GL Object into net
bool isWaterway(SVCPermissions permissions)
Returns whether an edge with the given permission is a waterway edge.
void removeLaneOfAdditionalParents(GNEUndoList *undoList, bool allowEmpty)
remove lane of Additional Parent
std::vector< double > myShapeRotations
friend class GNEChange_Attribute
declare friend class
T get(const std::string &str) const
const double SUMO_const_laneMarkWidth
std::vector< GNEConnection * > getGNEIncomingConnections()
returns a vector with the incoming GNEConnections of this lane
void addShapeChild(GNEShape *shape)
add shape child to this lane
GNEJunction * getGNEJunctionDestiny() const
returns the destination-junction
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
void drawArrows() const
draw arrows
double getLengthGeometryFactor() const
get lenght geometry factor
GUIVisualizationTextSettings drawLinkTLIndex
static void drawOutlineCircle(double width, double iwidth, int steps=8)
Draws an unfilled circle around (0,0)
The link is a (hard) right direction.
void drawMarkings(const GUIVisualizationSettings &s, double scale) const
draw lane markings
void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
Boundary & grow(double by)
extends the boundary by the given amount
GUIColorer junctionColorer
The junction colorer.
std::vector< GNEShape * > myShapes
list with the shapes vinculated with this lane
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
virtual const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
const std::string getID() const
function to support debugging
void setGenericParametersStr(const std::string &value)
set generic parameters in string format
const T getColor(const double value) const
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
std::vector< GNEConnection * > getGNEOutcomingConnections()
returns a vector with the outgoing GNEConnections of this lane
std::vector< Connection > myConnections
List of connections to following edges.
GNEJunction * getGNEJunctionSource() const
returns the source-junction
double laneMinSize
The minimum visual lane width for drawing.
The link is a partial right direction.
double getLaneShapeLength() const
returns the length of the lane's shape
void startGeometryMoving()
double width
This lane's width.
bool updateGenericParameter(const std::string &oldKey, const std::string &newKey)
update generic parameter
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
double getFinalLength() const
get length that will be assigned to the lanes in the final network
void move2side(double amount)
move position vector to side using certain ammount
vehicle is a passenger car (a "normal" car)
void selectAttributeCarrier(bool changeFlag=true)
select attribute carrier using GUIGlobalSelection
std::string getAttribute(SumoXMLAttr key) const
begin/end of the description of an edge
LinkDirection getDirection(const NBEdge *const incoming, const NBEdge *const outgoing, bool leftHand=false) const
Returns the representation of the described stream's direction.
void unselectAttributeCarrier(bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
EditMode getCurrentEditMode() const
get the current edit mode
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
transform lane to sidewalk
A road/street connecting two junctions (netedit-version)
GNEEdge & myParentEdge
The Edge that to which this lane belongs.
double getLaneWidth() const
Returns the default width of lanes of this edge.
change default geometry endpoints
virtual void updateGeometry(bool updateGrid)=0
update pre-computed geometry information
const PositionVector & getShape() const
returns the shape of the lane
bool showLinkDecals
Information whether link textures (arrows) shall be drawn.
double selectionScale
the current selection scaling in NETEDIT (temporary)
void buildSelectionACPopupEntry(GUIGLObjectPopupMenu *ret, GNEAttributeCarrier *AC)
Builds an entry which allows to (de)select the object.
double length() const
Returns the length.
void updateConnectionIDs()
update IDs of incoming connections of this lane
long onDefault(FXObject *, FXSelector, void *)
multiplexes message to two targets
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
std::vector< GNEEdge * > retrieveEdges(bool onlySelected=false)
return all edges
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
static void drawShapeDottedContour(const int type, const PositionVector &shape, const double width)
draw a dotted contour around the given Non closed shape with certain width
void drawTLSLinkNo(const GUIVisualizationSettings &s) const
draw TLS Link Number
The link is controlled by a tls which is off and blinks, has to brake.
static void drawCrossTies(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double length, double spacing, double halfWidth, bool drawForSelecting)
draw crossties for railroads or pedestrian crossings
std::vector< Position > myLaneRestrictedTexturePositions
Position of textures of restricted lanes.
void setSpecialColor(const RGBColor *Color2)
const std::string getParameter(const std::string &key, const std::string &defaultValue="") const
Returns the value for a given key.
static int getCircleResolution(const GUIVisualizationSettings &settings)
function to calculate circle resolution for all circles drawn in drawGL(...) functions ...
void mouseOverObject(const GUIVisualizationSettings &s) const
method for check if mouse is over objects
This is an uncontrolled, major link, may pass.
reset default geometry endpoints
void drawLinkNo(const GUIVisualizationSettings &s) const
draw link Number
void drawLinkRules() const
draw link rules
static const StringBijection< FXuint > LinkStateNames
long names for link states
static FXColor getFXColor(const RGBColor &col)
converts FXColor to RGBColor
Represents a single node (junction) during network building.
const std::map< std::string, std::string > & getParametersMap() const
Returns the inner key/value map.
GUIGlID getGlID() const
Returns the numerical id of the object.
The link is a 180 degree turn (left-hand network)
std::vector< GNEAdditional * > myAdditionalChilds
list of Additional Childs of this NetElement
void drawDirectionIndicators(double exaggeration, bool spreadSuperposed) const
direction indicators for lanes
static void drawTriangleAtEnd(const Position &p1, const Position &p2, double tLength, double tWidth)
Draws a triangle at the end of the given line.
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
void removeShapeChild(GNEShape *shape)
remove shape child of this lane
std::vector< GNEAdditional * > myFirstAdditionalParents
list of Additional parents of this NetElement
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
static const RGBColor selectionColor
void setLaneColor(const GUIVisualizationSettings &s) const
set color according to edit mode and visualisation settings
mode for connecting lanes
mode for creating new edges
static void drawBoxLine(const Position &beg, double rot, double visLength, double width, double offset=0)
Draws a thick line.
bool isValid(SumoXMLAttr key, const std::string &value)
NBEdge * getNBEdge()
returns the internal NBEdge
const std::vector< double > & getShapeLengths() const
returns the vector with the shape lengths
double getLoadedLength() const
Returns the length was set explicitly or the computed length if it wasn't set.
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
void addGLObjectIntoGrid(GUIGlObject *o)
add GL Object into net
PositionVector customShape
A custom shape for this lane set by the user.
const std::vector< GNEShape * > & getShapeChilds() const
get shape childs of lane
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
GUIVisualizationTextSettings drawLinkJunctionIndex
NBNode * getToNode() const
Returns the destination node of the edge.
static PositionVector parseShapeReporting(const std::string &shpdef, const std::string &objecttype, const char *objectid, bool &ok, bool allowEmpty, bool report=true)
Builds a PositionVector from a string representation, reporting occurred errors.
vehicles ignoring classes
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
void setLaneWidth(int lane, double width)
set lane specific width (negative lane implies set for all lanes)
transform lane to greenVerge
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
GNEViewNet * getViewNet() const
get view net
The link has no direction (is a dead end link)
void clearParameter()
Clears the parameter map.
static RGBColor getColor()
gets the gl-color
SumoXMLTag getTag() const
get XML Tag assigned to this object