void GNEDetectorEntry::updateGeometry() { // Clear all containers myShapeRotations.clear(); myShapeLengths.clear(); // clear Shape myShape.clear(); // Get shape of lane parent myShape.push_back(myLane->getShape().positionAtOffset(myLane->getPositionRelativeToParametricLenght(myPosition.x()))); // Save rotation (angle) of the vector constructed by points f and s myShapeRotations.push_back(myLane->getShape().rotationDegreeAtOffset(myLane->getPositionRelativeToParametricLenght(myPosition.x())) * -1); // Set block icon position myBlockIconPosition = myShape.getLineCenter(); // Set offset of logo myDetectorLogoOffset = Position(-2, 0); // Set block icon rotation, and using their rotation for logo setBlockIconRotation(myLane); // Update parent geometry myAdditionalSetParent->updateGeometry(); }
void GNEVariableSpeedSignal::updateGeometry() { // Clear shape myShape.clear(); // Set block icon position myBlockIconPosition = myPosition; // Set block icon offset myBlockIconOffset = Position(-0.5, -0.5); // Set block icon rotation, and using their rotation for draw logo setBlockIconRotation(); // Set position myShape.push_back(myPosition); // Add shape of childs (To avoid graphics errors) for (childLanes::iterator i = myChildLanes.begin(); i != myChildLanes.end(); i++) { myShape.append(i->lane->getShape()); } // Update connections updateConnections(); // Refresh element (neccesary to avoid grabbing problems) myViewNet->getNet()->refreshAdditional(this); }
void GNEDetectorExit::updateGeometry() { // first remove object from net grid myViewNet->getNet()->removeGLObjectFromNet(this); // Clear all containers myShapeRotations.clear(); myShapeLengths.clear(); // clear Shape myShape.clear(); // obtain position over lane double fixedPositionOverLane = myPositionOverLane > myLane->getParentEdge().getNBEdge()->getFinalLength() ? myLane->getParentEdge().getNBEdge()->getFinalLength() : myPositionOverLane < 0 ? 0 : myPositionOverLane; myShape.push_back(myLane->getShape().positionAtOffset(fixedPositionOverLane * myLane->getLengthGeometryFactor())); // Save rotation (angle) of the vector constructed by points f and s myShapeRotations.push_back(myLane->getShape().rotationDegreeAtOffset(fixedPositionOverLane) * -1); // Set block icon position myBlockIconPosition = myShape.getLineCenter(); // Set block icon rotation, and using their rotation for logo setBlockIconRotation(myLane); // add object into net again myViewNet->getNet()->addGLObjectIntoNet(this); // update E3 parent Geometry myFirstAdditionalParent->updateGeometry(); }
void GNEContainerStop::updateGeometry() { // Clear all containers myShapeRotations.clear(); myShapeLengths.clear(); // Get value of option "lefthand" SUMOReal offsetSign = OptionsCont::getOptions().getBool("lefthand") ? -1 : 1; // Get shape of lane parent myShape = myLane->getShape(); // Move shape to side myShape.move2side(1.65 * offsetSign); // Cut shape using as delimitators from start position and end position myShape = myShape.getSubpart(myLane->getPositionRelativeToParametricLenght(myStartPos), myLane->getPositionRelativeToParametricLenght(myEndPos)); // Get number of parts of the shape int numberOfSegments = (int) myShape.size() - 1; // If number of segments is more than 0 if (numberOfSegments >= 0) { // Reserve memory (To improve efficiency) myShapeRotations.reserve(numberOfSegments); myShapeLengths.reserve(numberOfSegments); // For every part of the shape for (int i = 0; i < numberOfSegments; ++i) { // Obtain first position const Position& f = myShape[i]; // Obtain next position const Position& s = myShape[i + 1]; // Save distance between position into myShapeLengths myShapeLengths.push_back(f.distanceTo(s)); // Save rotation (angle) of the vector constructed by points f and s myShapeRotations.push_back((SUMOReal) atan2((s.x() - f.x()), (f.y() - s.y())) * (SUMOReal) 180.0 / (SUMOReal) PI); } } // Obtain a copy of the shape PositionVector tmpShape = myShape; // Move shape to side tmpShape.move2side(1.5 * offsetSign); // Get position of the sign mySignPos = tmpShape.getLineCenter(); // Set block icon position myBlockIconPosition = myShape.getLineCenter(); // Set block icon rotation, and using their rotation for sign setBlockIconRotation(myLane); // Refresh element (neccesary to avoid grabbing problems) myViewNet->getNet()->refreshAdditional(this); }