Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEStoppingPlace.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2023 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// A abstract class to define common parameters of lane area in which vehicles can halt (GNE version)
19/****************************************************************************/
20#include <config.h>
21
23#include <netedit/GNENet.h>
24#include <netedit/GNEUndoList.h>
25#include <netedit/GNEViewNet.h>
31
32#include "GNEStoppingPlace.h"
34
35// ===========================================================================
36// static members
37// ===========================================================================
38
39const double GNEStoppingPlace::myCircleWidth = 1.1;
41const double GNEStoppingPlace::myCircleInWidth = 0.9;
42const double GNEStoppingPlace::myCircleInText = 1.6;
43
44// ===========================================================================
45// member method definitions
46// ===========================================================================
47
48GNEStoppingPlace::GNEStoppingPlace(const std::string& id, GNENet* net, GUIGlObjectType type, SumoXMLTag tag, FXIcon* icon,
49 GNELane* lane, const double startPos, const double endPos, const std::string& name, bool friendlyPosition,
50 const Parameterised::Map& parameters) :
51 GNEAdditional(id, net, type, tag, icon, name, {}, {}, {lane}, {}, {}, {}),
52 Parameterised(parameters),
53 myStartPosition(startPos),
54 myEndPosition(endPos),
55myFriendlyPosition(friendlyPosition) {
56}
57
58
60
61
64 // get allow change lane
65 const bool allowChangeLane = myNet->getViewNet()->getViewParent()->getMoveFrame()->getCommonModeOptions()->getAllowChangeLane();
66 // fist check if we're moving only extremes
70 // get snap radius
72 // get mouse position
73 const Position mousePosition = myNet->getViewNet()->getPositionInformation();
74 // check if we clicked over start or end position
75 if ((myStartPosition != INVALID_DOUBLE) && (myAdditionalGeometry.getShape().front().distanceSquaredTo2D(mousePosition) <= (snap_radius * snap_radius))) {
76 // move only start position
77 return new GNEMoveOperation(this, getParentLanes().front(), myStartPosition, getParentLanes().front()->getLaneShape().length2D() - POSITION_EPS,
79 } else if ((myEndPosition != INVALID_DOUBLE) && (myAdditionalGeometry.getShape().back().distanceSquaredTo2D(mousePosition) <= (snap_radius * snap_radius))) {
80 // move only end position
81 return new GNEMoveOperation(this, getParentLanes().front(), 0, myEndPosition,
83 } else {
84 return nullptr;
85 }
87 // move both start and end positions
90 } else if (myStartPosition != INVALID_DOUBLE) {
91 // move only start position
92 return new GNEMoveOperation(this, getParentLanes().front(), myStartPosition, getParentLanes().front()->getLaneShape().length2D() - POSITION_EPS,
94 } else if (myEndPosition != INVALID_DOUBLE) {
95 // move only end position
96 return new GNEMoveOperation(this, getParentLanes().front(), 0, myEndPosition,
98 } else {
99 // start and end positions undefined, then nothing to move
100 return nullptr;
101 }
102}
103
104
105bool
110
111
112std::string
114 // obtain lane length
115 double laneLength = getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength() * getParentLanes().front()->getLengthGeometryFactor();
116 // calculate start and end positions
117 double startPos = getAttributeDouble(SUMO_ATTR_STARTPOS);
118 double endPos = getAttributeDouble(SUMO_ATTR_ENDPOS);
119 // check if position has to be fixed
120 if (startPos < 0) {
121 startPos += laneLength;
122 }
123 if (endPos < 0) {
124 endPos += laneLength;
125 }
126 // declare variables
127 std::string errorStart, separator, errorEnd;
128 // check positions over lane
129 if (startPos < 0) {
130 errorStart = (toString(SUMO_ATTR_STARTPOS) + " < 0");
131 } else if (startPos > getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength()) {
132 errorStart = (toString(SUMO_ATTR_STARTPOS) + TL(" > lanes's length"));
133 }
134 if (endPos < 0) {
135 errorEnd = (toString(SUMO_ATTR_ENDPOS) + " < 0");
136 } else if (endPos > getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength()) {
137 errorEnd = (toString(SUMO_ATTR_ENDPOS) + TL(" > lanes's length"));
138 }
139 // check separator
140 if ((errorStart.size() > 0) && (errorEnd.size() > 0)) {
141 separator = TL(" and ");
142 }
143 return errorStart + separator + errorEnd;
144}
145
146
147void
149 // calculate start and end positions
150 double startPos = getAttributeDouble(SUMO_ATTR_STARTPOS);
151 double endPos = getAttributeDouble(SUMO_ATTR_ENDPOS);
152 // fix start and end positions using fixLaneDoublePosition
153 GNEAdditionalHandler::fixLaneDoublePosition(startPos, endPos, getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength());
154 // set new start and end positions
157}
158
159
164
165
166void
168 if (!isTemplate()) {
169 // update geometry
171 // add shape boundary
173 // grow with "width"
176 }
177 // grow
179 }
180}
181
182
183void
184GNEStoppingPlace::splitEdgeGeometry(const double splitPosition, const GNENetworkElement* originalElement, const GNENetworkElement* newElement, GNEUndoList* undoList) {
185 // first check tat both network elements are lanes and originalElement correspond to stoppingPlace lane
186 if ((originalElement->getTagProperty().getTag() == SUMO_TAG_LANE) &&
187 (newElement->getTagProperty().getTag() == SUMO_TAG_LANE) &&
188 (getParentLanes().front() == originalElement)) {
189 // check if we have to change additional lane depending of split position
191 // calculate middle position
192 const double middlePosition = ((myEndPosition - myStartPosition) / 2.0) + myStartPosition;
193 // four cases:
194 if (splitPosition < myStartPosition) {
195 // change lane
196 setAttribute(SUMO_ATTR_LANE, newElement->getID(), undoList);
197 // now adjust start and end position
198 setAttribute(SUMO_ATTR_STARTPOS, toString(myStartPosition - splitPosition), undoList);
199 setAttribute(SUMO_ATTR_ENDPOS, toString(myEndPosition - splitPosition), undoList);
200 } else if ((splitPosition > myStartPosition) && (splitPosition < middlePosition)) {
201 // change lane
202 setAttribute(SUMO_ATTR_LANE, newElement->getID(), undoList);
203 // now adjust start and end position
204 setAttribute(SUMO_ATTR_STARTPOS, "0", undoList);
205 setAttribute(SUMO_ATTR_ENDPOS, toString(myEndPosition - splitPosition), undoList);
206 } else if ((splitPosition > middlePosition) && (splitPosition < myEndPosition)) {
207 // only adjust end position
208 setAttribute(SUMO_ATTR_ENDPOS, toString(splitPosition), undoList);
209 } else if ((splitPosition > myEndPosition)) {
210 // nothing to do
211 }
212 } else if ((myStartPosition != INVALID_DOUBLE) && (splitPosition < myStartPosition)) {
213 // change lane
214 setAttribute(SUMO_ATTR_LANE, newElement->getID(), undoList);
215 // now adjust start position
216 setAttribute(SUMO_ATTR_STARTPOS, toString(myEndPosition - splitPosition), undoList);
217 } else if ((myEndPosition != INVALID_DOUBLE) && (splitPosition < myEndPosition)) {
218 // change lane
219 setAttribute(SUMO_ATTR_LANE, newElement->getID(), undoList);
220 // now adjust end position
221 setAttribute(SUMO_ATTR_ENDPOS, toString(myEndPosition - splitPosition), undoList);
222 }
223 }
224}
225
226
227std::string
229 return getParentLanes().front()->getID();
230}
231
232
233void
235 if (getParentLanes().empty() || getParentLanes().front() == nullptr) {
236 // may happen during initialization
237 return;
238 }
239 // Get value of option "lefthand"
240 const bool lefthandAttr = hasAttribute(SUMO_ATTR_LEFTHAND) && parse<bool>(getAttribute(SUMO_ATTR_LEFTHAND));
241 const double offsetSign = OptionsCont::getOptions().getBool("lefthand") != lefthandAttr ? -1 : 1;
242
243 // obtain laneShape
244 PositionVector laneShape = getParentLanes().front()->getLaneShape();
245
246 // Move shape to side
247 laneShape.move2side(movingToSide * offsetSign);
248
249 // Cut shape using as delimitators fixed start position and fixed end position
251}
252
253
254double
256 switch (key) {
259 return myStartPosition;
260 } else {
261 return 0;
262 }
263 case SUMO_ATTR_ENDPOS:
265 return myEndPosition;
266 } else {
267 return getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength();
268 }
269 case SUMO_ATTR_CENTER:
271 default:
272 throw InvalidArgument(getTagStr() + " doesn't have a double attribute of type '" + toString(key) + "'");
273 }
274}
275
276
281
282
283std::string
285 return getTagStr() + ": " + getID();
286}
287
288
289std::string
293
294
295void
296GNEStoppingPlace::drawLines(const GUIVisualizationSettings& s, const std::vector<std::string>& lines, const RGBColor& color) const {
298 // calculate middle point
299 const double middlePoint = (myAdditionalGeometry.getShape().length2D() * 0.5);
300 // calculate rotation
301 const double rot = (myAdditionalGeometry.getShape().size() <= 1) ? 0 : myAdditionalGeometry.getShape().rotationDegreeAtOffset(middlePoint);
302 // Iterate over every line
303 for (int i = 0; i < (int)lines.size(); ++i) {
304 // push a new matrix for every line
306 // translate
307 glTranslated(mySignPos.x(), mySignPos.y(), 0);
308 // rotate over lane
310 // draw line with a color depending of the selection status
311 if (drawUsingSelectColor()) {
312 GLHelper::drawText(lines[i].c_str(), Position(1.2, (double)i), .1, 1.f, color, 0, FONS_ALIGN_LEFT);
313 } else {
314 GLHelper::drawText(lines[i].c_str(), Position(1.2, (double)i), .1, 1.f, color, 0, FONS_ALIGN_LEFT);
315 }
316 // pop matrix for every line
318 }
319 }
320}
321
322
323void
324GNEStoppingPlace::drawSign(const GUIVisualizationSettings& s, const double exaggeration,
325 const RGBColor& baseColor, const RGBColor& signColor, const std::string& word) const {
326 // calculate middle point
327 const double middlePoint = (myAdditionalGeometry.getShape().length2D() * 0.5);
328 // calculate rotation
329 const double rot = (myAdditionalGeometry.getShape().size() <= 1) ? 0 : myAdditionalGeometry.getShape().rotationDegreeAtOffset(middlePoint);
331 // only draw circle depending of distance between sign and mouse cursor
333 // push matrix
335 // Start drawing sign traslating matrix to signal position
336 glTranslated(mySignPos.x(), mySignPos.y(), 0);
337 // rotate over lane
339 // scale matrix depending of the exaggeration
340 glScaled(exaggeration, exaggeration, 1);
341 // set color
342 GLHelper::setColor(baseColor);
343 // Draw circle
345 // pop draw matrix
347 }
348 } else {
349 // push matrix
351 // Start drawing sign traslating matrix to signal position
352 glTranslated(mySignPos.x(), mySignPos.y(), 0);
353 // rotate over lane
355 // scale matrix depending of the exaggeration
356 glScaled(exaggeration, exaggeration, 1);
357 // set color
358 GLHelper::setColor(baseColor);
359 // Draw circle
361 // continue depending of rectangle selection
363 // Traslate to front
364 glTranslated(0, 0, .1);
365 // set color
366 GLHelper::setColor(signColor);
367 // draw another circle in the same position, but a little bit more small
369 // draw H depending of detailSettings
370 GLHelper::drawText(word, Position(), .1, myCircleInText, baseColor);
371 }
372 // pop draw matrix
374 }
375}
376
377
378double
381 // get lane final and shape length
382 const double laneLength = getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength();
383 // get startPosition
384 double fixedPos = myStartPosition;
385 // adjust fixedPos
386 if (fixedPos < 0) {
387 fixedPos += laneLength;
388 }
389 fixedPos *= getParentLanes().front()->getLengthGeometryFactor();
390 // return depending of fixedPos
391 if (fixedPos < 0) {
392 return 0;
393 } else if (fixedPos > (getParentLanes().front()->getLaneShapeLength() - POSITION_EPS)) {
394 return (getParentLanes().front()->getLaneShapeLength() - POSITION_EPS);
395 } else {
396 return fixedPos;
397 }
398 } else {
399 return 0;
400 }
401}
402
403
404double
407 // get lane final and shape length
408 const double laneLength = getParentLanes().front()->getParentEdge()->getNBEdge()->getFinalLength();
409 // get endPosition
410 double fixedPos = myEndPosition;
411 // adjust fixedPos
412 if (fixedPos < 0) {
413 fixedPos += laneLength;
414 }
415 fixedPos *= getParentLanes().front()->getLengthGeometryFactor();
416 // return depending of fixedPos
417 if (fixedPos < POSITION_EPS) {
418 return POSITION_EPS;
419 } else if (fixedPos > getParentLanes().front()->getLaneShapeLength()) {
420 return getParentLanes().front()->getLaneShapeLength();
421 } else {
422 return fixedPos;
423 }
424 } else {
425 return getParentLanes().front()->getLaneShapeLength();
426 }
427}
428
429
430void
433 // change only start position
434 myStartPosition = moveResult.newFirstPos;
435 // adjust startPos
436 if (myStartPosition > (getAttributeDouble(SUMO_ATTR_ENDPOS) - POSITION_EPS)) {
438 }
440 // change only end position
441 myEndPosition = moveResult.newFirstPos;
442 // adjust endPos
443 if (myEndPosition < (getAttributeDouble(SUMO_ATTR_STARTPOS) + POSITION_EPS)) {
445 }
446 } else {
447 // change both position
448 myStartPosition = moveResult.newFirstPos;
449 myEndPosition = moveResult.newSecondPos;
450 // set lateral offset
452 }
453 // update geometry
455}
456
457
458void
460 // begin change attribute
461 undoList->begin(myTagProperty.getGUIIcon(), "position of " + getTagStr());
462 // set attributes depending of operation type
464 // set only start position
465 setAttribute(SUMO_ATTR_STARTPOS, toString(moveResult.newFirstPos), undoList);
467 // set only end position
468 setAttribute(SUMO_ATTR_ENDPOS, toString(moveResult.newFirstPos), undoList);
469 } else {
470 // set both
471 setAttribute(SUMO_ATTR_STARTPOS, toString(moveResult.newFirstPos), undoList);
472 setAttribute(SUMO_ATTR_ENDPOS, toString(moveResult.newSecondPos), undoList);
473 // check if lane has to be changed
474 if (moveResult.newFirstLane) {
475 // set new lane
476 setAttribute(SUMO_ATTR_LANE, moveResult.newFirstLane->getID(), undoList);
477 }
478 }
479 // end change attribute
480 undoList->end();
481}
482
483/****************************************************************************/
@ NETWORK_MOVE
mode for moving network elements
GUIGlObjectType
#define TL(string)
Definition MsgHandler.h:287
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_LANE
begin/end of the description of a single lane
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_STARTPOS
@ SUMO_ATTR_LANE
@ SUMO_ATTR_ENDPOS
@ SUMO_ATTR_LEFTHAND
@ SUMO_ATTR_CENTER
@ SUMO_ATTR_WIDTH
const double INVALID_DOUBLE
invalid double
Definition StdDefs.h:64
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
Boundary & grow(double by)
extends the boundary by the given amount
Definition Boundary.cpp:300
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition GLHelper.cpp:583
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
Definition GLHelper.cpp:498
static void popMatrix()
pop matrix
Definition GLHelper.cpp:130
static void pushMatrix()
push matrix
Definition GLHelper.cpp:117
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, const int align=0, double width=-1)
Definition GLHelper.cpp:685
static void fixLaneDoublePosition(double &from, double &to, const double laneLengt)
fix the given positions over lane
static bool checkLaneDoublePosition(double from, const double to, const double laneLength, const bool friendlyPos)
check if the given positions over a lane is valid
An Element which don't belong to GNENet but has influence in the simulation.
GUIGeometry myAdditionalGeometry
geometry to be precomputed in updateGeometry(...)
Boundary myAdditionalBoundary
Additional Boundary.
const std::string getID() const
get ID (all Attribute Carriers have one)
const std::string & getTagStr() const
get tag assigned to this object in string format
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
bool isTemplate() const
check if this AC is template
bool drawUsingSelectColor() const
check if attribute carrier must be drawn using selecting color.
bool hasAttribute(SumoXMLAttr key) const
GNENet * myNet
pointer to net
const GNETagProperties & myTagProperty
reference to tagProperty associated with this attribute carrier
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition GNELane.h:46
double myMoveElementLateralOffset
move element lateral offset (used by elements placed over lanes
bool getAllowChangeLane() const
allow change lane
CommonModeOptions * getCommonModeOptions() const
get common mode options
move operation
move result
const GNELane * newFirstLane
new first Lane
double newFirstPos
new first position
const GNEMoveOperation::OperationType operationType
move operation
double firstLaneOffset
lane offset
double newSecondPos
new second position
A NBNetBuilder extended by visualisation and editing capabilities.
Definition GNENet.h:42
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2030
void fixAdditionalProblem()
fix additional problem (must be reimplemented in all detector children)
void updateCenteringBoundary(const bool updateGrid)
update centering boundary (implies change in RTREE)
double getStartGeometryPositionOverLane() const
get start position over lane that is applicable to the shape
virtual double getAttributeDouble(SumoXMLAttr key) const
GNEMoveOperation * getMoveOperation()
get move operation
Position getPositionInView() const
Returns position of additional in view.
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
std::string getPopUpID() const
get PopPup ID (Used in AC Hierarchy)
static const double myCircleWidthSquared
squared circle width resolution for all stopping places
~GNEStoppingPlace()
Destructor.
void commitMoveShape(const GNEMoveResult &moveResult, GNEUndoList *undoList)
commit move shape
const Parameterised::Map & getACParametersMap() const
get parameters map
void setMoveShape(const GNEMoveResult &moveResult)
set move shape
static const double myCircleWidth
circle width resolution for all stopping places
virtual void updateGeometry()=0
update pre-computed geometry information
bool myFriendlyPosition
Flag for friendly position.
static const double myCircleInText
text inner circle width resolution for all stopping places
std::string getAdditionalProblem() const
return a string with the current additional problem (must be reimplemented in all detector children)
void splitEdgeGeometry(const double splitPosition, const GNENetworkElement *originalElement, const GNENetworkElement *newElement, GNEUndoList *undoList)
split geometry
static const double myCircleInWidth
inner circle width resolution for all stopping places
GNEStoppingPlace(const std::string &id, GNENet *net, GUIGlObjectType type, SumoXMLTag tag, FXIcon *icon, GNELane *lane, const double startPos, const double endPos, const std::string &name, bool friendlyPosition, const Parameterised::Map &parameters)
Constructor.
bool isAdditionalValid() const
check if current additional is valid to be writed into XML (must be reimplemented in all detector chi...
void drawLines(const GUIVisualizationSettings &s, const std::vector< std::string > &lines, const RGBColor &color) const
draw lines
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 setStoppingPlaceGeometry(double movingToSide)
set geometry common to all stopping places
double myEndPosition
The position this stopping place is located at (-1 means empty)
void drawSign(const GUIVisualizationSettings &s, const double exaggeration, const RGBColor &baseColor, const RGBColor &signColor, const std::string &word) const
draw sign
Position mySignPos
The position of the sign.
std::string getParentName() const
Returns the name of the parent object (if any)
virtual std::string getAttribute(SumoXMLAttr key) const =0
double myStartPosition
The relative start position this stopping place is located at (-1 means empty)
double getEndGeometryPositionOverLane() const
get end position over lane that is applicable to the shape
GUIIcon getGUIIcon() const
get GUI icon associated to this Tag
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
bool hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute "attr"
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
const GNEViewNetHelper::MouseButtonKeyPressed & getMouseButtonKeyPressed() const
get Key Pressed module
GNEViewParent * getViewParent() const
get the net object
GNEUndoList * getUndoList() const
get the undoList object
GNEMoveFrame * getMoveFrame() const
get frame for move elements
static void rotateOverLane(const double rot)
rotate over lane (used by Lock icons, detector logos, etc.)
const PositionVector & getShape() const
The shape of the additional element.
void updateGeometry(const PositionVector &shape)
update entire geometry
const GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings (read only)
virtual Position getPositionInformation() const
Returns the cursor's x/y position within the network.
Stores the information about how to visualize structures.
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
bool drawForPositionSelection
whether drawing is performed for the purpose of selecting objects with a single click
int getCircleResolution() const
function to calculate circle resolution for all circles drawn in drawGL(...) functions
GUIVisualizationNeteditSizeSettings neteditSizeSettings
netedit size settings
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
An upper class for objects with additional parameters.
std::map< std::string, std::string > Map
parameters map
const Parameterised::Map & getParametersMap() const
Returns the inner key/value map.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
double distanceSquaredTo2D(const Position &p2) const
returns the square of the distance to another position (Only using x and y positions)
Definition Position.h:259
double x() const
Returns the x-position.
Definition Position.h:55
double y() const
Returns the y-position.
Definition Position.h:60
A list of positions.
double length2D() const
Returns the length.
Position getPolygonCenter() const
Returns the arithmetic of all corner points.
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
void move2side(double amount, double maxExtension=100)
move position vector to side using certain ammount
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
@ FONS_ALIGN_LEFT
Definition fontstash.h:42
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool shiftKeyPressed() const
check if SHIFT is pressed during current event
static const double additionalGeometryPointRadius
moving additional geometry point radius