49 myAdditionalName(additionalName),
50 myBlockMovement(blockMovement),
51 myFirstAdditionalParent(nullptr),
52 mySecondAdditionalParent(nullptr),
54 myChildConnections(this) {
138 for (
auto i : tagProperties) {
141 if (i.second.isOptional() && i.second.hasDefaultValue() && !i.second.isCombinable()) {
143 if (i.second.getDefaultValue() != attribute) {
145 if (i.second.hasAttrSynonym()) {
146 device.
writeAttr(i.second.getAttrSynonym(), attribute);
149 if (i.second.isSVCPermission()) {
170 if (i.second.hasAttrSynonym()) {
171 device.
writeAttr(i.second.getAttrSynonym(), attribute);
174 if (i.second.isSVCPermission()) {
198 deviceChilds.
writeXMLHeader(
"rerouterValue",
"additional_file.xsd");
202 if (i->getSecondAdditionalParent() ==
nullptr) {
203 i->writeAdditional(deviceChilds);
205 i->writeAdditional(deviceChilds);
208 deviceChilds.
close();
212 if (i->getSecondAdditionalParent() ==
nullptr) {
213 i->writeAdditional(device);
215 i->writeAdditional(device);
372 const std::vector<GNEAdditional*>&
382 std::vector<GNEAdditional*> sortedEntryExits;
386 sortedEntryExits.push_back(i);
390 for (
auto i : myAdditionalChilds) {
392 sortedEntryExits.push_back(i);
396 if (sortedEntryExits.size() == myAdditionalChilds.size()) {
397 myAdditionalChilds = sortedEntryExits;
399 throw ProcessError(
"Some additional childs were lost during sorting");
403 std::vector<GNEAdditional*> sortedTAZSourceSink;
407 sortedTAZSourceSink.push_back(i);
411 for (
auto i : myAdditionalChilds) {
413 sortedTAZSourceSink.push_back(i);
417 if (sortedTAZSourceSink.size() == myAdditionalChilds.size()) {
418 myAdditionalChilds = sortedTAZSourceSink;
420 throw ProcessError(
"Some additional childs were lost during sorting");
424 std::vector<std::pair<std::pair<double, double>,
GNEAdditional*> > sortedChilds;
427 sortedChilds.push_back(std::make_pair(std::make_pair(0., 0.), i));
430 sortedChilds.back().first.first = parse<double>(i->getAttribute(
SUMO_ATTR_TIME));
432 sortedChilds.back().first.first = parse<double>(i->getAttribute(
SUMO_ATTR_BEGIN));
436 sortedChilds.back().first.second = parse<double>(i->getAttribute(
SUMO_ATTR_END));
438 sortedChilds.back().first.second = sortedChilds.back().first.first;
442 std::sort(sortedChilds.begin(), sortedChilds.end());
444 if (sortedChilds.size() == myAdditionalChilds.size()) {
445 myAdditionalChilds.clear();
446 for (
auto i : sortedChilds) {
447 myAdditionalChilds.push_back(i.second);
450 throw ProcessError(
"Some additional childs were lost during sorting");
459 std::vector<std::pair<std::pair<double, double>,
GNEAdditional*> > sortedChilds;
462 sortedChilds.push_back(std::make_pair(std::make_pair(0., 0.), i));
465 sortedChilds.back().first.first = parse<double>(i->getAttribute(
SUMO_ATTR_TIME));
467 sortedChilds.back().first.first = parse<double>(i->getAttribute(
SUMO_ATTR_BEGIN));
471 sortedChilds.back().first.second = parse<double>(i->getAttribute(
SUMO_ATTR_END));
473 sortedChilds.back().first.second = sortedChilds.back().first.first;
477 std::sort(sortedChilds.begin(), sortedChilds.end());
479 if (sortedChilds.size() == myAdditionalChilds.size()) {
480 if (sortedChilds.size() <= 1) {
484 for (
int i = 0; i < (int)sortedChilds.size() - 1; i++) {
485 if (sortedChilds.at(i).first.second > sortedChilds.at(i + 1).first.first) {
492 throw ProcessError(
"Some additional childs were lost during sorting");
500 if (edge ==
nullptr) {
513 if (edge ==
nullptr) {
523 const std::vector<GNEEdge*>&
532 if (lane ==
nullptr) {
545 if (lane ==
nullptr) {
555 const std::vector<GNELane*>&
570 new FXMenuCommand(ret, (
"Copy " +
getTagStr() +
" name to clipboard").c_str(),
nullptr, ret,
MID_COPY_NAME);
572 new FXMenuSeparator(ret);
579 new FXMenuSeparator(ret);
586 new FXMenuCommand(ret, (
"Cursor position inner additional: " +
toString(innerPos)).c_str(),
nullptr,
nullptr, 0);
590 new FXMenuCommand(ret, (
"Cursor position over " +
toString(
SUMO_TAG_LANE) +
": " +
toString(innerPos + lanePos)).c_str(),
nullptr,
nullptr, 0);
596 new FXMenuCommand(ret, (
"Cursor position inner additional: " +
toString(innerPos)).c_str(),
nullptr,
nullptr, 0);
600 new FXMenuCommand(ret, (
"Mouse position over " +
toString(
SUMO_TAG_EDGE) +
": " +
toString(innerPos + edgePos)).c_str(),
nullptr,
nullptr, 0);
616 if (i.second.isUnique()) {
645 return Boundary(-0.1, -0.1, 0.1, 0.1);
652 if (edges.size() == 0) {
655 }
else if (edges.size() == 1) {
660 auto it = edges.begin();
661 while (it != edges.end() - 1) {
665 if (currentEdge->
getID() == nextEdge->
getID()) {
674 "' ins't consecutive to " + nextEdge->
getTagStr() +
" '" + nextEdge->
getID() +
"'");
698 shapeRotations.clear();
699 shapeLengths.clear();
700 multiShapeRotations.clear();
701 multiShapeLengths.clear();
702 multiShapeUnified.clear();
709 for (
auto i : multiShape) {
710 multiShapeUnified.append(i);
718 int numberOfSegments = (int)shape.size() - 1;
720 if (numberOfSegments >= 0) {
722 shapeRotations.reserve(numberOfSegments);
723 shapeLengths.reserve(numberOfSegments);
725 for (
int i = 0; i < numberOfSegments; ++i) {
733 shapeRotations.push_back((
double)atan2((s.
x() - f.
x()), (f.
y() - s.
y())) * (double) 180.0 / (
double)
M_PI);
742 std::vector<int> numberOfSegments;
743 for (
auto i : multiShape) {
745 int numSeg = (int)i.size() - 1;
746 numberOfSegments.push_back((numSeg>=0)? numSeg : 0);
747 multiShapeRotations.push_back(std::vector<double>());
748 multiShapeLengths.push_back(std::vector<double>());
751 for (
int i = 0; i < (int)multiShape.size(); i++) {
753 multiShapeRotations.back().reserve(numberOfSegments.at(i));
754 multiShapeLengths.back().reserve(numberOfSegments.at(i));
756 for (
int j = 0; j < numberOfSegments.at(i); j++) {
758 const Position& f = multiShape[i][j];
760 const Position& s = multiShape[i][j + 1];
762 multiShapeLengths.at(i).push_back(f.
distanceTo(s));
764 multiShapeRotations.at(i).push_back((
double)atan2((s.
x() - f.
x()), (f.
y() - s.
y())) * (double) 180.0 / (
double)
M_PI);
771 myAdditional(additional),
780 }
else if (additionalLane) {
803 glRotated(180, 0, 0, 1);
848 for (
auto j : i->getLanes()) {
849 std::pair<Position, double> posRot;
851 if (j->getShape().length() - 6 > 0) {
852 posRot.first = j->getShape().positionAtOffset(j->getShape().length() - 6);
853 posRot.second = j->getShape().rotationDegreeAtOffset(j->getShape().length() - 6);
855 posRot.first = j->getShape().positionAtOffset(j->getShape().length());
856 posRot.second = j->getShape().rotationDegreeAtOffset(j->getShape().length());
864 std::pair<Position, double> posRot;
866 if (i->getShape().length() - 6 > 0) {
867 posRot.first = i->getShape().positionAtOffset(i->getShape().length() - 6);
868 posRot.second = i->getShape().rotationDegreeAtOffset(i->getShape().length() - 6);
870 posRot.first = i->getShape().positionAtOffset(i->getShape().length());
871 posRot.second = i->getShape().rotationDegreeAtOffset(i->getShape().length());
880 std::vector<Position> posConnection;
884 posConnection.push_back(i->getPositionInView());
887 posConnection.push_back(
Position(i->getPositionInView().x() + A, i->getPositionInView().y()));
889 posConnection.push_back(
Position(i->getPositionInView().x(), i->getPositionInView().y() - B));
893 posConnection.push_back(
Position(i->getPositionInView().x(), i->getPositionInView().y() + B));
895 posConnection.push_back(
Position(i->getPositionInView().x() - A, i->getPositionInView().y()));
905 std::vector<Position> posConnection;
909 posConnection.push_back(i.first);
912 posConnection.push_back(
Position(i.first.x() + A, i.first.y()));
914 posConnection.push_back(
Position(i.first.x(), i.first.y() - B));
918 posConnection.push_back(
Position(i.first.x(), i.first.y() + B));
920 posConnection.push_back(
Position(i.first.x() - A, i.first.y()));
939 for (
auto j = i.begin(); (j + 1) != i.end(); j++) {
953 if (i.second.hasDefaultValue()) {
1003 if (oldEdge ==
nullptr) {
1017 if (oldLane ==
nullptr) {
1101 throw ProcessError(
"Calling non-implemented function checkAdditionalChildRestriction during saving of " +
getTagStr() +
". It muss be reimplemented in child class");
1110 result += i.first +
"=" + i.second +
"|";
1113 if (!result.empty()) {
1120 std::vector<std::pair<std::string, std::string> >
1122 std::vector<std::pair<std::string, std::string> > result;
1125 result.push_back(std::make_pair(i.first, i.second));
1136 std::vector<std::string> parsedValues;
1139 parsedValues.push_back(stValues.
next());
1142 for (
auto i : parsedValues) {
1143 std::vector<std::string> parsedParameters;
1146 parsedParameters.push_back(stParam.
next());
1150 setParameter(parsedParameters.front(), parsedParameters.back());
bool mySelected
boolean to check if this AC is selected (instead of GUIGlObjectStorage)
void removeEdgeChild(GNEEdge *edge)
remove edge child
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
virtual void openAdditionalDialog()
open Additional Dialog
const TagProperties & myTagProperty
the xml tag to which this attribute carrier corresponds
void addEdgeChild(GNEEdge *edge)
add edge child
bool hasTagSynonym() const
return true if tag correspond to an element that will be written in XML with another tag ...
virtual void fixAdditionalProblem()
fix additional problem (by default throw an exception, has to be reimplemented in childs) ...
Copy object name - popup entry.
void writePermissions(OutputDevice &into, SVCPermissions permissions)
writes allowed disallowed attributes if needed;
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
void close()
Closes the device and removes it from the dictionary.
SumoXMLTag
Numbers representing SUMO-XML - element names.
GNEEdge * retrieveEdge(const std::string &id, bool failHard=true)
get edge by id
bool isAdditionalBlocked() const
Check if additional item is currently blocked (i.e. cannot be moved with mouse)
SumoXMLTag getTagSynonym() const
get tag synonym
void writeAdditional(OutputDevice &device) const
writte additional element into a xml file
void removeAdditionalChild(GNEAdditional *additional)
remove additional child from this additional
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
void addedLockedObject(const GUIGlObjectType type)
set object selected
PositionVector multiShapeUnified
multi shape unified
const std::vector< GNEEdge * > & getGNEOutgoingEdges() const
Returns incoming GNEEdges.
a source within a district (connection road)
void calculateMultiShapeRotationsAndLengths()
calculate multi shape rotations and lenghts
double z() const
Returns the z-position.
begin/end of the description of a single lane
const std::vector< GNEEdge * > & getEdgeChilds() const
get edge chidls
void setGenericParametersStr(const std::string &value)
set generic parameters in string format
const std::string & getAdditionalID() const
returns Additional ID
const std::vector< GNELane * > & getLaneChilds() const
get lanes of VSS
void changeFirstAdditionalParent(const std::string &newAdditionalParentID)
change first additional parent of additional
std::string secondOriginalPosition
value for saving second original position over lane before moving
GNEAdditional(const std::string &id, GNEViewNet *viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement)
Constructor.
static GUIGlID getTexture(GUITexture which)
returns a texture previously defined in the enum GUITexture
a traffic assignment zone
GNEAdditional * myAdditional
pointer to additional parent
bool canBePlacedOverLane() const
return true if tag correspond to an element that can be placed over a lane
Stores the information about how to visualize structures.
bool hasMinimumNumberOfChilds() const
return true if tag correspond to an element that only have a limited number of childs ...
void select(GUIGlID id, bool update=true)
Adds the object with the given id.
GNEViewParent * getViewParent() const
get the net object
Position offset
The offSet of the block icon.
double y() const
Returns the y-position.
struct with the attribute Properties
std::vector< std::pair< std::string, std::string > > getGenericParameters() const
return generic parameters as vector of pairs format
PositionVector getShape() const
Returns additional element's shape.
void mkItem(const char *name, bool dynamic, ValueSource< T > *src)
Adds a row which obtains its value from a ValueSource.
double x() const
Returns the x-position.
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
method for setting the attribute and letting the object perform additional changes ...
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
weights: time range begin
bool canMaskStartEndPos() const
return true if tag correspond to an element that can mask the attributes "start" and "end" position a...
void unselectAttributeCarrier(bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
FXIcon * getIcon() const
get FXIcon associated to this AC
Position position
position of the block icon
BlockIcon myBlockIcon
variable BlockIcon
void clearGeometry()
reset geometry
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Position originalViewPosition
value for saving first original position over lane before moving
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
BlockIcon(GNEAdditional *additional)
constructor
void setDefaultValues()
change all attributes of additional with their default values (note: this cannot be undo) ...
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
virtual bool checkAdditionalChildRestriction() const
check restriction with the number of childs
static bool isValidGenericParameterKey(const std::string &value)
whether the given string is a valid key for a generic parameter
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.
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
virtual bool isAdditionalValid() const
check if current additional is valid to be writed into XML (by default true, can be reimplemented in ...
void changeAdditionalID(const std::string &newID)
change ID of additional
A class that stores a 2D geometrical boundary.
virtual std::string getAttribute(SumoXMLAttr key) const =0
#define WRITE_WARNING(msg)
static OptionsCont & getOptions()
Retrieves the options.
std::vector< std::pair< Position, double > > symbolsPositionAndRotation
position and rotation of every symbol over lane
double rotation
The rotation of the block icon.
bool isValidDetectorID(const std::string &newID) const
check if a new detector ID is valid
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
virtual std::string getAdditionalProblem() const
return a string with the current additional problem (by default empty, can be reimplemented in childs...
GNEViewNet * myViewNet
The GNEViewNet this additional element belongs.
AdditionalMove myMove
variable AdditionalMove
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
ChildConnections(GNEAdditional *additional)
constructor
bool canBlockMovement() const
return true if tag correspond to an element that can block their movement
bool showLockIcon() const
check if lock icon should be visible
LockGLObjectTypes * getLockGLObjectTypes() const
get selected items
static bool isValidGenericParameterValue(const std::string &value)
whether the given string is a valid value for a generic parameter
void updateAdditionalID(const std::string &oldID, GNEAdditional *additional)
update additional ID in container
void draw() const
draw connections between Parent and childrens
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
void addAdditionalChild(GNEAdditional *additional)
add additional child to this edge
int getNumberOfAttributes() const
get number of attributes
GNEAdditional * getSecondAdditionalParent() const
bool writeXMLHeader(const std::string &rootElement, const std::string &schemaFile, std::map< SumoXMLAttr, std::string > attrs=std::map< SumoXMLAttr, std::string >())
Writes an XML header with optional configuration.
A point in 2D or 3D with translation and scaling methods.
PositionVector shape
The shape of the additional element.
bool canAutomaticSortChilds() const
return true if tag correspond to an element that can sort their childs automatic
std::string myAdditionalName
name of additional
std::vector< PositionVector > connectionPositions
Matrix with the Vertex's positions of connections between parents an their childs.
void removeLockedObject(const GUIGlObjectType type)
set object unselected
void removeGLObjectFromGrid(GUIGlObject *o)
add GL Object into net
static bool isValidDetectorID(const std::string &value)
whether the given string is a valid id for an detector
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
void selectAttributeCarrier(bool changeFlag=true)
GNEJunction * getGNEJunctionDestiny() const
returns the destination-junction
void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
ChildConnections myChildConnections
variable ChildConnections
GNESelectorFrame * getSelectorFrame() const
get frame for GNE_MODE_SELECT
Boundary & grow(double by)
extends the boundary by the given amount
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 removeAdditionalChild(GNEAdditional *additional)
remove additional child from this edge
void sortAdditionalChilds()
sort childs (used by Rerouters and VSS)
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
~GNEAdditional()
Destructor.
std::vector< PositionVector > multiShape
The multi-shape of the additional element (used by certain additionals)
An upper class for objects with additional parameters.
virtual void updateGeometry(bool updateGrid)=0
update pre-computed geometry information
bool myBlockMovement
boolean to check if additional element is blocked (i.e. cannot be moved with mouse) ...
std::vector< GNEAdditional * > myAdditionalChilds
vector with the Additional childs
void calculateShapeRotationsAndLengths()
calculate shape rotations and lenghts
void writeParams(OutputDevice &device) const
write Params in the given outputdevice
begin/end of the description of an edge
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
GNEAdditional * getFirstAdditionalParent() const
A road/street connecting two junctions (netedit-version)
reserved GLO type to pack all additionals
void reset()
Resets the boundary.
void changeSecondAdditionalParent(const std::string &newAdditionalParentID)
change second additional parent of additional
trigger: the time of the step
GNEViewNet * getViewNet() const
Returns a pointer to GNEViewNet in which additional element is located.
const PositionVector & getShape() const
returns the shape of the lane
void deselect(GUIGlID id)
Deselects the object with the given id.
const std::vector< GNELane * > & getLanes()
returns a reference to the lane vector
void buildSelectionACPopupEntry(GUIGLObjectPopupMenu *ret, GNEAttributeCarrier *AC)
Builds an entry which allows to (de)select the object.
double length() const
Returns the length.
virtual void updateAdditionalParent()
update parent after add or remove a child (can be reimplemented, for example used for stadistics) ...
GNEEdge * changeEdge(GNEEdge *oldEdge, const std::string &newEdgeID)
change edge of additional
a sink within a district (connection road)
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
An Element which don't belongs to GNENet but has influency in the simulation.
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
AdditionalGeometry myGeometry
geometry to be precomputed in updateGeometry(...)
const std::string & getTagStr() const
get tag assigned to this object in string format
Boundary movingGeometryBoundary
boundary used during moving of elements (to avoid insertion in RTREE
bool isInitialised() const
check if Boundary is Initialised
std::string getGenericParametersStr() const
return generic parameters in string format
open additional dialog (used in netedit)
GNENet * getNet() const
get the net object
std::string generateAdditionalChildID(SumoXMLTag childTag)
gererate a new ID for an additional child
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.
SumoXMLTag getParentTag() const
if Tag owns a parent, return parent tag
void update()
update Connection's geometry
Static storage of an output device and its base (abstract) implementation.
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
bool hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute attr
const TagProperties & getTagProperty() const
get Tag Property assigned to this object
static bool isRouteValid(const std::vector< GNEEdge *> &edges, bool report)
check if a route is valid
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
bool isValidAdditionalID(const std::string &newID) const
check if a new additional ID is valid
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
static std::string getFilePath(const std::string &path)
Removes the file information from the given path.
void mouseOverObject(const GUIVisualizationSettings &s) const
method for check if mouse is over objects
std::string firstOriginalLanePosition
value for saving first original position over lane before moving
void addAdditionalChild(GNEAdditional *additional)
add additional child to this additional
void removeLaneChild(GNELane *lane)
remove lane child
void endGeometryMoving()
begin movement (used when user click over additional to start a movement, to avoid problems with prob...
bool checkAdditionalChildsOverlapping() const
check if childs are overlapped (Used by Rerouters)
bool hasDialog() const
return true if tag correspond to an element that can be edited using a dialog
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
const std::vector< GNEAdditional * > & getAdditionalChilds() const
return vector of additionals that have as Parent this edge (For example, Calibrators) ...
AdditionalGeometry()
constructor
void addGLObjectIntoGrid(GUIGlObject *o)
add GL Object into net
GUISelectedStorage gSelected
A global holder of selected objects.
GNELane * retrieveLane(const std::string &id, bool failHard=true, bool checkVolatileChange=false)
get lane by id
void startGeometryMoving()
Copy typed object name - popup entry.
A window containing a gl-object's parameter.
GNEAdditional * myAdditional
pointer to additional parent
bool canBePlacedOverLanes() const
return true if tag correspond
GNEAdditional * myFirstAdditionalParent
pointer to first Additional parent
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
GNELane * changeLane(GNELane *oldLane, const std::string &newLaneID)
change lane of additional
void setRotation(GNELane *additionalLane=nullptr)
set Rotation of block Icon (must be called in updateGeometry(bool updateGrid) function) ...
void addLaneChild(GNELane *lane)
add lane child
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
std::vector< GNELane * > myLaneChilds
vector with the lane childs of this additional
void draw(double size=0.5) const
draw lock icon
void calculateMultiShapeUnified()
calculate multi shape unified
void clearParameter()
Clears the parameter map.
GNEAdditional * mySecondAdditionalParent
pointer to second Additional parent
std::vector< GNEEdge * > myEdgeChilds
vector with the edge childs of this additional
virtual Position getPositionInView() const =0
Returns position of additional in view.