SUMO - Simulation of Urban MObility
GNEAdditional.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2018 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // A abstract class for representation of additional elements
16 /****************************************************************************/
17 #ifndef GNEAdditional_h
18 #define GNEAdditional_h
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 
24 #include <config.h>
25 
26 #include <string>
27 #include <vector>
33 
34 // ===========================================================================
35 // class declarations
36 // ===========================================================================
37 
39 class GNEEdge;
40 class GNELane;
41 class GNENet;
42 class GNEViewNet;
44 
45 // ===========================================================================
46 // class definitions
47 // ===========================================================================
48 
54 
55 public:
64  GNEAdditional(const std::string& id, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement);
65 
74  GNEAdditional(GNEAdditional* singleAdditionalParent, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement);
75 
85  GNEAdditional(GNEAdditional* firstAdditionalParent, GNEAdditional* secondAdditionalParent, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement);
86 
96  GNEAdditional(const std::string& id, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement, std::vector<GNEEdge*> edgeChilds);
97 
107  GNEAdditional(const std::string& id, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement, std::vector<GNELane*> laneChilds);
108 
110  ~GNEAdditional();
111 
115  void writeAdditional(OutputDevice& device) const;
116 
121  virtual void openAdditionalDialog();
122 
126  void startGeometryMoving();
127 
129  void endGeometryMoving();
130 
135  virtual void moveGeometry(const Position& oldPos, const Position& offset) = 0;
136 
141  virtual void commitGeometryMoving(const Position& oldPos, GNEUndoList* undoList) = 0;
142 
144  virtual void updateGeometry(bool updateGrid) = 0;
145 
147  virtual Position getPositionInView() const = 0;
149 
151  GNEViewNet* getViewNet() const;
152 
154  PositionVector getShape() const;
155 
157  bool isAdditionalBlocked() const;
158 
159  // @brief get first additional parent
161 
162  // @brief get second additional parent
164 
166  std::string generateAdditionalChildID(SumoXMLTag childTag);
167 
170 
172  void addAdditionalChild(GNEAdditional* additional);
173 
175  void removeAdditionalChild(GNEAdditional* additional);
176 
178  const std::vector<GNEAdditional*>& getAdditionalChilds() const;
179 
181  void sortAdditionalChilds();
182 
185 
187  void addEdgeChild(GNEEdge* edge);
188 
190  void removeEdgeChild(GNEEdge* edge);
191 
193  const std::vector<GNEEdge*>& getEdgeChilds() const;
194 
196  void addLaneChild(GNELane* lane);
197 
199  void removeLaneChild(GNELane* lane);
200 
202  const std::vector<GNELane*>& getLaneChilds() const;
203 
205 
208 
217 
226 
231 
236  virtual void drawGL(const GUIVisualizationSettings& s) const = 0;
238 
242  void selectAttributeCarrier(bool changeFlag = true);
243 
245  void unselectAttributeCarrier(bool changeFlag = true);
246 
248  bool isAttributeCarrierSelected() const;
249 
250  /* @brief method for getting the Attribute of an XML key
251  * @param[in] key The attribute key
252  * @return string with the value associated to key
253  */
254  virtual std::string getAttribute(SumoXMLAttr key) const = 0;
255 
261  virtual void setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) = 0;
262 
268  virtual bool isValid(SumoXMLAttr key, const std::string& value) = 0;
269 
271  virtual std::string getPopUpID() const = 0;
272 
274  virtual std::string getHierarchyName() const = 0;
276 
279 
281  bool addGenericParameter(const std::string& key, const std::string& value);
282 
284  bool removeGenericParameter(const std::string& key);
285 
287  bool updateGenericParameter(const std::string& oldKey, const std::string& newKey);
288 
290  bool updateGenericParameterValue(const std::string& key, const std::string& newValue);
291 
293  std::string getGenericParametersStr() const;
294 
296  std::vector<std::pair<std::string, std::string> > getGenericParameters() const;
297 
299  void setGenericParametersStr(const std::string& value);
300 
302 
307  static bool isRouteValid(const std::vector<GNEEdge*>& edges, bool report);
308 
309 protected:
312 
317 
320 
322  std::string myAdditionalName;
323 
327  std::vector<double> myShapeRotations;
328 
330  std::vector<double> myShapeLengths;
332 
335 
338 
341 
343  std::vector<GNEAdditional*> myAdditionalChilds;
344 
346  std::vector<GNEEdge*> myEdgeChilds;
347 
349  std::vector<GNELane*> myLaneChilds;
350 
352  void setDefaultValues();
353 
357  void setBlockIconRotation(GNELane* additionalLane = nullptr);
358 
360  void drawLockIcon(double size = 0.5) const;
361 
364 
367 
371 
374 
376  const std::string& getAdditionalID() const;
377 
379  bool isValidAdditionalID(const std::string& newID) const;
380 
385  void changeAdditionalID(const std::string& newID);
386 
391  GNEEdge* changeEdge(GNEEdge* oldEdge, const std::string& newEdgeID);
392 
397  GNELane* changeLane(GNELane* oldLane, const std::string& newLaneID);
398 
403  void changeFirstAdditionalParent(const std::string& newAdditionalParentID);
404 
409  void changeSecondAdditionalParent(const std::string& newAdditionalParentID);
410 
412 
415 
417  void updateChildConnections();
418 
420  void drawChildConnections() const;
421 
423  std::vector<std::pair<Position, double> > mySymbolsPositionAndRotation;
424 
426  std::vector<PositionVector> myChildConnectionPositions;
427 
429 
430 private:
434  virtual bool checkAdditionalChildRestriction() const;
435 
437  virtual void setAttribute(SumoXMLAttr key, const std::string& value) = 0;
438 
440  void mouseOverObject(const GUIVisualizationSettings& s) const;
441 
443  GNEAdditional(const GNEAdditional&) = delete;
444 
446  GNEAdditional& operator=(const GNEAdditional&) = delete;
447 };
448 
449 #endif
void removeEdgeChild(GNEEdge *edge)
remove edge child
virtual std::string getPopUpID() const =0
get PopPup ID (Used in AC Hierarchy)
virtual bool isValid(SumoXMLAttr key, const std::string &value)=0
method for checking if the key and their conrrespond attribute are valids
virtual void openAdditionalDialog()
open Additional Dialog
bool updateGenericParameter(const std::string &oldKey, const std::string &newKey)
update generic parameter
void addEdgeChild(GNEEdge *edge)
add edge child
SumoXMLTag
Numbers representing SUMO-XML - element names.
bool isAdditionalBlocked() const
Check if additional item is currently blocked (i.e. cannot be moved with mouse)
void setBlockIconRotation(GNELane *additionalLane=nullptr)
void writeAdditional(OutputDevice &device) const
writte additional element into a xml file
void removeAdditionalChild(GNEAdditional *additional)
remove additional child from this additional
GUIGlObjectType
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
GNEAdditional(const std::string &id, GNEViewNet *viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement)
Constructor.
Boundary myMovingGeometryBoundary
boundary used during moving of elements
Stores the information about how to visualize structures.
std::vector< std::pair< std::string, std::string > > getGenericParameters() const
return generic parameters as vector of pairs format
Dialog to edit sequences, parameters, etc.. of Additionals.
PositionVector getShape() const
Returns additional element&#39;s shape.
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
method for setting the attribute and letting the object perform additional changes ...
virtual void drawGL(const GUIVisualizationSettings &s) const =0
Draws the object.
void unselectAttributeCarrier(bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:80
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:47
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
void setDefaultValues()
change all attributes of additional with their default values (note: this cannot be undo) ...
virtual bool checkAdditionalChildRestriction() const
check restriction with the number of childs
std::vector< double > myShapeRotations
bool removeGenericParameter(const std::string &key)
remove generic parameter
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
void changeAdditionalID(const std::string &newID)
change ID of additional
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:42
std::vector< PositionVector > myChildConnectionPositions
Matrix with the Vertex&#39;s positions of connections between parents an their childs.
virtual std::string getAttribute(SumoXMLAttr key) const =0
virtual void commitGeometryMoving(const Position &oldPos, GNEUndoList *undoList)=0
commit geometry changes in the attributes of an element after use of moveGeometry(...)
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
virtual std::string getHierarchyName() const =0
get Hierarchy Name (Used in AC Hierarchy)
GNEViewNet * myViewNet
The GNEViewNet this additional element belongs.
void drawChildConnections() const
draw connections between Parent and childrens
void drawLockIcon(double size=0.5) const
draw lock icon
PositionVector myShape
The shape of the additional element.
GNEAdditional * getSecondAdditionalParent() const
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
A list of positions.
std::string myAdditionalName
name of additional
bool updateGenericParameterValue(const std::string &key, const std::string &newValue)
update value generic parameter
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
void selectAttributeCarrier(bool changeFlag=true)
virtual void moveGeometry(const Position &oldPos, const Position &offset)=0
change the position of the element geometry without saving in undoList
std::vector< double > myShapeLengths
The lengths of the shape parts.
void updateChildConnections()
update Connection&#39;s geometry
void sortAdditionalChilds()
sort childs (used by Rerouters and VSS)
~GNEAdditional()
Destructor.
An upper class for objects with additional parameters.
Definition: Parameterised.h:44
virtual void updateGeometry(bool updateGrid)=0
update pre-computed geometry information
Position myBlockIconOffset
The offSet of the block icon.
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
GNEAdditional * getFirstAdditionalParent() const
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:50
void changeSecondAdditionalParent(const std::string &newAdditionalParentID)
change second additional parent of additional
GNEViewNet * getViewNet() const
Returns a pointer to GNEViewNet in which additional element is located.
GNEEdge * changeEdge(GNEEdge *oldEdge, const std::string &newEdgeID)
change edge of additional
An Element which don&#39;t belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:53
std::vector< std::pair< Position, double > > mySymbolsPositionAndRotation
position and rotation of every simbol over lane
The popup menu of a globject.
std::string getGenericParametersStr() const
return generic parameters in string format
std::string generateAdditionalChildID(SumoXMLTag childTag)
gererate a new ID for an additional child
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
static bool isRouteValid(const std::vector< GNEEdge *> &edges, bool report)
check if a route is valid
bool isValidAdditionalID(const std::string &newID) const
check if a new additional ID is valid
void mouseOverObject(const GUIVisualizationSettings &s) const
method for check if mouse is over objects
GNEAdditional & operator=(const GNEAdditional &)=delete
Invalidated assignment operator.
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)
const std::vector< GNEAdditional * > & getAdditionalChilds() const
return vector of additionals that have as Parent this edge (For example, Calibrators) ...
void startGeometryMoving()
A window containing a gl-object&#39;s parameter.
double myBlockIconRotation
The rotation of the block icon.
GNEAdditional * myFirstAdditionalParent
pointer to first Addititional parent
GNELane * changeLane(GNELane *oldLane, const std::string &newLaneID)
change lane of additional
void addLaneChild(GNELane *lane)
add lane child
Position myBlockIconPosition
position of the block icon
std::vector< GNELane * > myLaneChilds
vector with the lane childs of this additional
bool addGenericParameter(const std::string &key, const std::string &value)
add generic parameter
GNEAdditional * mySecondAdditionalParent
pointer to second Addititional parent
std::vector< GNEEdge * > myEdgeChilds
vector with the edge childs of this additional
virtual Position getPositionInView() const =0
Returns position of additional in view.