48 const RGBColor& color,
double layer,
double angle,
const std::string& imgFile,
bool relativePath,
bool movementBlocked,
bool shapeBlocked) :
49 GUIPolygon(id, type, color, shape, geo, fill, lineWidth, layer, angle, imgFile, relativePath),
50 GNEShape(net,
SUMO_TAG_POLY, movementBlocked, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}),
62 for (
int i = 0; i < (int)
myGeoShape.size(); i++) {
107 if (index < (
int)
myShape.size()) {
169 if (shapeToCommit.size() > 1 && shapeToCommit.front().distanceTo2D(shapeToCommit.back()) < (2 *
myHintSize)) {
170 shapeToCommit.pop_back();
171 shapeToCommit.push_back(shapeToCommit.front());
243 simplifyShape->disable();
248 new FXMenuCommand(ret,
"Open shape\t\tOpen polygon's shape",
nullptr, &parent,
MID_GNE_POLYGON_OPEN);
250 new FXMenuCommand(ret,
"Close shape\t\tClose polygon's shape",
nullptr, &parent,
MID_GNE_POLYGON_CLOSE);
260 removeGeometryPoint->disable();
264 setFirstPoint->disable();
294 double circleWidthSquared = circleWidth * circleWidth;
298 if (s.
scale * circleWidth > 1.) {
300 bool mouseOverVertex =
false;
305 RGBColor invertedColor, darkerColor;
328 if (modeMove && (i.distanceTo(mousePosition) < circleWidth)) {
329 mouseOverVertex =
true;
341 glTranslated(i.x(), i.y(),
getType() + 1);
362 if (modeMove && (mouseOverVertex ==
false) && (
myBlockMovement ==
false) && (distanceToShape < circleWidth)) {
365 Position hintPos = myShape.size() > 1 ? myShape.positionAtOffset2D(myShape.nearest_offset_to_point2D(mousePosition)) : myShape[0];
393 return myShape.indexOfClosest(i);
397 if (createIfNoExist) {
398 return myShape.insertAtClosest(pos);
412 if (
myClosedShape && (index == 0 || index == (
int)modifiedShape.size() - 1) && (
myShape.size() > 2)) {
413 modifiedShape.erase(modifiedShape.begin());
414 modifiedShape.erase(modifiedShape.end() - 1);
415 modifiedShape.push_back(modifiedShape.front());
417 modifiedShape.erase(modifiedShape.begin() + index);
517 if (oldIndex >= (
int)
myShape.size()) {
519 }
else if (oldIndex == 0) {
520 WRITE_WARNING(
"Selected point must be different of the first point")
524 for (
int i = oldIndex; i < (int)
myShape.size(); i++) {
525 newShape.push_back(
myShape[i]);
528 for (
int i = 1; i < oldIndex; i++) {
529 newShape.push_back(
myShape[i]);
531 newShape.push_back(newShape.front());
533 for (
int i = 0; i < oldIndex; i++) {
534 newShape.push_back(
myShape[i]);
567 simplifiedShape.push_back(simplifiedShape[0]);
570 simplifiedShape.push_back(
myShape.front());
571 simplifiedShape.push_back(
myShape.back());
683 return canParse<PositionVector>(value);
686 return canParse<RGBColor>(value);
688 return canParse<bool>(value);
690 return canParse<double>(value) && (parse<double>(value) >= 0);
692 if (value ==
"default") {
695 return canParse<double>(value);
707 return canParse<bool>(value);
709 return canParse<double>(value);
711 return canParse<bool>(value);
713 return canParse<bool>(value);
715 return canParse<bool>(value);
717 if (canParse<bool>(value)) {
732 return canParse<bool>(value);
746 result += i.first +
"=" + i.second +
"|";
749 if (!result.empty()) {
756 std::vector<std::pair<std::string, std::string> >
758 std::vector<std::pair<std::string, std::string> > result;
761 result.push_back(std::make_pair(i.first, i.second));
772 std::vector<std::string> parsedValues;
775 parsedValues.push_back(stValues.
next());
778 for (
auto i : parsedValues) {
779 std::vector<std::string> parsedParameters;
782 parsedParameters.push_back(stParam.
next());
786 setParameter(parsedParameters.front(), parsedParameters.back());
803 std::string oldID =
myID;
811 myShape = parse<PositionVector>(value);
814 for (
int i = 0; i < (int) myGeoShape.size(); i++) {
832 for (
int i = 0; i < (int) myShape.size(); i++) {
849 myFill = parse<bool>(value);
855 if (value ==
"default") {
876 myGEO = parse<bool>(value);
897 if (parse<bool>(value)) {
PositionVector myShape
The positions of the polygon.
void endGeometryMoving()
begin movement (used when user click over edge to start a movement, to avoid problems with problems w...
static const RGBColor BLUE
double myLineWidth
The line width for drawing an unfilled polygon.
double ymin() const
Returns minimum y-coordinate.
SumoXMLTag
Numbers representing SUMO-XML - element names.
void openPolygon(bool allowUndo=true)
open polygon
double xmax() const
Returns maximum x-coordinate.
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.
double scale
information about a lane's width (temporary, used for a single view)
bool myGEO
specify if shape is handled as GEO coordinate (Main used in netedit)
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
std::string next()
returns the next substring when it exists. Otherwise the behaviour is undefined
bool myFill
Information whether the polygon has to be filled.
void drawInnerPolygon(const GUIVisualizationSettings &s, bool disableSelectionColor) const
draw inner Polygon (before pushName() )
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
const std::string & getShapeImgFile() const
Returns the imgFile of the Shape.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
double distance2D(const Position &p, bool perpendicular=false) const
closest 2D-distance to point p (or -1 if perpendicular is true and the point is beyond this vector) ...
std::string generateChildID(SumoXMLTag childTag)
gererate a new ID for an element child
block shape of a graphic element (Used mainly in GNEShapes)
std::string getParentName() const
Returns the name of the parent object.
int indexOfClosest(const Position &p) const
index of the closest position to p
void setShapeColor(const RGBColor &col)
Sets a new color.
void setShapeRelativePath(bool relativePath)
Sets a new relativePath value.
const Polygons & getPolygons() const
Returns all polygons.
int size() const
Returns the number of stored items within the container.
Boundary myMovingGeometryBoundary
boundary used during moving of elements
Stores the information about how to visualize structures.
bool isPolygonClosed() const
check if polygon is closed
void setShapeType(const std::string &type)
Sets a new type.
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
double y() const
Returns the y-position.
void commitShapeChange(const PositionVector &oldShape, GNEUndoList *undoList)
commit geometry changes in the attributes of an element after use of changeShapeGeometry(...)
void updateGeometry()
update pre-computed geometry information
double x() const
Returns the x-position.
Close shape of a polygon (Used by GNEPolys)
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
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, int align=0, double width=-1)
GNEPoly * retrievePolygon(const std::string &id, bool failHard=true) const
get Polygon by id
bool drawDetail(const double detail, const double exaggeration) const
check if details can be drawn for the given GUIVisualizationDetailSettings and current scale and exxa...
A NBNetBuilder extended by visualisation and editing capabilities.
const PositionVector & getShape() const
Returns whether the shape of the polygon.
bool mySimplifiedShape
flag to indicate if polygon is simplified
void p_begin(const std::string &description)
Begin undo command sub-group. This begins a new group of commands that are treated as a single comman...
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
bool editingElevation() const
check if we're editing elevation
PositionVector myGeoShape
Latitude of Polygon.
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
bool hasNext()
returns the information whether further substrings exist
bool drawUsingSelectColor() const
check if attribute carrier must be drawn using selecting color.
bool editingNetElementShapes
flag to edit net element shapes
RGBColor invertedColor() const
obtain inverted of current RGBColor
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
GNEPoly(GNENet *net, const std::string &id, const std::string &type, const PositionVector &shape, bool geo, bool fill, double lineWidth, const RGBColor &color, double layer, double angle, const std::string &imgFile, bool relativePath, bool movementBlocked, bool shapeBlocked)
Constructor.
static bool isValidGenericParameterKey(const std::string &value)
whether the given string is a valid key for a generic parameter
GNENet * myNet
the net to inform about updates
A class that stores a 2D geometrical boundary.
void selectAttributeCarrier(bool changeFlag=true)
void closePolygon(bool allowUndo=true)
close polygon
#define WRITE_WARNING(msg)
mode for moving network elements
const std::string & getShapeType() const
Returns the (abstract) type of the Shape.
GUIVisualizationSizeSettings polySize
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
void setShapeImgFile(const std::string &imgFile)
Sets a new imgFile.
void p_add(GNEChange_Attribute *cmd)
special method, avoid empty changes, always execute
static void drawBoundary(const Boundary &b)
Draw a boundary (used for debugging)
int getCircleResolution() const
function to calculate circle resolution for all circles drawn in drawGL(...) functions ...
static void clearTextures()
clears loaded textures
GUIVisualizationSizeSettings addSize
GNENetElement * myNetElementShapeEdited
junction of which the shape is being edited (optional)
GNEUndoList * getUndoList() const
get the undoList object
void removeDoublePoints(double minDist=POSITION_EPS, bool assertLength=false)
Removes positions if too near.
bool isPolygonBlocked() const
return true if polygon is blocked
bool getShapeRelativePath() const
Returns the relativePath of the Shape.
void startGeometryMoving()
static bool isValidGenericParameterValue(const std::string &value)
whether the given string is a valid value for a generic parameter
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
bool myBlockMovement
flag to block movement
void writeShape(OutputDevice &device)
writte shape element into a xml file
void setGenericParametersStr(const std::string &value)
set generic parameters in string format
void p_end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise, the sub-group will be added as a new command into parent group. A matching begin() must have been called previously.
A point in 2D or 3D with translation and scaling methods.
RGBColor selectionColor
basic selection color
Supermode currentSupermode
the current supermode
static bool isGenericParametersValid(const std::string &value)
check if given string can be parsed to a map/list of generic parameters
void removeGLObjectFromGrid(GUIGlObject *o)
add GL Object into net
static const double myHintSize
hint size of vertex
Position getPolygonCenter() const
Returns the arithmetic of all corner points.
friend class GNEChange_Attribute
declare friend class
const RGBColor & getShapeColor() const
Returns the color of the Shape.
int myCurrentMovingVertexIndex
index of vertex that is been moved (-1 means that none vertex is been moved)
static int getTextureID(const std::string &filename, const bool mirrorX=false)
return texture id for the given filename (initialize on first use)
block movement of a graphic element
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
static void drawShapeDottedContourAroundClosedShape(const GUIVisualizationSettings &s, const int type, const PositionVector &shape)
draw a dotted contour around the given closed shape with certain width
double xmin() const
Returns minimum x-coordinate.
void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
bool checkDraw(const GUIVisualizationSettings &s) const
check if Polygon can be drawn
edge: the shape in xml-definition
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
bool isValid(SumoXMLAttr key, const std::string &value)
method for checking if the key and their conrrespond attribute are valids
void deleteGeometryPoint(const Position &pos, bool allowUndo=true)
delete the geometry point closest to the given pos
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
method for setting the attribute and letting the object perform additional changes ...
void changeShapeID(GNEShape *s, const std::string &OldID)
change Shape ID
const GUIGlObject * getGUIGlObject() const
get GUIGlObject associated to this GNEShape
bool showShapes() const
check if shapes has to be hide
std::string getAttribute(SumoXMLAttr key) const
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
double getShapeLayer() const
Returns the layer of the Shape.
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
GUIVisualizationDetailSettings detailSettings
detail settings
void reset()
Resets the boundary.
std::string myID
The name of the object.
int moveVertexShape(const int index, const Position &oldPos, const Position &offset)
change position of a vertex of shape without commiting change
void buildSelectionACPopupEntry(GUIGLObjectPopupMenu *ret, GNEAttributeCarrier *AC)
Builds an entry which allows to (de)select the object.
Set a vertex of polygon as first verte.
void setShapeEditedElement(GNENetElement *element)
retrieve the netElement of which the shape is being edited
void simplifyShape(bool allowUndo=true)
replace the current shape with a rectangle
virtual void updateGeometry()=0
update pre-computed geometry information
Position getPositionInView() const
Returns position of additional in view.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
const GNEAttributeCarrier * getDottedAC() const
get AttributeCarrier under cursor
GUIGlID getGlID() const
Returns the numerical id of the object.
const std::string & getTagStr() const
get tag assigned to this object in string format
simplify polygon geometry
bool isClosed() const
check if PositionVector is closed
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Demanding mode (Routes, Vehicles etc..)
bool isInitialised() const
check if Boundary is Initialised
GNENetElement * getShapeEditedElement() const
retrieve the junction of which the shape is being edited
double distanceSquaredTo2D(const Position &p2) const
returns the square of the distance to another position (Only using x and y positions) ...
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
void unselectAttributeCarrier(bool changeFlag=true)
unselect attribute carrier using GUIGlobalSelection
std::vector< std::pair< std::string, std::string > > getGenericParameters() const
return generic parameters as vector of pairs format
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.
void writeXML(OutputDevice &out, bool geo=false)
Static storage of an output device and its base (abstract) implementation.
bool x2cartesian_const(Position &from) const
Converts the given coordinate into a cartesian using the previous initialisation. ...
NetworkEditMode networkEditMode
the current Network edit mode
bool myBlockShape
flag for block shape
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
GUIVisualizationColorSettings colorSettings
color settings
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
bool myClosedShape
flag to indicate if polygon is open or closed
std::string getGenericParametersStr() const
return generic parameters in string format
void add(double xoff, double yoff, double zoff)
bool drawForSelecting
whether drawing is performed for the purpose of selecting objects
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
double ymax() const
Returns maximum y-coordinate.
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
static const double geometryPointsText
details for Geometry Points Texts
void closePolygon()
ensures that the last position equals the first
void addGLObjectIntoGrid(GUIGlObject *o)
add GL Object into net
A window containing a gl-object's parameter.
void changeFirstGeometryPoint(int oldIndex, bool allowUndo=true)
change first geometry point
bool drawBoundaries
enable or disable draw boundaries
void setShapeLayer(const double layer)
Sets a new layer.
const GNEViewNetHelper::EditShapes & getEditShapes() const
get Edit Shape modul
double getShapeNaviDegree() const
Returns the angle of the Shape in navigational degrees.
int getVertexIndex(Position pos, bool createIfNoExist, bool snapToGrid)
return index of a vertex of shape, or of a new vertex if position is over an shape's edge ...
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
begin/end of the description of a polygon
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GNEViewNet * getViewNet() const
get view net
void moveEntireShape(const PositionVector &oldShape, const Position &offset)
move entire shape without commiting change
static const double DEFAULT_LAYER
void setShapeNaviDegree(const double angle)
Sets a new angle in navigational degrees.
void clearParameter()
Clears the parameter map.
static RGBColor getColor()
gets the gl-color