Eclipse 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-2019 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 /****************************************************************************/
14 // A abstract class for representation of additional elements
15 /****************************************************************************/
16 #ifndef GNEAdditional_h
17 #define GNEAdditional_h
18 
19 // ===========================================================================
20 // included modules
21 // ===========================================================================
22 
23 #include <config.h>
24 
27 #include <netedit/GNEGeometry.h>
31 
32 // ===========================================================================
33 // class declarations
34 // ===========================================================================
35 
36 class GNEViewNet;
37 class GNENetElement;
39 
40 // ===========================================================================
41 // class definitions
42 // ===========================================================================
43 
49 
50 public:
69  GNEAdditional(const std::string& id, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement,
70  const std::vector<GNEEdge*>& parentEdges,
71  const std::vector<GNELane*>& parentLanes,
72  const std::vector<GNEShape*>& parentShapes,
73  const std::vector<GNEAdditional*>& parentAdditionals,
74  const std::vector<GNEDemandElement*>& parentDemandElements,
75  const std::vector<GNEEdge*>& childEdges,
76  const std::vector<GNELane*>& childLanes,
77  const std::vector<GNEShape*>& childShapes,
78  const std::vector<GNEAdditional*>& childAdditionals,
79  const std::vector<GNEDemandElement*>& childDemandElements);
80 
99  GNEAdditional(GNEAdditional* additionalParent, GNEViewNet* viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement,
100  const std::vector<GNEEdge*>& parentEdges,
101  const std::vector<GNELane*>& parentLanes,
102  const std::vector<GNEShape*>& parentShapes,
103  const std::vector<GNEAdditional*>& parentAdditionals,
104  const std::vector<GNEDemandElement*>& parentDemandElements,
105  const std::vector<GNEEdge*>& childEdges,
106  const std::vector<GNELane*>& childLanes,
107  const std::vector<GNEShape*>& childShapes,
108  const std::vector<GNEAdditional*>& childAdditionals,
109  const std::vector<GNEDemandElement*>& childDemandElements);
110 
112  ~GNEAdditional();
113 
115  std::string generateChildID(SumoXMLTag childTag);
116 
119 
122 
124  void setSpecialColor(const RGBColor* color);
125 
128 
131  void writeAdditional(OutputDevice& device) const;
132 
134  virtual bool isAdditionalValid() const;
135 
137  virtual std::string getAdditionalProblem() const;
138 
140  virtual void fixAdditionalProblem();
142 
147  virtual void openAdditionalDialog();
148 
152  void startGeometryMoving();
153 
155  void endGeometryMoving();
156 
160  virtual void moveGeometry(const Position& offset) = 0;
161 
165  virtual void commitGeometryMoving(GNEUndoList* undoList) = 0;
166 
168  virtual void updateGeometry() = 0;
169 
171  virtual Position getPositionInView() const = 0;
172 
174  virtual Boundary getCenteringBoundary() const = 0;
175 
177  virtual void splitEdgeGeometry(const double splitPosition, const GNENetElement* originalElement, const GNENetElement* newElement, GNEUndoList* undoList) = 0;
179 
181  GNEViewNet* getViewNet() const;
182 
184  bool isAdditionalBlocked() const;
185 
188 
197 
206 
208  const std::string& getOptionalAdditionalName() const;
209 
214  virtual void drawGL(const GUIVisualizationSettings& s) const = 0;
216 
220  void selectAttributeCarrier(bool changeFlag = true);
221 
223  void unselectAttributeCarrier(bool changeFlag = true);
224 
226  bool isAttributeCarrierSelected() const;
227 
229  bool drawUsingSelectColor() const;
230 
231  /* @brief method for getting the Attribute of an XML key
232  * @param[in] key The attribute key
233  * @return string with the value associated to key
234  */
235  virtual std::string getAttribute(SumoXMLAttr key) const = 0;
236 
237  /* @brief method for getting the Attribute of an XML key in double format (to avoid unnecessary parse<double>(...) for certain attributes)
238  * @param[in] key The attribute key
239  * @return double with the value associated to key
240  */
241  virtual double getAttributeDouble(SumoXMLAttr key) const = 0;
242 
248  virtual void setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) = 0;
249 
255  virtual bool isValid(SumoXMLAttr key, const std::string& value) = 0;
256 
257  /* @brief method for enable attribute
258  * @param[in] key The attribute key
259  * @param[in] undoList The undoList on which to register changes
260  * @note certain attributes can be only enabled, and can produce the disabling of other attributes
261  */
262  void enableAttribute(SumoXMLAttr key, GNEUndoList* undoList);
263 
264  /* @brief method for disable attribute
265  * @param[in] key The attribute key
266  * @param[in] undoList The undoList on which to register changes
267  * @note certain attributes can be only enabled, and can produce the disabling of other attributes
268  */
269  void disableAttribute(SumoXMLAttr key, GNEUndoList* undoList);
270 
271  /* @brief method for check if the value for certain attribute is set
272  * @param[in] key The attribute key
273  */
274  virtual bool isAttributeEnabled(SumoXMLAttr key) const = 0;
275 
277  virtual std::string getPopUpID() const = 0;
278 
280  virtual std::string getHierarchyName() const = 0;
282 
283 protected:
284 
286  struct AdditionalMove {
289 
292 
295 
298 
299  private:
301  AdditionalMove& operator=(const AdditionalMove& other) = delete;
302 
303  };
304 
306  struct BlockIcon {
308  BlockIcon(GNEAdditional* additional);
309 
311  void setRotation(GNELane* additionalLane = nullptr);
312 
314  void drawIcon(const GUIVisualizationSettings& s, const double exaggeration, const double size = 0.5) const;
315 
316  public:
319 
322 
324  double rotation;
325 
326  private:
329 
331  BlockIcon& operator=(const BlockIcon& other) = delete;
332  };
333 
336 
339 
342 
345 
347  std::string myAdditionalName;
348 
351 
354 
357 
359  void setDefaultValues();
360 
364  const std::string& getAdditionalID() const;
365 
367  bool isValidAdditionalID(const std::string& newID) const;
368 
370  bool isValidDetectorID(const std::string& newID) const;
371 
376  void changeAdditionalID(const std::string& newID);
377 
379 
380 private:
384  virtual bool checkChildAdditionalRestriction() const;
385 
387  virtual void setAttribute(SumoXMLAttr key, const std::string& value) = 0;
388 
390  void setEnabledAttribute(const int enabledAttributes);
391 
393  GNEAdditional(const GNEAdditional&) = delete;
394 
396  GNEAdditional& operator=(const GNEAdditional&) = delete;
397 };
398 
399 #endif
GNEAdditional::writeAdditional
void writeAdditional(OutputDevice &device) const
writte additional element into a xml file
Definition: GNEAdditional.cpp:124
GNEAdditional::enableAttribute
void enableAttribute(SumoXMLAttr key, GNEUndoList *undoList)
Definition: GNEAdditional.cpp:564
GNEAdditional::isAdditionalBlocked
bool isAdditionalBlocked() const
Check if additional item is currently blocked (i.e. cannot be moved with mouse)
Definition: GNEAdditional.cpp:313
GNEAdditional::BlockIcon::position
Position position
position of the block icon
Definition: GNEAdditional.h:318
GUIGlObject.h
GNEAdditional::getPositionInView
virtual Position getPositionInView() const =0
Returns position of additional in view.
GNEAdditional
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:48
GUIParameterTableWindow
A window containing a gl-object's parameter.
Definition: GUIParameterTableWindow.h:62
GNEAdditional::GNEAdditional
GNEAdditional(const std::string &id, GNEViewNet *viewNet, GUIGlObjectType type, SumoXMLTag tag, std::string additionalName, bool blockMovement, const std::vector< GNEEdge * > &parentEdges, const std::vector< GNELane * > &parentLanes, const std::vector< GNEShape * > &parentShapes, const std::vector< GNEAdditional * > &parentAdditionals, const std::vector< GNEDemandElement * > &parentDemandElements, const std::vector< GNEEdge * > &childEdges, const std::vector< GNELane * > &childLanes, const std::vector< GNEShape * > &childShapes, const std::vector< GNEAdditional * > &childAdditionals, const std::vector< GNEDemandElement * > &childDemandElements)
Constructor.
Definition: GNEAdditional.cpp:44
GNEAdditional::getPopUpID
virtual std::string getPopUpID() const =0
get PopPup ID (Used in AC Hierarchy)
GNEAdditional::getAdditionalID
const std::string & getAdditionalID() const
Definition: GNEAdditional.cpp:476
Parameterised
An upper class for objects with additional parameters.
Definition: Parameterised.h:42
GUISUMOAbstractView
Definition: GUISUMOAbstractView.h:72
GNEAdditional::getCenteringBoundary
virtual Boundary getCenteringBoundary() const =0
Returns the boundary to which the view shall be centered in order to show the object.
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:63
GNEAdditional::BlockIcon::setRotation
void setRotation(GNELane *additionalLane=nullptr)
set Rotation of block Icon (must be called in updateGeometry() function)
Definition: GNEAdditional.cpp:400
GNEAdditional::AdditionalMove::movingGeometryBoundary
Boundary movingGeometryBoundary
boundary used during moving of elements (to avoid insertion in RTREE
Definition: GNEAdditional.h:288
GNEAdditional::generateChildID
std::string generateChildID(SumoXMLTag childTag)
gererate a new ID for an element child
Definition: GNEAdditional.cpp:96
GNEHierarchicalParentElements.h
GNEHierarchicalChildElements.h
GNEAdditional::setDefaultValues
void setDefaultValues()
change all attributes of additional with their default values (note: this cannot be undo)
Definition: GNEAdditional.cpp:465
GNEViewNet
Definition: GNEViewNet.h:42
GNEAdditional::setAttribute
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
method for setting the attribute and letting the object perform additional changes
GNEAdditional::isAdditionalValid
virtual bool isAdditionalValid() const
check if current additional is valid to be writed into XML (by default true, can be reimplemented in ...
Definition: GNEAdditional.cpp:227
GNEAdditional::drawGL
virtual void drawGL(const GUIVisualizationSettings &s) const =0
Draws the object.
GNEAdditional::BlockIcon
struct for pack all variables and functions related with Block Icon
Definition: GNEAdditional.h:306
GNEAdditional::changeAdditionalID
void changeAdditionalID(const std::string &newID)
change ID of additional
Definition: GNEAdditional.cpp:502
GUIGLObjectPopupMenu
The popup menu of a globject.
Definition: GUIGLObjectPopupMenu.h:47
GNEAdditional::unselectAttributeCarrier
void unselectAttributeCarrier(bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
Definition: GNEAdditional.cpp:532
GNEAdditional::AdditionalMove::secondOriginalPosition
std::string secondOriginalPosition
value for saving second original position over lane before moving
Definition: GNEAdditional.h:297
GNEAdditional::myBlockIcon
BlockIcon myBlockIcon
variable BlockIcon
Definition: GNEAdditional.h:353
GNEAdditional::BlockIcon::myAdditional
GNEAdditional * myAdditional
pointer to parent additional
Definition: GNEAdditional.h:328
SumoXMLTag
SumoXMLTag
Numbers representing SUMO-XML - element names.
Definition: SUMOXMLDefinitions.h:41
GNEAdditional::getPopUpMenu
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
Definition: GNEAdditional.cpp:319
GNEAdditional::getAdditionalProblem
virtual std::string getAdditionalProblem() const
return a string with the current additional problem (by default empty, can be reimplemented in childr...
Definition: GNEAdditional.cpp:233
GNEAdditional::mySpecialColor
const RGBColor * mySpecialColor
pointer to special color (used for drawing Additional with a certain color, mainly used for selection...
Definition: GNEAdditional.h:356
GNEAdditional::myMove
AdditionalMove myMove
variable AdditionalMove
Definition: GNEAdditional.h:344
GNEHierarchicalChildElements
An special type of Attribute carrier that owns hierarchical elements.
Definition: GNEHierarchicalChildElements.h:45
GNEAdditional::myViewNet
GNEViewNet * myViewNet
The GNEViewNet this additional element belongs.
Definition: GNEAdditional.h:335
GNEAdditional::getAdditionalSegmentGeometry
const GNEGeometry::SegmentGeometry & getAdditionalSegmentGeometry() const
obtain additional segment geometry
Definition: GNEAdditional.cpp:112
GUIGlObjectType
GUIGlObjectType
Definition: GUIGlObjectTypes.h:39
GNEAdditional::isAttributeCarrierSelected
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
Definition: GNEAdditional.cpp:548
RGBColor
Definition: RGBColor.h:39
GNEAdditional::getAttribute
virtual std::string getAttribute(SumoXMLAttr key) const =0
GNEGeometry::SegmentGeometry
struct for pack all variables related with geometry of elemements divided in segments
Definition: GNEGeometry.h:116
GNEAdditional::isValidDetectorID
bool isValidDetectorID(const std::string &newID) const
check if a new detector ID is valid
Definition: GNEAdditional.cpp:492
GNEAdditional::setEnabledAttribute
void setEnabledAttribute(const int enabledAttributes)
method for enabling the attribute and nothing else (used in GNEChange_EnableAttribute)
Definition: GNEAdditional.cpp:583
GNEAdditional::getHierarchyName
virtual std::string getHierarchyName() const =0
get Hierarchy Name (Used in AC Hierarchy)
GNEAdditional::getAdditionalGeometry
const GNEGeometry::Geometry & getAdditionalGeometry() const
obtain additional geometry
Definition: GNEAdditional.cpp:106
Parameterised.h
GNEAdditional::BlockIcon::BlockIcon
BlockIcon(GNEAdditional *additional)
constructor
Definition: GNEAdditional.cpp:394
GNEAdditional::selectAttributeCarrier
void selectAttributeCarrier(bool changeFlag=true)
Definition: GNEAdditional.cpp:517
GNEAdditional::AdditionalMove::operator=
AdditionalMove & operator=(const AdditionalMove &other)=delete
Invalidated assignment operator.
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
GNEAdditional::myAdditionalGeometry
GNEGeometry::Geometry myAdditionalGeometry
geometry to be precomputed in updateGeometry(...)
Definition: GNEAdditional.h:338
GNEAdditional::myAdditionalName
std::string myAdditionalName
name of additional
Definition: GNEAdditional.h:347
GNEGeometry::Geometry
struct for pack all variables related with geometry of stop
Definition: GNEGeometry.h:56
GNENetElement
Definition: GNENetElement.h:43
GNEAdditional::getParameterWindow
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Definition: GNEAdditional.cpp:367
GNEAdditional::getAttributeDouble
virtual double getAttributeDouble(SumoXMLAttr key) const =0
GUIGlObject
Definition: GUIGlObject.h:65
GNEAdditional::myBlockMovement
bool myBlockMovement
boolean to check if additional element is blocked (i.e. cannot be moved with mouse)
Definition: GNEAdditional.h:350
GNEAdditional::BlockIcon::rotation
double rotation
The rotation of the block icon.
Definition: GNEAdditional.h:324
GNEAdditional::~GNEAdditional
~GNEAdditional()
Destructor.
Definition: GNEAdditional.cpp:92
GNEAdditional::setSpecialColor
void setSpecialColor(const RGBColor *color)
set special color
Definition: GNEAdditional.cpp:118
GNEAdditional::BlockIcon::drawIcon
void drawIcon(const GUIVisualizationSettings &s, const double exaggeration, const double size=0.5) const
draw lock icon
Definition: GNEAdditional.cpp:416
GNEGeometry.h
GNEAdditional::disableAttribute
void disableAttribute(SumoXMLAttr key, GNEUndoList *undoList)
Definition: GNEAdditional.cpp:570
GUIMainWindow
Definition: GUIMainWindow.h:46
GNEAdditional::checkChildAdditionalRestriction
virtual bool checkChildAdditionalRestriction() const
check restriction with the number of children
Definition: GNEAdditional.cpp:576
GNEAdditional::getOptionalAdditionalName
const std::string & getOptionalAdditionalName() const
Returns the additional name.
Definition: GNEAdditional.cpp:386
GNEAdditional::getViewNet
GNEViewNet * getViewNet() const
Returns a pointer to GNEViewNet in which additional element is located.
Definition: GNEAdditional.cpp:307
GNEAdditional::drawUsingSelectColor
bool drawUsingSelectColor() const
check if attribute carrier must be drawn using selecting color.
Definition: GNEAdditional.cpp:554
GNEHierarchicalParentElements
An special type of Attribute carrier that owns hierarchical elements.
Definition: GNEHierarchicalParentElements.h:49
GNEAdditional::commitGeometryMoving
virtual void commitGeometryMoving(GNEUndoList *undoList)=0
commit geometry changes in the attributes of an element after use of moveGeometry(....
GNEAdditional::moveGeometry
virtual void moveGeometry(const Position &offset)=0
change the position of the element geometry without saving in undoList
GNEAdditional::isAttributeEnabled
virtual bool isAttributeEnabled(SumoXMLAttr key) const =0
config.h
GNEAdditional::endGeometryMoving
void endGeometryMoving()
begin movement (used when user click over additional to start a movement, to avoid problems with prob...
Definition: GNEAdditional.cpp:286
GNEUndoList
Definition: GNEUndoList.h:48
GNEAdditional::BlockIcon::operator=
BlockIcon & operator=(const BlockIcon &other)=delete
Invalidated assignment operator.
GNEAdditional::startGeometryMoving
void startGeometryMoving()
Definition: GNEAdditional.cpp:251
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
GNEAdditional::mySegmentGeometry
GNEGeometry::SegmentGeometry mySegmentGeometry
segment geometry to be precomputed in updateGeometry(...) (used by E2Multilane)
Definition: GNEAdditional.h:341
GNEAdditional::isValidAdditionalID
bool isValidAdditionalID(const std::string &newID) const
check if a new additional ID is valid
Definition: GNEAdditional.cpp:482
SumoXMLAttr
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
Definition: SUMOXMLDefinitions.h:372
GNEAdditional::updateGeometry
virtual void updateGeometry()=0
update pre-computed geometry information
GNEAdditional::AdditionalMove::originalViewPosition
Position originalViewPosition
value for saving first original position over lane before moving
Definition: GNEAdditional.h:291
PositionVector.h
GNEAdditional::operator=
GNEAdditional & operator=(const GNEAdditional &)=delete
Invalidated assignment operator.
GNEAdditional::AdditionalMove::firstOriginalLanePosition
std::string firstOriginalLanePosition
value for saving first original position over lane before moving
Definition: GNEAdditional.h:294
GNELane
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:45
GNEAdditional::isValid
virtual bool isValid(SumoXMLAttr key, const std::string &value)=0
method for checking if the key and their conrrespond attribute are valids
GNEAttributeCarrier
Definition: GNEAttributeCarrier.h:54
GNEAdditional::openAdditionalDialog
virtual void openAdditionalDialog()
open Additional Dialog
Definition: GNEAdditional.cpp:245
GNEAdditional::splitEdgeGeometry
virtual void splitEdgeGeometry(const double splitPosition, const GNENetElement *originalElement, const GNENetElement *newElement, GNEUndoList *undoList)=0
split geometry
GNEAdditional::fixAdditionalProblem
virtual void fixAdditionalProblem()
fix additional problem (by default throw an exception, has to be reimplemented in children)
Definition: GNEAdditional.cpp:239
GNEAdditional::BlockIcon::offset
Position offset
The offSet of the block icon.
Definition: GNEAdditional.h:321
GNEAdditional::AdditionalMove
struct for pack all variables related with additional move
Definition: GNEAdditional.h:286