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),
51 myNetElementShapeEdited(nullptr),
52 myBlockShape(shapeBlocked),
53 myClosedShape(shape.front() == shape.back()),
54 mySimplifiedShape(false),
55 myCurrentMovingVertexIndex(-1) {
62 for (
int i = 0; i < (int)
myGeoShape.size(); i++) {
99 if (index < (
int)
myShape.size()) {
156 if (shapeToCommit.size() !=
myShape.size()) {
160 if (shapeToCommit.size() > 1 && shapeToCommit.front().distanceTo2D(shapeToCommit.back()) < (2 *
myHintSize)) {
161 shapeToCommit.pop_back();
162 shapeToCommit.push_back(shapeToCommit.front());
223 simplifyShape->disable();
228 new FXMenuCommand(ret,
"Open shape\t\tOpen polygon's shape",
nullptr, &parent,
MID_GNE_POLYGON_OPEN);
230 new FXMenuCommand(ret,
"Close shape\t\tClose polygon's shape",
nullptr, &parent,
MID_GNE_POLYGON_CLOSE);
240 removeGeometryPoint->disable();
244 setFirstPoint->disable();
278 double circleWidthSquared = circleWidth * circleWidth;
281 if (s.
scale * circleWidth > 1.) {
283 bool mouseOverVertex =
false;
288 RGBColor invertedColor, darkerColor;
310 if (modeMove && (i.distanceTo(mousePosition) < circleWidth)) {
311 mouseOverVertex =
true;
323 glTranslated(i.x(), i.y(),
getType() + 1);
344 if (modeMove && (mouseOverVertex ==
false) && (
myBlockMovement ==
false) && (distanceToShape < circleWidth)) {
347 Position hintPos = myShape.size() > 1 ? myShape.positionAtOffset2D(myShape.nearest_offset_to_point2D(mousePosition)) : myShape[0];
373 return myShape.indexOfClosest(i);
377 if (createIfNoExist) {
378 return myShape.insertAtClosest(pos);
392 if (
myClosedShape && (index == 0 || index == (
int)modifiedShape.size() - 1) && (
myShape.size() > 2)) {
393 modifiedShape.erase(modifiedShape.begin());
394 modifiedShape.erase(modifiedShape.end() - 1);
395 modifiedShape.push_back(modifiedShape.front());
397 modifiedShape.erase(modifiedShape.begin() + index);
497 if (oldIndex >= (
int)
myShape.size()) {
499 }
else if (oldIndex == 0) {
500 WRITE_WARNING(
"Selected point must be different of the first point")
504 for (
int i = oldIndex; i < (int)
myShape.size(); i++) {
505 newShape.push_back(
myShape[i]);
508 for (
int i = 1; i < oldIndex; i++) {
509 newShape.push_back(
myShape[i]);
511 newShape.push_back(newShape.front());
513 for (
int i = 0; i < oldIndex; i++) {
514 newShape.push_back(
myShape[i]);
547 simplifiedShape.push_back(simplifiedShape[0]);
550 simplifiedShape.push_back(
myShape.front());
551 simplifiedShape.push_back(
myShape.back());
663 return canParse<PositionVector>(value);
666 return canParse<RGBColor>(value);
668 return canParse<bool>(value);
670 return canParse<double>(value) && (parse<double>(value) >= 0);
672 if (value ==
"default") {
675 return canParse<double>(value);
687 return canParse<bool>(value);
689 return canParse<double>(value);
691 return canParse<bool>(value);
693 return canParse<bool>(value);
695 return canParse<bool>(value);
697 if (canParse<bool>(value)) {
712 return canParse<bool>(value);
726 result += i.first +
"=" + i.second +
"|";
729 if (!result.empty()) {
736 std::vector<std::pair<std::string, std::string> >
738 std::vector<std::pair<std::string, std::string> > result;
741 result.push_back(std::make_pair(i.first, i.second));
752 std::vector<std::string> parsedValues;
755 parsedValues.push_back(stValues.
next());
758 for (
auto i : parsedValues) {
759 std::vector<std::string> parsedParameters;
762 parsedParameters.push_back(stParam.
next());
766 setParameter(parsedParameters.front(), parsedParameters.back());
783 std::string oldID =
myID;
791 myShape = parse<PositionVector>(value);
794 for (
int i = 0; i < (int) myGeoShape.size(); i++) {
812 for (
int i = 0; i < (int) myShape.size(); i++) {
829 myFill = parse<bool>(value);
835 if (value ==
"default") {
856 myGEO = parse<bool>(value);
877 if (parse<bool>(value)) {
bool around(const Position &p, double offset=0) const
Returns the information whether the position vector describes a polygon lying around the given point...
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.
void openPolygon(bool allowUndo=true)
open polygon
double xmax() const
Returns maximum x-coordinate.
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.
bool myFill
Information whether the polygon has to be filled.
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) ...
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.
virtual void updateGeometry(bool updateGrid)=0
update pre-computed geometry information
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(...)
Position snapToActiveGrid(const Position &pos) const
Returns a position that is mapped to the closest grid point if the grid is active.
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
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.
PositionVector myGeoShape
Latitude of Polygon.
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
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)
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 clearTextures()
clears loaded textures
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 mouseOverObject(const GUIVisualizationSettings &s) const
method for check if mouse is over objects
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.
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
RGBColor selectionColor
NETEDIT special colors.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
void setDottedAC(const GNEAttributeCarrier *AC)
set attributeCarrier under cursor
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
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.
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
void drawInnerPolygon(const GUIVisualizationSettings &s) const
draw inner Polygon (before pushName() )
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.
EditMode getCurrentEditMode() const
get the current edit mode
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
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
Position getPositionInView() const
Returns position of additional in view.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
static void drawShapeDottedContour(const int type, const PositionVector &shape, const double width)
draw a dotted contour around the given Non closed shape with certain width
const GNEAttributeCarrier * getDottedAC() const
get AttributeCarrier under cursor
bool editingElevation() const
return true if elevation is being edited
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.
bool isInitialised() const
check if Boundary is Initialised
GNENetElement * getShapeEditedElement() const
retrieve the junction of which the shape is being edited
static int getCircleResolution(const GUIVisualizationSettings &settings)
function to calculate circle resolution for all circles drawn in drawGL(...) functions ...
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. ...
bool myBlockShape
flag for block shape
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
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
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.
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
void setShapeLayer(const double layer)
Sets a new layer.
void updateGeometry(bool updateGrid)
update pre-computed geometry information
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