49 #define ENDPOINT_TOLERANCE 2
66 {}, {}, {}, {}, {}, {}, {}),
69 myAmResponsible(
false),
71 myConnectionStatus(loaded ? FEATURE_LOADED : FEATURE_GUESSED),
72 myUpdateGeometry(
true) {
74 int numLanes = myNBEdge->getNumLanes();
75 myLanes.reserve(numLanes);
76 for (
int i = 0; i < numLanes; i++) {
77 myLanes.push_back(
new GNELane(
this, i));
78 myLanes.back()->
incRef(
"GNEEdge::GNEEdge");
81 for (
const auto& lane : myLanes) {
82 lane->updateGeometry();
85 updateCenteringBoundary(
false);
91 for (
const auto& lane :
myLanes) {
92 lane->decRef(
"GNEEdge::~GNEEdge");
93 if (lane->unreferenced()) {
99 WRITE_DEBUG(
"Deleting unreferenced " + lane->getTagStr() +
" '" + lane->getID() +
"' in GNEEdge destructor");
105 connection->decRef(
"GNEEdge::~GNEEdge");
106 if (connection->unreferenced()) {
112 WRITE_DEBUG(
"Deleting unreferenced " + connection->getTagStr() +
" '" + connection->getID() +
"' in GNEEdge destructor");
127 for (
const auto& lane :
myLanes) {
128 lane->updateGeometry();
132 connection->updateGeometry();
136 childAdditional->updateGeometry();
140 childDemandElement->updateGeometry();
144 childGenericData->updateGeometry();
149 childAdditional->computePathElement();
152 childDemandElement->computePathElement();
155 childGenericData->computePathElement();
168 return myLanes.front()->getPositionInView();
220 if (!customStartPosition && (index == 0)) {
224 if (!customEndPosition && (index == lastIndex)) {
235 }
else if (index == lastIndex) {
242 shape.erase(shape.begin() + index);
294 for (
const auto& geometryPoint : innenShape) {
337 for (
const auto& lane :
myLanes) {
340 for (
const auto& additional : lane->getChildAdditionals()) {
396 for (
const auto& lane :
myLanes) {
401 additional->drawGL(s);
407 stopPersonEdge->drawGL(s);
413 for (
const auto& vehicleMap : vehiclesMap) {
414 for (
const auto& vehicle : vehicleMap.second) {
544 edge->updateGeometry();
547 edge->updateGeometry();
552 for (
const auto& edge :
getToJunction()->getGNEIncomingEdges()) {
553 edge->updateGeometry();
555 for (
const auto& edge :
getToJunction()->getGNEOutgoingEdges()) {
556 edge->updateGeometry();
564 laneShape.
move2side(
myLanes.front()->getParentEdge()->getNBEdge()->getLaneWidth(
myLanes.front()->getIndex()) / 2);
565 return laneShape.front();
572 laneShape.
move2side(-1 *
myLanes.back()->getParentEdge()->getNBEdge()->getLaneWidth(
myLanes.back()->getIndex()) / 2);
573 return laneShape.front();
580 laneShape.
move2side(
myLanes.front()->getParentEdge()->getNBEdge()->getLaneWidth(
myLanes.front()->getIndex()) / 2);
581 return laneShape.back();
588 laneShape.
move2side(-1 *
myLanes.back()->getParentEdge()->getNBEdge()->getLaneWidth(
myLanes.back()->getIndex()) / 2);
589 return laneShape.back();
597 std::vector<GNEConnection*> retrievedConnections;
599 for (
const auto& connection : connections) {
603 retrievedConnections.push_back(retrievedGNEConnection);
610 retrievedGNEConnection->
incRef(
"GNEEdge::remakeGNEConnections");
618 connection->decRef();
626 if (connection->unreferenced()) {
629 WRITE_DEBUG(
"Deleting unreferenced " + connection->getTagStr() +
" '" + connection->getID() +
"' in rebuildGNEConnections()");
643 if (connection->isAttributeCarrierSelected()) {
644 connection->unselectAttributeCarrier();
647 connection->decRef(
"GNEEdge::clearGNEConnections");
655 if (connection->unreferenced()) {
657 WRITE_DEBUG(
"Deleting unreferenced " + connection->getTagStr() +
" '" + connection->getID() +
"' in clearGNEConnections()");
667 std::vector<GNEAdditional*> routeProbes;
670 routeProbes.push_back(i);
674 auto it = std::find(routeProbes.begin(), routeProbes.end(), routeProbe);
675 if (it == routeProbes.end()) {
678 return (
int)(it - routeProbes.begin());
683 std::vector<GNECrossing*>
685 std::vector<GNECrossing*> crossings;
687 if (i->checkEdgeBelong(
this)) {
688 crossings.push_back(i);
692 if (i->checkEdgeBelong(
this)) {
693 crossings.push_back(i);
720 for (
int i = 0; i < (int)
myLanes.size(); i++) {
750 for (
int i = 0; i < (int)
myLanes.size(); i++) {
773 std::set<GUIGlID> result;
775 result.insert(i->getGlID());
781 const std::vector<GNELane*>&
787 const std::vector<GNEConnection*>&
829 return "lane specific";
835 return "lane specific";
843 return "lane specific";
906 const std::string origValue =
myLanes.at(0)->getAttribute(key);
909 it->setAttribute(key, value, undoList);
994 if (updateTemplate) {
1034 return canParse<double>(value) && (parse<double>(value) > 0);
1036 return canParse<int>(value) && (parse<double>(value) > 0);
1038 return canParse<int>(value);
1040 if (value.empty()) {
1052 return canParse<PositionVector>(value);
1058 if (value.empty() || (value ==
"default")) {
1061 return canParse<double>(value) && ((parse<double>(value) >= -1) || (parse<double>(value) ==
NBEdge::UNSPECIFIED_WIDTH));
1064 return canParse<double>(value) && parse<double>(value) >= 0 && parse<double>(value) <
myNBEdge->
getLoadedLength();
1066 return canParse<double>(value);
1068 if (value.empty()) {
1070 }
else if (canParse<Position>(value)) {
1071 Position shapeStart = parse<Position>(value);
1078 if (value.empty()) {
1080 }
else if (canParse<Position>(value)) {
1081 Position shapeEnd = parse<Position>(value);
1090 return canParse<int>(value) && (parse<double>(value) >= 0);
1094 return canParse<bool>(value);
1131 const std::map<std::string, std::string>&
1176 const std::map<const GNELane*, std::vector<GNEDemandElement*> > laneVehiclesMap =
getVehiclesOverEdgeMap();
1178 for (
const auto& laneVehicle : laneVehiclesMap) {
1180 double totalLength = 0;
1181 for (
const auto& vehicle : laneVehicle.second) {
1185 double multiplier = 1;
1186 const double laneShapeLenght = laneVehicle.first->getLaneShape().length();
1187 if (laneShapeLenght == 0) {
1189 }
else if (totalLength > laneShapeLenght) {
1190 multiplier = (laneShapeLenght / totalLength);
1195 for (
const auto& vehicle : laneVehicle.second) {
1196 vehicle->updateDemandElementSpreadGeometry(laneVehicle.first, lenght * multiplier);
1207 const std::map<const GNELane*, std::vector<GNEDemandElement*> > laneVehiclesMap =
getVehiclesOverEdgeMap();
1209 for (
const auto& vehicleMap : laneVehiclesMap) {
1211 std::vector<std::pair<GNEEdge::StackPosition, GNEDemandElement*> > departPosVehicles;
1213 std::vector<GNEEdge::StackDemandElements> stackedVehicles;
1215 for (
const auto& vehicle : vehicleMap.second) {
1221 if (posOverLane < 0) {
1222 posOverLane += vehicleMap.first->getLaneShape().length();
1225 departPosVehicles.push_back(std::make_pair(
StackPosition(departPos, length), vehicle));
1227 vehicle->updateDemandElementGeometry(vehicleMap.first, posOverLane);
1229 vehicle->updateDemandElementStackLabel(0);
1233 std::sort(departPosVehicles.begin(), departPosVehicles.end());
1235 for (
const auto& departPosVehicle : departPosVehicles) {
1240 if (stackedVehicles.empty()) {
1244 stackedVehicles[stackedVehicles.size() - 1].addDemandElements(vehicle);
1251 for (
const auto& vehicle : stackedVehicles) {
1253 if (vehicle.getDemandElements().size() > 1) {
1265 const bool lastLane = (lane ==
myLanes.back());
1266 const bool validScale = (s.
scale > 8.0);
1273 bool drawBigGeometryPoints =
false;
1275 drawBigGeometryPoints =
true;
1279 drawBigGeometryPoints =
true;
1282 double circleWidthSquared = circleWidth * circleWidth;
1291 if (color.
alpha() > 0) {
1295 glTranslated(0, 0, 1);
1301 glTranslated(pos.
x(), pos.
y(), 0.1);
1309 glTranslated(pos.
x(), pos.
y(), 0.2);
1317 if (drawBigGeometryPoints) {
1335 glTranslated(0, 0, 0.1);
1360 glTranslated(0, 0, 0.1);
1380 if (edge->
getLanes().size() == 1) {
1403 GUIDottedGeometry extremes(s, dottedGeometryTop, drawFrontExtreme, dottedGeometryBot, drawBackExtreme);
1417 dottedGeometryColor.
reset();
1435 while (edgeAngle < 0) {
1439 edgeAngle = fmod(edgeAngle, 360);
1441 return edgeAngle >= 0 && edgeAngle < 180;
1449 pair(departPos, departPos + length) {
1466 pair(stackedPosition, {
1474 second.push_back(demandElement);
1484 const std::vector<GNEDemandElement*>&
1501 if (stop->getTagProperty().isStop() || stop->getTagProperty().isStopPerson()) {
1506 for (
const auto& lane :
myLanes) {
1507 for (
const auto& stop : lane->getChildDemandElements()) {
1508 if (stop->getTagProperty().isStop() || stop->getTagProperty().isStopPerson()) {
1537 throw InvalidArgument(
"GNEEdge::setAttribute (private) called for attr SUMO_ATTR_NUMLANES. This should never happen");
1542 if (value.empty()) {
1567 if (value.empty() || (value ==
"default")) {
1586 WRITE_DEBUG(
"invalidating (removing) connections of edge '" +
getID() +
"' due it were guessed");
1590 WRITE_DEBUG(
"declaring connections of edge '" +
getID() +
"' as loaded (It will not be removed)");
1600 newShapeStart = parse<Position>(value);
1614 newShapeEnd = parse<Position>(value);
1625 if (parse<bool>(value)) {
1635 if (value.empty()) {
1648 if (updateTemplate) {
1664 innenShape.pop_back();
1688 innenShape.pop_back();
1714 const int oldNumLanes = (int)
myLanes.size();
1716 if (oppositeID !=
"") {
1720 for (
int i = oldNumLanes; i < numLanes; i++) {
1724 for (
int i = (oldNumLanes - 1); i > (numLanes - 1); i--) {
1728 if (oppositeID !=
"") {
1765 myNBEdge->
addLane(index,
true, recomputeConnections, !recomputeConnections);
1771 lane =
new GNELane(
this, index);
1774 lane->
incRef(
"GNEEdge::addLane");
1788 for (
int i = 0; i < (int)
myLanes.size(); ++i) {
1799 i->remakeGNEConnections();
1803 i->remakeGNEConnections();
1817 if (lane ==
nullptr) {
1830 lane->
decRef(
"GNEEdge::removeLane");
1841 for (
int i = 0; i < (int)
myLanes.size(); ++i) {
1852 fromEdge->remakeGNEConnections();
1856 toEdge->remakeGNEConnections();
1878 if (selectAfterCreation) {
1899 if (connection !=
nullptr) {
1900 connection->
decRef(
"GNEEdge::removeConnection");
1914 WRITE_DEBUG(
"Deleting unreferenced " + connection->
getTagStr() +
" '" + connection->
getID() +
"' in removeConnection()");
1925 if ((connection->getFromLaneIndex() == fromLane) && (connection->getEdgeTo()->getNBEdge() == to) && (connection->getToLaneIndex() == toLane)) {
1929 if (createIfNoExist) {
1948 for (
const auto& lane :
myLanes) {
1949 lane->setMicrosimID(
getNBEdge()->getLaneID(lane->getIndex()));
1956 for (
const auto& lane :
myLanes) {
1957 if (lane->isRestricted(vclass)) {
1969 if (crossing->checkEdgeBelong(
this)) {
1981 PositionVector innerShape(modifiedShape.begin() + 1, modifiedShape.end() - 1);
1994 #ifdef DEBUG_SMOOTH_GEOM
1996 <<
" forElevation=" << forElevation
1999 <<
" smoothShape old=" << old <<
"\n";
2001 if (old.size() == 3 || old.size() == 4) {
2003 }
else if (old.size() > 4 && !forElevation) {
2005 init.push_back(old[0]);
2006 init.push_back(old[1]);
2007 init.push_back(old[-2]);
2008 init.push_back(old[-1]);
2014 if (incoming.size() == 1) {
2015 begShape = incoming[0]->getGeometry();
2017 assert(incoming.size() == 2);
2020 if (outgoing.size() == 1) {
2021 endShape = outgoing[0]->getGeometry();
2023 assert(outgoing.size() == 2);
2029 init.push_back(old[0]);
2032 init.push_back(old[-1]);
2036 init[1].setz(2 * init[0].z() - begZ);
2037 init[2].setz(2 * init[-1].z() - endZ);
2040 const double straightThresh =
DEG2RAD(oc.
getFloat(
"opendrive-output.straight-threshold"));
2043 #ifdef DEBUG_SMOOTH_GEOM
2045 std::cout <<
" begShape=" << begShape <<
" endShape=" << endShape <<
" forElevation=" << forElevation <<
" dist=" << dist <<
" ok=" << ok <<
" init=" << init <<
"\n";
2049 if (init.size() == 0) {
2052 const int numPoints =
MAX2(oc.
getInt(
"junctions.internal-link-detail"),
2054 return init.
bezier(numPoints);
2062 if (modifiedShape.size() < 2) {
2065 PositionVector innerShape(modifiedShape.begin() + 1, modifiedShape.end() - 1);
2075 if (elevationBase.size() == 0 || elevationBase[-1].z() != pos.z()) {
2076 elevationBase.push_back(pos);
2080 if (elevation.size() <= 2) {
2084 if (modifiedShape.size() < 5) {
2090 for (
int i = 1; i < (int)modifiedShape.size(); ++i) {
2091 seen += modifiedShape[i - 1].distanceTo2D(modifiedShape[i]);
2095 PositionVector innerShape(modifiedShape.begin() + 1, modifiedShape.end() - 1);
2117 geom.push_back(pos);
2123 const std::map<const GNELane*, std::vector<GNEDemandElement*> >
2126 std::vector<GNEDemandElement*> vehiclesOverEdge;
2128 std::map<const GNELane*, std::vector<GNEDemandElement*> > vehiclesOverEdgeMap;
2130 std::set<std::pair<double, GNEDemandElement*> > vehicles;
2134 (edgeChild->getParentEdges().front() ==
this)) {
2135 vehicles.insert(std::make_pair(edgeChild->getAttributeDouble(
SUMO_ATTR_DEPART), edgeChild));
2136 vehicles.insert(std::make_pair(edgeChild->getAttributeDouble(
SUMO_ATTR_DEPART), edgeChild));
2137 }
else if ((edgeChild->getTagProperty().getTag() ==
SUMO_TAG_ROUTE) && (edgeChild->getParentEdges().front() ==
this)) {
2138 for (
const auto& routeChild : edgeChild->getChildDemandElements()) {
2140 vehicles.insert(std::make_pair(routeChild->getAttributeDouble(
SUMO_ATTR_DEPART), routeChild));
2143 }
else if ((edgeChild->getTagProperty().getTag() ==
GNE_TAG_ROUTE_EMBEDDED) && (edgeChild->getParentEdges().front() ==
this)) {
2144 vehicles.insert(std::make_pair(edgeChild->getParentDemandElements().front()->getAttributeDouble(
SUMO_ATTR_DEPART), edgeChild->getParentDemandElements().front()));
2148 vehiclesOverEdge.reserve(vehicles.size());
2150 for (
const auto& vehicle : vehicles) {
2152 vehiclesOverEdge.push_back(vehicle.second);
2155 for (
const auto& vehicle : vehiclesOverEdge) {
2156 const GNELane* vehicleLane = vehicle->getFirstPathLane();
2158 vehiclesOverEdgeMap[vehicleLane].push_back(vehicle);
2161 return vehiclesOverEdgeMap;
2180 drawPosition.
mul(.5);
2181 if (spreadSuperposed) {
2185 const Position shift(dist * cos(shiftA), dist * sin(shiftA));
2186 drawPosition.
add(shift);
2192 if (drawAngle > 90 && drawAngle < 270) {
2200 if (drawStreetName) {
2209 if (activeScheme == 12) {
2212 }
else if (activeScheme == 13) {
2217 const double doubleValue = lastLane->
getColorValue(s, activeScheme);
2242 for (
const auto& lane :
getLanes()) {
2270 const double squaredSnapRadius = (snapRadius * snapRadius);
2274 const int nearestIndex = originalShape.
indexOfClosest(mousePosition);
2278 std::vector<int> indexes;
2280 if (nearestIndex == -1) {
2285 for (
int i = 1; i <= nearestIndex; i++) {
2286 indexes.push_back(i);
2289 return new GNEMoveOperation(
this, originalShape, indexes, shapeToMove, indexes);
2293 }
else if (nearestPosition.
distanceSquaredTo2D(shapeToMove[nearestIndex]) <= squaredSnapRadius) {
2294 for (
int i = 1; i <= nearestIndex; i++) {
2295 indexes.push_back(i);
2298 return new GNEMoveOperation(
this, originalShape, indexes, shapeToMove, indexes);
2301 const int newIndex = shapeToMove.
insertAtClosest(nearestPosition,
true);
2302 for (
int i = 1; i <= newIndex; i++) {
2303 indexes.push_back(i);
2306 return new GNEMoveOperation(
this, originalShape, indexes, shapeToMove, indexes);
2314 const double squaredSnapRadius = (snapRadius * snapRadius);
2318 const int nearestIndex = originalShape.
indexOfClosest(mousePosition);
2322 std::vector<int> indexes;
2324 if (nearestIndex == -1) {
2329 for (
int i = nearestIndex; i < ((int)originalShape.size() - 1); i++) {
2330 indexes.push_back(i);
2333 return new GNEMoveOperation(
this, originalShape, indexes, shapeToMove, indexes);
2337 }
else if (nearestPosition.
distanceSquaredTo2D(shapeToMove[nearestIndex]) <= squaredSnapRadius) {
2338 for (
int i = nearestIndex; i < ((int)originalShape.size() - 1); i++) {
2339 indexes.push_back(i);
2342 return new GNEMoveOperation(
this, originalShape, indexes, shapeToMove, indexes);
2345 const int newIndex = shapeToMove.
insertAtClosest(nearestPosition,
true);
2346 for (
int i = newIndex; i < ((int)originalShape.size() - 1); i++) {
2347 indexes.push_back(i);
2350 return new GNEMoveOperation(
this, originalShape, indexes, shapeToMove, indexes);
2358 std::vector<int> geometryPointsToMove;
2360 geometryPointsToMove.push_back(i);
2374 if (shapeToMove.
length2D() < moveMultipleElementValues.getEdgeOffset()) {
2381 offset = moveMultipleElementValues.getEdgeOffset();
2383 offset = shapeToMove.
length2D() - moveMultipleElementValues.getEdgeOffset();
2392 }
else if (offsetPosition.
distanceSquaredTo2D(shapeToMove[nearestIndex]) <= (snapRadius * snapRadius)) {
2397 const int newIndex = shapeToMove.
insertAtClosest(offsetPosition,
true);
#define ENDPOINT_TOLERANCE
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ GLO_DOTTEDCONTOUR_INSPECTED
dotted contour inspected element (used in NETEDIT)
@ GLO_DOTTEDCONTOUR_FRONT
dotted contour front element (used in NETEDIT)
#define WRITE_WARNING(msg)
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
const SVCPermissions SVCAll
all VClasses are allowed
SVCPermissions invertPermissions(SVCPermissions permissions)
negate the given permissions and ensure that only relevant bits are set
const std::string & getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SUMO_TAG_VEHICLE
description of a vehicle
@ GNE_TAG_FLOW_ROUTE
a flow definition using a route instead of a from-to edges route (used in NETEDIT)
@ SUMO_TAG_FLOW
a flow definitio nusing a from-to edges instead of a route (used by router)
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ GNE_TAG_ROUTE_EMBEDDED
embedded route (used in NETEDIT)
@ GNE_TAG_STOPPERSON_EDGE
@ SUMO_TAG_TRIP
a single trip definition (used by router)
@ SUMO_TAG_EDGE
begin/end of the description of an edge
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ GNE_ATTR_STOPOFFSET
stop offset (virtual, used by edge and lanes)
@ GNE_ATTR_OPPOSITE
neighboring lane, simplified lane attr instead of child element
@ GNE_ATTR_SELECTED
element is selected
@ GNE_ATTR_PARAMETERS
parameters "key1=value1|key2=value2|...|keyN=valueN"
@ GNE_ATTR_STOPOEXCEPTION
stop exceptions (virtual, used by edge and lanes)
@ GNE_ATTR_MODIFICATION_STATUS
whether a feature has been loaded,guessed,modified or approved
@ SUMO_ATTR_SHAPE
edge: the shape in xml-definition
@ SUMO_ATTR_SPREADTYPE
The information about how to spread the lanes from the given position.
@ GNE_ATTR_SHAPE_END
last coordinate of edge shape
@ GNE_ATTR_BIDIR
whether an edge is part of a bidirectional railway
@ GNE_ATTR_SHAPE_START
first coordinate of edge shape
const double SUMO_const_halfLaneWidth
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
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 drawBoundary(const Boundary &b)
Draw a boundary (used for debugging)
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
static void popMatrix()
pop matrix
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)
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
friend class GNEChange_Attribute
declare friend class
const std::string & getTagStr() const
get tag assigned to this object in string format
static const std::string FEATURE_GUESSED
feature has been reguessed (may still be unchanged be we can't tell (yet)
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
void unselectAttributeCarrier(const bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
bool drawUsingSelectColor() const
check if attribute carrier must be drawn using selecting color.
GNENet * myNet
pointer to net
void selectAttributeCarrier(const bool changeFlag=true)
select attribute carrier using GUIGlobalSelection
void markConnectionGeometryDeprecated()
check that connection's Geometry has to be updated
void updateGeometry()
update pre-computed geometry information
void updateLinkState()
recompute cached myLinkState
bool deleteOnlyGeometryPoints() const
check if only delete geometry points checkbox is enabled
DeleteOptions * getDeleteOptions() const
get delete options
An Element which don't belongs to GNENet but has influency in the simulation.
void updateDemandElementStackLabel(const int stack)
update stack label
const StackPosition & getStackPosition() const
get stack position
const std::vector< GNEDemandElement * > & getDemandElements() const
get demand elements
void addDemandElements(GNEDemandElement *demandElement)
add demand elment to current StackDemandElements
StackDemandElements(const StackPosition stackedPosition, GNEDemandElement *demandElement)
constructor
Stack position (used to stack demand elements over edges)
double beginPosition() const
get begin position
StackPosition(const double departPos, const double length)
constructor
double endPosition() const
get end position
A road/street connecting two junctions (netedit-version)
const Position getFrontDownShapePosition() const
get front down shape position
void updateCenteringBoundary(const bool updateGrid)
update centering boundary (implies change in RTREE)
void drawEdgeName(const GUIVisualizationSettings &s) const
draw edge name
bool isConvexAngle() const
check if edge makes a convex angle [0 - 180) degrees
void setNumLanes(int numLanes, GNEUndoList *undoList)
changes the number of lanes. When reducing the number of lanes, higher-numbered lanes are removed fir...
void remakeGNEConnections()
remake connections
void commitMoveShape(const GNEMoveResult &moveResult, GNEUndoList *undoList)
commit move shape
void setMoveShape(const GNEMoveResult &moveResult)
set move shape
friend class GNEChange_Lane
Friend class.
GNEEdge * getOppositeEdge() const
get opposite edge
void smooth(GNEUndoList *undoList)
make geometry smooth
void updateGeometry()
update pre-computed geometry information
GNEMoveOperation * getMoveOperation()
get move operation
std::string getAttributeForSelection(SumoXMLAttr key) const
method for getting the attribute in the context of object selection
GNEJunction * getFromJunction() const
get from Junction (only used to increase readability)
void setResponsible(bool newVal)
set responsibility for deleting internal structures
void copyEdgeType(const GNEEdgeType *edgeType, GNEUndoList *undoList)
copy edge attributes from edgeType
NBEdge * getNBEdge() const
returns the internal NBEdge
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
const std::map< const GNELane *, std::vector< GNEDemandElement * > > getVehiclesOverEdgeMap() const
get vehicles a that start over this edge
std::set< GUIGlID > getLaneGlIDs() const
returns GLIDs of all lanes
static void drawDottedContourEdge(const GUIDottedGeometry::DottedContourType type, const GUIVisualizationSettings &s, const GNEEdge *edge, const bool drawFrontExtreme, const bool drawBackExtreme)
draw dotted contour for the given dottedGeometries
const Position getFrontUpShapePosition() const
get front up shape position
void setGeometry(PositionVector geom, bool inner)
update edge geometry and inform the lanes
void smoothElevation(GNEUndoList *undoList)
smooth elevation with regard to adjoining edges
void drawLaneStopOffset(const GUIVisualizationSettings &s) const
draw edgeStopOffset
bool clickedOverGeometryPoint(const Position &pos) const
return true if user clicked over a Geometry Point
bool clickedOverShapeEnd(const Position &pos) const
return true if user clicked over ShapeEnd
void updateVehicleStackLabels()
GNEJunction * getToJunction() const
get from Junction (only used to increase readability)
bool isValid(SumoXMLAttr key, const std::string &value)
GNEMoveOperation * processMoveBothJunctionSelected()
process moving edge when both junctions are selected
void removeGeometryPoint(const Position clickedPosition, GNEUndoList *undoList)
remove geometry point in the clicked position
const std::vector< GNELane * > & getLanes() const
returns a reference to the lane vector
LaneVector myLanes
vector with the lanes of this edge
static const double SNAP_RADIUS
GNELane * getLaneByAllowedVClass(const SUMOVehicleClass vClass) const
return the first lane that allow a vehicle of type vClass (or the first lane, if none was found)
bool hasCustomEndPoints() const
void removeConnection(NBEdge::Connection nbCon)
removes a connection
bool isAttributeComputed(SumoXMLAttr key) const
bool myWasSplit
whether this edge was created from a split
void removeLane(GNELane *lane, bool recomputeConnections)
@briefdecrease the number of lanes by one. argument is only used to increase robustness (assertions)
double getExaggeration(const GUIVisualizationSettings &s) const
return exaggeration asociated with this GLObject
bool hasRestrictedLane(SUMOVehicleClass vclass) const
check if edge has a restricted lane
static const double SNAP_RADIUS_SQUARED
void updateSecondParentJunction(const std::string &value)
update last parent junction
PositionVector smoothShape(const PositionVector &shape, bool forElevation)
return smoothed shape
bool wasSplit()
whether this edge was created from a split
NBEdge * myNBEdge
the underlying NBEdge
void copyTemplate(const GNEEdgeTemplate *edgeTemplate, GNEUndoList *undoList)
copy edge attributes from edgetemplate
void removeEdgeFromCrossings(GNEJunction *junction, GNEUndoList *undoList)
remove crossing of junction
Position getPositionInView() const
Returns position of hierarchical element in view.
void addLane(GNELane *lane, const NBEdge::Lane &laneAttrs, bool recomputeConnections)
increase number of lanes by one use the given attributes and restore the GNELane
GNEConnection * retrieveGNEConnection(int fromLane, NBEdge *to, int toLane, bool createIfNoExist=true)
get GNEConnection if exist, and if not create it if create is enabled
ConnectionVector myGNEConnections
vector with the connections of this edge
void editEndpoint(Position pos, GNEUndoList *undoList)
makes pos the new geometry endpoint at the appropriate end, or remove current existent endpoint
void resetBothEndpoint(GNEUndoList *undoList)
restores both endpoint to the junction position at the appropriate end
Position getSplitPos(const Position &clickPos)
const std::vector< GNEConnection * > & getGNEConnections() const
returns a reference to the GNEConnection vector
std::string getAttribute(SumoXMLAttr key) const
int getRouteProbeRelativePosition(GNERouteProbe *routeProbe) const
obtain relative positions of RouteProbes
std::string myConnectionStatus
modification status of the connections
const std::string getOptionalName() const
Returns the street name.
void clearGNEConnections()
clear current connections
bool myUpdateGeometry
@brif flag to enable/disable update geometry of lanes (used mainly by setNumLanes)
const Position getBackDownShapePosition() const
get back down shape position
bool areStackPositionOverlapped(const GNEEdge::StackPosition &vehicleA, const GNEEdge::StackPosition &vehicleB) const
check if given stacked positions are overlapped
void updateFirstParentJunction(const std::string &value)
update front parent junction
void straightenElevation(GNEUndoList *undoList)
interpolate z values linear between junctions
bool clickedOverShapeStart(const Position &pos) const
return true if user clicked over ShapeStart
const std::map< std::string, std::string > & getACParametersMap() const
get parameters map
void setShapeStartPos(const Position &pos)
change Shape StartPos
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
void setMicrosimID(const std::string &newID)
override to also set lane ids
const Position getBackUpShapePosition() const
get back up shape position
void resetEndpoint(const Position &pos, GNEUndoList *undoList)
restores the endpoint to the junction position at the appropriate end
bool isAttributeEnabled(SumoXMLAttr key) const
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
void addConnection(NBEdge::Connection nbCon, bool selectAfterCreation=false)
adds a connection
GNEMoveOperation * processMoveFromJunctionSelected(const PositionVector originalShape, const Position mousePosition, const double snapRadius)
process moving edge when only from junction is selected
void drawEdgeGeometryPoints(const GUIVisualizationSettings &s, const GNELane *lane) const
draw edge geometry points (note: This function is called by GNELane::drawGL(...)
GNEMoveOperation * processNoneJunctionSelected(const double snapRadius)
process moving edge when none junction are selected
std::vector< GNECrossing * > getGNECrossings()
get GNECrossings vinculated with this Edge
GNELane * getLaneByDisallowedVClass(const SUMOVehicleClass vClass) const
return the first lane that disallow a vehicle of type vClass (or the first lane, if none was found)
void updateVehicleSpreadGeometries()
GNEMoveOperation * processMoveToJunctionSelected(const PositionVector originalShape, const Position mousePosition, const double snapRadius)
process moving edge when only to junction is selected
void updateJunctionPosition(GNEJunction *junction, const Position &origPos)
update edge geometry after junction move
bool myAmResponsible
whether we are responsible for deleting myNBNode
GNEEdge(GNENet *net, NBEdge *nbe, bool wasSplit=false, bool loaded=false)
Constructor.
void setShapeEndPos(const Position &pos)
change Shape EndPos
std::string getAttribute(SumoXMLAttr key) const
const std::vector< GNELaneTemplate * > & getLaneTemplates() const
get vector with the lane templates of this edge
const std::string & getID() const
return ID of object
const std::vector< GNELaneType * > & getLaneTypes() const
get laneTypes
std::string getAttribute(SumoXMLAttr key) const
void removeCurrentEditedAttributeCarrier(const GNEAttributeCarrier *HE)
if given AttributeCarrier is the same of myHE, set it as nullptr
const std::vector< GNEJunction * > & getParentJunctions() const
get parent junctions
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEEdge * > & getChildEdges() const
get child edges
const std::vector< GNEAdditional * > & getChildAdditionals() const
return child additionals
void replaceParentElements(T *elementChild, const U &newParents)
replace parent elements
const std::vector< GNEGenericData * > & getChildGenericDatas() const
return child generic data elements
void setEdgeTemplate(const GNEEdge *edge)
set edge template
GNEEdgeTemplate * getEdgeTemplate() const
get edge template (to copy attributes from)
TemplateEditor * getTemplateEditor() const
get template editor
GNEFrameModules::HierarchicalElementTree * getHierarchicalElementTree() const
get HierarchicalElementTree modul
const std::vector< GNECrossing * > & getGNECrossings() const
Returns GNECrossings.
void updateGeometry()
update pre-computed geometry information (including crossings)
void removeOutgoingGNEEdge(GNEEdge *edge)
remove outgoing GNEEdge
void removeIncomingGNEEdge(GNEEdge *edge)
remove incoming GNEEdge
void addIncomingGNEEdge(GNEEdge *edge)
add incoming GNEEdge
NBNode * getNBNode() const
Return net build node.
void setLogicValid(bool valid, GNEUndoList *undoList, const std::string &status=FEATURE_GUESSED)
void addOutgoingGNEEdge(GNEEdge *edge)
add outgoing GNEEdge
const double halfWidth
Draw as a normal lane, and reduce width to make sure that a selected edge can still be seen.
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
const PositionVector & getLaneShape() const
get elements shape
int getIndex() const
returns the index of the lane
double getColorValue(const GUIVisualizationSettings &s, int activeScheme) const
return value for lane coloring according to the given scheme
GNEMoveOperation * calculateMoveShapeOperation(const PositionVector originalShape, const Position mousePosition, const double snapRadius, const bool onlyContour)
calculate move shape operation
std::vector< int > geometryPointsToMove
shape points to move (of shapeToMove)
PositionVector shapeToUpdate
shape to update (edited in moveElement)
const std::set< GNELane * > & getLanes() const
get lanes
const std::set< GNEConnection * > & getConnections() const
get connections
void insertLane(GNELane *lane)
insert lane
void deleteConnection(GNEConnection *connection)
delete connection
GNEJunction * retrieveJunction(const std::string &id, bool hardFail=true) const
get junction by id
void insertConnection(GNEConnection *connection)
insert connection
void updateEdgeID(GNEEdge *edge, const std::string &newID)
update edge ID in container
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
void deleteLane(GNELane *lane)
delete lane
A NBNetBuilder extended by visualisation and editing capabilities.
void deleteCrossing(GNECrossing *crossing, GNEUndoList *undoList)
remove crossing
void addGLObjectIntoGrid(GNEAttributeCarrier *AC)
add GL Object into net
void removeGLObjectFromGrid(GNEAttributeCarrier *AC)
add GL Object into net
void removeExplicitTurnaround(std::string id)
remove edge id from the list of explicit turnarounds
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
void changeEdgeEndpoints(GNEEdge *edge, const std::string &newSourceID, const std::string &newDestID)
modifies endpoins of the given edge
void requireSaveDemandElements(bool value)
inform that demand elements has to be saved
GNEPathManager * getPathManager()
get path manager
GNEViewNet * getViewNet() const
get view net
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
const std::string & getID() const
get ID
Boundary myBoundary
object boundary
void invalidatePathCalculator()
invalidate pathCalculator
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
void decRef(const std::string &debugMsg="")
Decrease reference.
void incRef(const std::string &debugMsg="")
Increarse reference.
bool unreferenced()
check if object ins't referenced
Representation of a RouteProbe in netedit.
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
void changeAttribute(GNEChange_Attribute *change)
special method for change attributes, avoid empty changes, always execute
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
const GNEAttributeCarrier * getFrontAttributeCarrier() const
get front attributeCarrier
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
void drawTranslateFrontAttributeCarrier(const GNEAttributeCarrier *AC, double typeOrLayer, const double extraOffset=0)
draw front attributeCarrier
GNEViewParent * getViewParent() const
get the net object
void removeFromAttributeCarrierInspected(const GNEAttributeCarrier *AC)
remove given AC of list of inspected Attribute Carriers
void buildSelectionACPopupEntry(GUIGLObjectPopupMenu *ret, GNEAttributeCarrier *AC)
Builds an entry which allows to (de)select the object.
bool isAttributeCarrierInspected(const GNEAttributeCarrier *AC) const
check if attribute carrier is being inspected
const GNEViewNetHelper::MoveMultipleElementValues & getMoveMultipleElementValues() const
get move multiple element values
GNEDeleteFrame * getDeleteFrame() const
get frame for delete elements
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
class for pack all variables related with GUIDottedGeometry color
void changeColor()
change color
void reset()
rest Dotted Geometry Color
void drawDottedGeometry(DottedGeometryColor &dottedGeometryColor, GUIDottedGeometry::DottedContourType type, const double customWidth=-1) const
draw inspected dottedShape
void moveShapeToSide(const double value)
move shape to side
static void drawDottedContourShape(const DottedContourType type, const GUIVisualizationSettings &s, const PositionVector &shape, const double width, const double exaggeration, const bool drawFirstExtrem, const bool drawLastExtrem, const double lineWidth=-1)
draw dotted contour for the given shape (used by additionals)
void invertOffset()
invert offset of all segments
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used,...
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
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 drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0, bool forceShow=false) const
draw name of item
const T getColor(const double value) const
const std::vector< T > & getSchemes() const
Position snapToActiveGrid(const Position &pos, bool snapXY=true) const
Returns a position that is mapped to the closest grid point if the grid is active.
GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
Stores the information about how to visualize structures.
bool drawBoundaries
enable or disable draw boundaries
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
GUIVisualizationDetailSettings detailSettings
detail settings
GUIVisualizationSizeSettings addSize
bool drawForPositionSelection
whether drawing is performed for the purpose of selecting objects with a single click
GUIVisualizationTextSettings edgeValue
double laneWidthExaggeration
The lane exaggeration (upscale thickness)
GUIVisualizationColorSettings colorSettings
color settings
double scale
information about a lane's width (temporary, used for a single view)
bool drawDetail(const double detail, const double exaggeration) const
check if details can be drawn for the given GUIVisualizationDetailSettings and current scale and exxa...
GUIVisualizationTextSettings streetName
GUIColorer laneColorer
The lane colorer.
GUIVisualizationTextSettings edgeName
int getCircleResolution() const
function to calculate circle resolution for all circles drawn in drawGL(...) functions
bool spreadSuperposed
Whether to improve visualisation of superposed (rail) edges.
GUIColorer junctionColorer
The junction colorer.
std::string edgeParam
key for coloring by edge parameter
GUIVisualizationNeteditSizeSettings neteditSizeSettings
netedit size settings
static const double INVALID_OFFSET
a value to signify offsets outside the range of [0, Line.length()]
The representation of a single edge during network building.
void setStreetName(const std::string &name)
sets the street name of this edge
void mirrorX()
mirror coordinates along the x-axis
void setPreferredVehicleClass(SVCPermissions permissions, int lane=-1)
set preferred Vehicle Class
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given
StopOffset myEdgeStopOffset
A vClass specific stop offset - assumed of length 0 (unspecified) or 1. For the latter case the int i...
double getLoadedLength() const
Returns the length was set explicitly or the computed length if it wasn't set.
void setSpeed(int lane, double speed)
set lane specific speed (negative lane implies set for all lanes)
double getLaneWidth() const
Returns the default width of lanes of this edge.
const std::string & getStreetName() const
Returns the street name of this edge.
void addLane(int index, bool recomputeShape, bool recomputeConnections, bool shiftIndices)
add lane
bool hasLaneSpecificSpeed() const
whether lanes differ in speed
std::string myType
The type of the edge.
LaneSpreadFunction getLaneSpreadFunction() const
Returns how this edge's lanes' lateral offset is computed.
bool isBidiRail(bool ignoreSpread=false) const
whether this edge is part of a bidirectional railway
bool hasLoadedLength() const
Returns whether a length was set explicitly.
void setDistance(double distance)
set lane specific speed (negative lane implies set for all lanes)
const std::string & getID() const
const std::vector< NBEdge::Lane > & getLanes() const
Returns the lane definitions.
NBNode * getToNode() const
Returns the destination node of the edge.
double getSpeed() const
Returns the speed allowed on this edge.
double getDistance() const
get distance
static const double UNSPECIFIED_LOADED_LENGTH
no length override given
void setLaneWidth(int lane, double width)
set lane specific width (negative lane implies set for all lanes)
void setLaneSpreadFunction(LaneSpreadFunction spread)
(Re)sets how the lanes lateral offset shall be computed
bool setConnection(int lane, NBEdge *destEdge, int destLane, Lane2LaneInfoType type, bool mayUseSameDestination=false, bool mayDefinitelyPass=false, KeepClear keepClear=KEEPCLEAR_UNSPECIFIED, double contPos=UNSPECIFIED_CONTPOS, double visibility=UNSPECIFIED_VISIBILITY_DISTANCE, double speed=UNSPECIFIED_SPEED, double length=myDefaultConnectionLength, const PositionVector &customShape=PositionVector::EMPTY, const bool uncontrolled=UNSPECIFIED_CONNECTION_UNCONTROLLED, SVCPermissions permissions=SVC_UNSPECIFIED, bool indirectLeft=false, const std::string &edgeType="", SVCPermissions changeLeft=SVC_UNSPECIFIED, SVCPermissions changeRight=SVC_UNSPECIFIED, bool postProcess=false)
Adds a connection to a certain lane of a certain edge.
bool isTurningDirectionAt(const NBEdge *const edge) const
Returns whether the given edge is the opposite direction to this edge.
bool hasLaneSpecificPermissions() const
whether lanes differ in allowed vehicle classes
int getNumLanes() const
Returns the number of lanes.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
void removeFromConnections(NBEdge *toEdge, int fromLane=-1, int toLane=-1, bool tryLater=false, const bool adaptToLaneRemoval=false, const bool keepPossibleTurns=false)
Removes the specified connection(s)
void invalidateConnections(bool reallowSetting=false)
invalidate current connections of edge
void deleteLane(int index, bool recompute, bool shiftIndices)
delete lane
bool hasLaneSpecificWidth() const
whether lanes differ in width
@ USER
The connection was given by the user.
bool hasLaneSpecificEndOffset() const
whether lanes differ in offset
NBEdge * getTurnDestination(bool possibleDestination=false) const
int getPriority() const
Returns the priority of the edge.
static const double UNSPECIFIED_WIDTH
unspecified lane width
const std::vector< Connection > & getConnections() const
Returns the connections.
const std::string & getTypeID() const
get ID of type
void declareConnectionsAsLoaded(EdgeBuildingStep step=EdgeBuildingStep::LANES2LANES_USER)
declares connections as fully loaded. This is needed to avoid recomputing connections if an edge has ...
double getEndOffset() const
Returns the offset to the destination node.
void setEndOffset(int lane, double offset)
set lane specific end-offset (negative lane implies set for all lanes)
Lane & getLaneStruct(int lane)
void setLoadedLength(double val)
set loaded length
const PositionVector getInnerGeometry() const
Returns the geometry of the edge without the endpoints.
double getFinalLength() const
get length that will be assigned to the lanes in the final network
void setGeometry(const PositionVector &g, bool inner=false)
(Re)sets the edge's geometry
int myPriority
The priority of the edge.
NBNode * getFromNode() const
Returns the origin node of the edge.
const EdgeVector & getOutgoingEdges() const
Returns this node's outgoing edges (The edges which start at this node)
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges (The edges which yield in this node)
const Position & getPosition() const
bool geometryLike() const
whether this is structurally similar to a geometry node
static PositionVector bezierControlPoints(const PositionVector &begShape, const PositionVector &endShape, bool isTurnaround, double extrapolateBeg, double extrapolateEnd, bool &ok, NBNode *recordError=0, double straightThresh=DEG2RAD(5), int shapeFlag=0)
get bezier control points
const std::string & getID() const
Returns the id.
A storage for options typed value containers)
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
bool set(const std::string &name, const std::string &value)
Sets the given value for the named option.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
static bool areParametersValid(const std::string &value, bool report=false, const std::string kvsep="=", const std::string sep="|")
check if given string can be parsed to a parameters map "key1=value1|key2=value2|....
void setParametersStr(const std::string ¶msString, const std::string kvsep="=", const std::string sep="|")
set the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN"
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
std::string getParametersStr(const std::string kvsep="=", const std::string sep="|") const
Returns the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN".
const std::map< std::string, std::string > & getParametersMap() const
Returns the inner key/value map.
A point in 2D or 3D with translation and scaling methods.
double distanceSquaredTo2D(const Position &p2) const
returns the square of the distance to another position (Only using x and y positions)
static const Position INVALID
used to indicate that a position is valid
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
double x() const
Returns the x-position.
void add(const Position &pos)
Adds the given position to this one.
void mul(double val)
Multiplies both positions with the given value.
double z() const
Returns the z-position.
double y() const
Returns the y-position.
double length2D() const
Returns the length.
double length() const
Returns the length.
double rotationAtOffset(double pos) const
Returns the rotation at the given length.
PositionVector resample(double maxLength, const bool adjustEnd) const
resample shape (i.e. transform to segments, equal spacing)
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.
void add(double xoff, double yoff, double zoff)
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
int indexOfClosest(const Position &p, bool twoD=false) const
void move2side(double amount, double maxExtension=100)
move position vector to side using certain ammount
PositionVector interpolateZ(double zStart, double zEnd) const
returned vector that varies z smoothly over its length
static const PositionVector EMPTY
empty Vector
PositionVector bezier(int numPoints)
return a bezier interpolation
int insertAtClosest(const Position &p, bool interpolateZ)
inserts p between the two closest positions
void push_front(const Position &p)
insert in front a Position
void removeDoublePoints(double minDist=POSITION_EPS, bool assertLength=false, int beginOffset=0, int endOffset=0, bool resample=false)
Removes positions if too near.
void pop_front()
pop first Position
Position positionAtOffset2D(double pos, double lateralOffset=0) const
Returns the position at the given length.
unsigned char alpha() const
Returns the alpha-amount of the color.
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
static StringBijection< LaneSpreadFunction > LaneSpreadFunctions
lane spread functions
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
void setOffset(const double offset)
set offset
bool isDefined() const
check if stopOffset was defined
void reset()
reset stopOffset
SVCPermissions getPermissions() const
get permissions
void setExceptions(const std::string permissions)
set exceptions (used in NETEDIT)
std::string getExceptions() const
get exceptions (used in NETEDIT)
double getOffset() const
get offset
bool hasString(const std::string &str) const
const std::string & getString(const T key) const
bool showDemandElements() const
check if show demand elements checkbox is enabled
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
static void drawLockIcon(const GNEAttributeCarrier *AC, GUIGlObjectType type, const Position viewPosition, const double exaggeration, const double size=0.5, const double offsetx=0, const double offsety=0)
draw lock icon
bool isMovingSelectedEdge() const
flag for moving edge
bool editingElevation() const
check if we're editing elevation
bool showDemandElements() const
check if show demand elements checkbox is enabled
RGBColor selectedEdgeColor
edge selection color
static const double geometryPointsText
details for Geometry Points Texts
static const double edgeGeometryPointRadius
moving edge geometry point radius
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
double scaledSize(double scale, double constFactor=0.1) const
get scale size
A structure which describes a connection between edges or lanes.
int fromLane
The lane the connections starts at.
int toLane
The lane the connections yields in.
double speed
custom speed for connection
NBEdge * toEdge
The edge the connections yields in.
KeepClear keepClear
whether the junction must be kept clear when using this connection
double customLength
custom length for connection
bool uncontrolled
check if Connection is uncontrolled
PositionVector customShape
custom shape for connection
bool mayDefinitelyPass
Information about being definitely free to drive (on-ramps)
double contPos
custom position for internal junction on this connection
double visibility
custom foe visiblity for connection
An (internal) definition of a single lane of an edge.
double width
This lane's width.
double endOffset
This lane's offset to the intersection begin.
SVCPermissions preferred
List of vehicle types that are preferred on this lane.
double speed
The speed allowed on this lane.
SVCPermissions permissions
List of vehicle types that are allowed on this lane.