51 #ifdef CHECK_MEMORY_LEAKS 53 #endif // CHECK_MEMORY_LEAKS 66 if (!oc.
isSet(
"output-file")) {
71 const int cornerDetail = oc.
getInt(
"junctions.corner-detail");
72 const int linkDetail = oc.
getInt(
"junctions.internal-link-detail");
73 const std::string junctionCornerDetail = (cornerDetail > 0
75 const std::string junctionLinkDetail = (oc.
isDefault(
"junctions.internal-link-detail") ?
"" :
78 " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"http://sumo.dlr.de/xsd/net_file.xsd\"");
92 bool origNames = oc.
getBool(
"output.original-names");
93 if (!oc.
getBool(
"no-internal-links")) {
95 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
104 bool noNames = !oc.
getBool(
"output.street-names");
105 for (std::map<std::string, NBEdge*>::const_iterator i = ec.
begin(); i != ec.
end(); ++i) {
106 writeEdge(device, *(*i).second, noNames, origNames);
114 std::set<NBNode*> roundaboutNodes;
115 const bool checkLaneFoesAll = oc.
getBool(
"check-lane-foes.all");
116 const bool checkLaneFoesRoundabout = !checkLaneFoesAll && oc.
getBool(
"check-lane-foes.roundabout");
117 if (checkLaneFoesRoundabout) {
119 for (std::set<EdgeSet>::const_iterator i = roundabouts.begin(); i != roundabouts.end(); ++i) {
120 for (EdgeSet::const_iterator j = (*i).begin(); j != (*i).end(); ++j) {
121 roundaboutNodes.insert((*j)->getToNode());
125 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
126 const bool checkLaneFoes = checkLaneFoesAll || (checkLaneFoesRoundabout && roundaboutNodes.count((*i).second) > 0);
130 const bool includeInternal = !oc.
getBool(
"no-internal-links");
131 if (includeInternal) {
134 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
143 int numConnections = 0;
144 for (std::map<std::string, NBEdge*>::const_iterator it_edge = ec.
begin(); it_edge != ec.
end(); it_edge++) {
145 NBEdge* from = it_edge->second;
147 const std::vector<NBEdge::Connection> connections = from->
getConnections();
148 numConnections += (int)connections.size();
149 for (std::vector<NBEdge::Connection>::const_iterator it_c = connections.begin(); it_c != connections.end(); it_c++) {
153 if (numConnections > 0) {
156 if (includeInternal) {
159 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
166 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
167 NBNode* node = (*i).second;
169 const std::vector<NBNode::Crossing>& crossings = node->
getCrossings();
170 for (std::vector<NBNode::Crossing>::const_iterator it = crossings.begin(); it != crossings.end(); it++) {
174 const std::vector<NBNode::WalkingArea>& WalkingAreas = node->
getWalkingAreas();
175 for (std::vector<NBNode::WalkingArea>::const_iterator it = WalkingAreas.begin(); it != WalkingAreas.end(); it++) {
176 if ((*it).nextCrossing !=
"") {
194 for (std::vector<std::string>::const_iterator it_sw = (*it).nextSidewalks.begin(); it_sw != (*it).nextSidewalks.end(); ++it_sw) {
197 for (std::vector<std::string>::const_iterator it_sw = (*it).prevSidewalks.begin(); it_sw != (*it).prevSidewalks.end(); ++it_sw) {
204 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
212 for (std::map<std::string, NBDistrict*>::const_iterator i = dc.
begin(); i != dc.
end(); i++) {
215 if (dc.
size() != 0) {
230 assert(succOpp != 0);
231 assert(predOpp != 0);
232 const std::vector<NBEdge::Connection>& connections = succOpp->
getConnections();
233 for (std::vector<NBEdge::Connection>::const_iterator it_c = connections.begin(); it_c != connections.end(); it_c++) {
235 if (succOpp != from &&
237 predOpp == conOpp.
toEdge &&
253 for (EdgeVector::const_iterator i = incoming.begin(); i != incoming.end(); i++) {
254 const std::vector<NBEdge::Connection>& elv = (*i)->getConnections();
255 if (elv.size() > 0) {
256 bool haveVia =
false;
258 std::string internalEdgeID =
"";
260 std::map<NBEdge*, SUMOReal> lengthSum;
261 std::map<NBEdge*, int> numLanes;
262 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
264 numLanes[(*k).toEdge] += 1;
267 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
268 if ((*k).toEdge == 0) {
272 if (toEdge != (*k).toEdge) {
273 internalEdgeID = (*k).id;
278 toEdge = (*k).toEdge;
286 const NBEdge::Lane& successor = (*k).toEdge->getLanes()[(*k).toLane];
287 const SUMOReal length = lengthSum[toEdge] / numLanes[toEdge];
291 writeLane(into, (*k).getInternalLaneID(), (*k).vmax,
295 haveVia = haveVia || (*k).haveVia;
301 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
305 if ((*k).toEdge == 0) {
309 const NBEdge::Lane& successor = (*k).toEdge->getLanes()[(*k).toLane];
316 0, origNames,
"", &n);
323 const std::vector<NBNode::Crossing>& crossings = n.
getCrossings();
324 for (std::vector<NBNode::Crossing>::const_iterator it = crossings.begin(); it != crossings.end(); it++) {
334 const std::vector<NBNode::WalkingArea>& WalkingAreas = n.
getWalkingAreas();
335 for (std::vector<NBNode::WalkingArea>::const_iterator it = WalkingAreas.begin(); it != WalkingAreas.end(); it++) {
375 const std::vector<NBEdge::Lane>& lanes = e.
getLanes();
378 for (
int i = 0; i < (int) lanes.size(); i++) {
393 const std::string& origID,
SUMOReal length,
int index,
bool origNames,
394 const std::string& oppositeID,
const NBNode* node) {
406 WRITE_WARNING(
"Lane '" + lID +
"' has a maximum allowed speed of 0.");
407 }
else if (speed < 0) {
408 throw ProcessError(
"Negative allowed speed (" +
toString(speed) +
") on lane '" + lID +
"', use --speed.minimum to prevent this.");
411 length = length - endOffset;
423 NBNode::CustomShapeMap::const_iterator it = cs.find(lID);
424 if (it != cs.end()) {
431 if (oppositeID !=
"" && oppositeID !=
"-") {
436 if (origNames && origID !=
"") {
453 std::string incLanes;
455 for (std::vector<NBEdge*>::const_iterator i = incoming.begin(); i != incoming.end(); ++i) {
456 int noLanes = (*i)->getNumLanes();
457 for (
int j = 0; j < noLanes; j++) {
458 incLanes += (*i)->getLaneID(j);
459 if (i != incoming.end() - 1 || j < noLanes - 1) {
464 const std::vector<NBNode::Crossing>& crossings = n.
getCrossings();
465 for (std::vector<NBNode::Crossing>::const_iterator it = crossings.begin(); it != crossings.end(); it++) {
466 incLanes +=
' ' + (*it).prevWalkingArea +
"_0";
470 std::string intLanes;
473 for (EdgeVector::const_iterator i = incoming.begin(); i != incoming.end(); i++) {
474 const std::vector<NBEdge::Connection>& elv = (*i)->getConnections();
475 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
476 if ((*k).toEdge == 0) {
483 intLanes += (*k).getInternalLaneID();
485 intLanes += (*k).viaID +
"_0";
492 for (std::vector<NBNode::Crossing>::const_iterator it = crossings.begin(); it != crossings.end(); it++) {
493 intLanes +=
' ' + (*it).id +
"_0";
522 std::vector<std::string> internalLaneIDs;
523 for (EdgeVector::const_iterator i = incoming.begin(); i != incoming.end(); i++) {
524 const std::vector<NBEdge::Connection>& elv = (*i)->getConnections();
525 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
526 if ((*k).toEdge != 0) {
527 internalLaneIDs.push_back((*k).getInternalLaneID());
531 const std::vector<NBNode::Crossing>& crossings = n.
getCrossings();
532 for (std::vector<NBNode::Crossing>::const_iterator it_c = crossings.begin(); it_c != crossings.end(); ++it_c) {
533 internalLaneIDs.push_back((*it_c).id +
"_0");
536 for (std::vector<NBEdge*>::const_iterator i = incoming.begin(); i != incoming.end(); i++) {
537 const std::vector<NBEdge::Connection>& elv = (*i)->getConnections();
538 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
539 if ((*k).toEdge == 0 || !(*k).haveVia) {
546 std::string incLanes = (*k).getInternalLaneID();
547 if ((*k).foeIncomingLanes.length() != 0) {
548 incLanes +=
" " + (*k).foeIncomingLanes;
551 const std::vector<int>& foes = (*k).foeInternalLinks;
552 std::vector<std::string> foeIDs;
553 for (std::vector<int>::const_iterator it = foes.begin(); it != foes.end(); ++it) {
554 foeIDs.push_back(internalLaneIDs[*it]);
586 if (style !=
PLAIN) {
587 if (includeInternal) {
614 for (std::vector<NBEdge*>::const_iterator i = incoming.begin(); i != incoming.end(); ++i) {
616 const std::vector<NBEdge::Connection>& connections = from->
getConnections();
617 for (std::vector<NBEdge::Connection>::const_iterator j = connections.begin(); j != connections.end(); ++j) {
637 const std::string& from,
const std::string& to,
638 int fromLane,
int toLane,
const std::string& via) {
657 std::vector<std::vector<std::string> > edgeIDs;
658 for (std::set<EdgeSet>::const_iterator i = roundabouts.begin(); i != roundabouts.end(); ++i) {
659 std::vector<std::string> tEdgeIDs;
660 for (EdgeSet::const_iterator j = (*i).begin(); j != (*i).end(); ++j) {
663 tEdgeIDs.push_back((*j)->getID());
665 std::sort(tEdgeIDs.begin(), tEdgeIDs.end());
666 edgeIDs.push_back(tEdgeIDs);
668 std::sort(edgeIDs.begin(), edgeIDs.end());
670 for (std::vector<std::vector<std::string> >::const_iterator i = edgeIDs.begin(); i != edgeIDs.end(); ++i) {
673 if (roundabouts.size() != 0) {
682 std::vector<std::string> validEdgeIDs;
683 std::vector<std::string> invalidEdgeIDs;
684 std::vector<std::string> nodeIDs;
685 for (std::vector<std::string>::const_iterator i = edgeIDs.begin(); i != edgeIDs.end(); ++i) {
689 validEdgeIDs.push_back(edge->
getID());
691 invalidEdgeIDs.push_back(*i);
694 std::sort(nodeIDs.begin(), nodeIDs.end());
695 if (validEdgeIDs.size() > 0) {
700 if (invalidEdgeIDs.size() > 0) {
702 +
joinToString(invalidEdgeIDs,
" ") +
"' no longer exist'");
721 for (
int i = 0; i < (int)sources.size(); i++) {
728 for (
int i = 0; i < (int)sinks.size(); i++) {
741 if (time == std::floor(time)) {
751 for (NBConnectionProhibits::const_iterator j = prohibitions.begin(); j != prohibitions.end(); j++) {
754 for (NBConnectionVector::const_iterator k = prohibiting.begin(); k != prohibiting.end(); k++) {
773 std::vector<NBTrafficLightLogic*> logics = tllCont.
getComputed();
774 for (std::vector<NBTrafficLightLogic*>::iterator it = logics.begin(); it != logics.end(); it++) {
781 const std::map<std::string, std::string>& params = (*it)->getMap();
782 for (std::map<std::string, std::string>::const_iterator i = params.begin(); i != params.end(); ++i) {
789 const std::vector<NBTrafficLightLogic::PhaseDefinition>& phases = (*it)->getPhases();
790 for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator j = phases.begin(); j != phases.end(); ++j) {
798 if (logics.size() > 0) {
static void writeRoundabout(OutputDevice &into, const std::vector< std::string > &r, const NBEdgeCont &ec)
Writes a roundabout.
bool getKeepClear() const
Returns the keepClear flag.
LaneSpreadFunction getLaneSpreadFunction() const
Returns how this edge's lanes' lateral offset is computed.
std::string id
id of Connection
The information about how to spread the lanes from the given position.
int tlLinkNo
The index of this connection within the controlling traffic light.
void writePermissions(OutputDevice &into, SVCPermissions permissions)
writes allowed disallowed attributes if needed;
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
void close()
Closes the device and removes it from the dictionary.
static void writeLocation(OutputDevice &into)
writes the location element
SUMOReal endOffset
This lane's offset to the intersection begin.
A structure which describes a connection between edges or lanes.
const std::vector< NBEdge * > & getSourceEdges() const
Returns the sources.
LinkState getLinkState(const NBEdge *incoming, NBEdge *outgoing, int fromLane, int toLane, bool mayDefinitelyPass, const std::string &tlID) const
int toLane
The lane the connections yields in.
a list of node ids, used for controlling joining
static const SUMOReal UNSPECIFIED_WIDTH
unspecified lane width
NBTypeCont & getTypeCont()
Returns the type container.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
Whether vehicles must keep the junction clear.
PositionVector shape
The lane's shape.
whether a given shape is user-defined
SUMOReal getRadius() const
Returns the turning radius of this node.
static void writeDistrict(OutputDevice &into, const NBDistrict &d)
Writes a district.
std::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
std::string viaID
if Connection have a via, ID of it
NBEdge * toEdge
The edge the connections yields in.
std::map< std::string, NBNode * >::const_iterator end() const
Returns the pointer to the end of the stored nodes.
const CustomShapeMap & getCustomLaneShapes() const
sets a custom shape for an internal lane
SUMOReal length() const
Returns the length.
A container for traffic light definitions and built programs.
SUMOReal length
This lane's width.
SUMOReal width
This lane's width.
static bool writeInternalEdges(OutputDevice &into, const NBEdgeCont &ec, const NBNode &n, bool origNames)
Writes internal edges (<edge ... with id[0]==':') of the given node.
void writePreferences(OutputDevice &into, SVCPermissions preferred)
writes allowed disallowed attributes if needed;
int getPriority() const
Returns the priority of the edge.
const std::string & getTypeID() const
get ID of type
bool hasCustomShape() const
return whether the shape was set by the user
std::map< std::string, NBDistrict * >::const_iterator end() const
Returns the pointer to the end of the stored districts.
The representation of a single edge during network building.
foe visibility distance of a link
static std::string escapeXML(const std::string &orig)
Replaces the standard escapes by their XML entities.
const std::vector< Crossing > & getCrossings() const
return this junctions pedestrian crossings
static void writeProhibitions(OutputDevice &into, const NBConnectionProhibits &prohibitions)
writes the given prohibitions
A container for districts.
const std::vector< SUMOReal > & getSinkWeights() const
Returns the weights of the sinks.
the weight of a district's source or sink
bool hasLoadedLength() const
Returns whether a length was set explicitly.
const std::vector< NBEdge::Lane > & getLanes() const
Returns the lane definitions.
bool mayDefinitelyPass
Information about being definitely free to drive (on-ramps)
NBEdge * getFrom() const
returns the from-edge (start of the connection)
std::string id
the (edge)-id of this walkingArea
std::map< std::string, NBEdge * >::const_iterator end() const
Returns the pointer to the end of the stored edges.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const std::string & getID() const
Returns the id.
static const SUMOReal UNSPECIFIED_CONTPOS
unspecified internal junction position
std::map< std::string, NBDistrict * >::const_iterator begin() const
Returns the pointer to the begin of the stored districts.
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
const SVCPermissions SVCAll
static void writeTrafficLights(OutputDevice &into, const NBTrafficLightLogicCont &tllCont)
writes the traffic light logics to the given device
static const SUMOReal UNSPECIFIED_OFFSET
unspecified lane offset
static void writeInternalConnection(OutputDevice &into, const std::string &from, const std::string &to, int fromLane, int toLane, const std::string &via)
Writes a single internal connection.
const Crossing & getCrossing(const std::string &id) const
return the crossing with the given id
static std::string getOppositeInternalID(const NBEdgeCont &ec, const NBEdge *from, const NBEdge::Connection &con)
retrieve the id of the opposite direction internal lane if it exists
#define WRITE_WARNING(msg)
static OptionsCont & getOptions()
Retrieves the options.
bool priority
whether the pedestrians have priority
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)...
bool writeXMLHeader(const std::string &rootElement, const std::string &attrs="", const std::string &comment="")
Writes an XML header with optional configuration.
The link is a straight direction.
SUMOReal speed
The speed allowed on this lane.
A class representing a single district.
bool keepClear
whether the junction must be kept clear when using this connection
std::map< std::string, PositionVector > CustomShapeMap
static std::string prohibitionConnection(const NBConnection &c)
the attribute value for a prohibition
An (internal) definition of a single lane of an edge.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
SVCPermissions permissions
List of vehicle types that are allowed on this lane.
static void writeNetwork(const OptionsCont &oc, NBNetBuilder &nb)
Writes the network into a SUMO-file.
bool isTLControlled() const
Returns whether this node is controlled by any tls.
bool writeLogic(OutputDevice &into, const bool checkLaneFoes) const
The turning radius at an intersection in m.
const std::vector< SUMOReal > & getSourceWeights() const
Returns the weights of the sources.
std::map< std::string, NBEdge * >::const_iterator begin() const
Returns the pointer to the begin of the stored edges.
std::string tlID
The id of the traffic light that controls this connection.
SVCPermissions preferred
List of vehicle types that are preferred on this lane.
This is an uncontrolled, minor link, has to brake.
const PositionVector & getShape() const
Returns the shape.
std::string getLaneID(int lane) const
get Lane ID (Secure)
static bool writeInternalConnections(OutputDevice &into, const NBNode &n)
Writes inner connections within the node.
static void writeLane(OutputDevice &into, const std::string &lID, SUMOReal speed, SVCPermissions permissions, SVCPermissions preferred, SUMOReal endOffset, SUMOReal width, PositionVector shape, const std::string &origID, SUMOReal length, int index, bool origNames, const std::string &oppositeID, const NBNode *node=0)
Writes a lane (<lane ...) of an edge.
int fromLane
The lane the connections starts at.
A point in 2D or 3D with translation and scaling methods.
NBEdgeCont & getEdgeCont()
Returns the edge container.
static const SUMOReal UNSPECIFIED_VISIBILITY_DISTANCE
unspecified foe visibility for connections
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
SUMOReal getFinalLength() const
get length that will be assigned to the lanes in the final network
static void writeEdge(OutputDevice &into, const NBEdge &e, bool noNames, bool origNames)
Writes an edge (<edge ...)
bool hasDefaultGeometry() const
Returns whether the geometry consists only of the node positions.
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
SUMOReal contPos
custom position for internal junction on this connection
Storage for edges, including some functionality operating on multiple edges.
PositionVector getSubpart(SUMOReal beginOffset, SUMOReal endOffset) const
get subpart of a position vector
const std::string & getStreetName() const
Returns the street name of this edge.
const std::set< EdgeSet > getRoundabouts() const
Returns the determined roundabouts.
static void writePositionLong(const Position &pos, OutputDevice &dev)
Writes the given position to device in long format (one attribute per dimension)
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
std::vector< NBConnection > NBConnectionVector
Definition of a connection vector.
static void normaliseSum(std::vector< T > &v, T msum=1.0)
int size() const
Returns the number of districts inside the container.
LinkDirection getDirection(const NBEdge *const incoming, const NBEdge *const outgoing, bool leftHand=false) const
Returns the representation of the described stream's direction.
std::string origID
An original ID, if given.
const PositionVector & getShape() const
retrieve the junction shape
PositionVector simplified() const
return the same shape with intermediate colinear points removed
NBEdge * getTo() const
returns the to-edge (end of the connection)
int internalLaneIndex
The lane index of this internal lane within the internal edge.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
std::map< NBConnection, NBConnectionVector > NBConnectionProhibits
Definition of a container for connection block dependencies Includes a list of all connections which ...
std::vector< NBTrafficLightLogic * > getComputed() const
Returns a list of all computed logics.
std::string oppositeID
An opposite lane ID, if given.
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges.
const std::vector< Connection > & getConnections() const
Returns the connections.
NBNodeCont & getNodeCont()
Returns the node container.
Instance responsible for building networks.
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
const std::set< NBTrafficLightDefinition * > & getControllingTLS() const
Returns the traffic lights that were assigned to this node.
int tlLinkNo
the traffic light index of this crossing (if controlled)
std::vector< NBEdge * > EdgeVector
static bool writeInternalNodes(OutputDevice &into, const NBNode &n)
Writes internal junctions (<junction with id[0]==':' ...) of the given node.
NBEdge * retrieve(const std::string &id, bool retrieveExtracted=false) const
Returns the edge that has the given id.
const std::vector< NBEdge * > & getSinkEdges() const
Returns the sinks.
A definition of a pedestrian walking area.
A storage for options typed value containers)
SumoXMLNodeType getType() const
Returns the type of this node.
This is an uncontrolled, major link, may pass.
void sortOutgoingConnectionsByIndex()
sorts the outgoing connections by their from-lane-index and their to-lane-index
NBTrafficLightLogicCont & getTLLogicCont()
Returns the traffic light logics container.
The abstract direction of a link.
const Position & getPosition() const
Returns the position of this node.
Represents a single node (junction) during network building.
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=OUTPUT_ACCURACY)
A definition of a pedestrian crossing.
const std::vector< WalkingArea > & getWalkingAreas() const
return this junctions pedestrian walking areas
Static storage of an output device and its base (abstract) implementation.
bool closeTag()
Closes the most recently opened tag.
static const SUMOReal UNSPECIFIED_RADIUS
unspecified lane width
static void writeJunction(OutputDevice &into, const NBNode &n, const bool checkLaneFoes)
Writes a junction (<junction ...)
bool isMacroscopicConnector() const
Returns whether this edge was marked as a macroscopic connector.
NBNode * getFromNode() const
Returns the origin node of the edge.
Container for nodes during the netbuilding process.
std::string getInternalLaneID() const
get ID of internal lnae
SUMOReal getLoadedLength() const
Returns the length was set explicitly or the computed length if it wasn't set.
bool haveVia
check if Connection have a Via
NBDistrictCont & getDistrictCont()
Returns the districts container.
static const std::string MAJOR_VERSION
The version number for written files.
static void writeRoundabouts(OutputDevice &into, const std::set< EdgeSet > &roundabouts, const NBEdgeCont &ec)
Writes roundabouts.
NBNode * getToNode() const
Returns the destination node of the edge.
static std::string writeSUMOTime(SUMOTime time)
writes a SUMOTime as int if possible, otherwise as a float
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
void lf()
writes a line feed if applicable
const SVCPermissions SVC_UNSPECIFIED
SUMOReal width
This lane's width.
static void writeConnection(OutputDevice &into, const NBEdge &from, const NBEdge::Connection &c, bool includeInternal, ConnectionStyle style=SUMONET)
Writes connections outgoing from the given edge (also used in NWWriter_XML)
PositionVector shape
The polygonal shape.
void writeTypes(OutputDevice &into) const
writes all types a s XML
The link has no direction (is a dead end link)
SUMOReal visibility
custom foe visiblity for connection