- // Recalculate a shift of flyout point in terms of local coordinates
- std::shared_ptr<GeomAPI_XY> aDir(new GeomAPI_XY(theDeltaX, theDeltaY));
- std::shared_ptr<GeomAPI_Ax3> aPlane = SketchPlugin_Sketch::plane(sketch());
- std::shared_ptr<GeomDataAPI_Point2D> aPointA = SketcherPrs_Tools::getFeaturePoint(
- data(), SketchPlugin_Constraint::ENTITY_A(), aPlane);
- std::shared_ptr<GeomDataAPI_Point2D> aPointB = SketcherPrs_Tools::getFeaturePoint(
- data(), SketchPlugin_Constraint::ENTITY_B(), aPlane);
-
- std::shared_ptr<GeomAPI_XY> aStartPnt;
- std::shared_ptr<GeomAPI_XY> aEndPnt;
- if (aPointA && aPointB) {
- aStartPnt = aPointA->pnt()->xy();
- aEndPnt = aPointB->pnt()->xy();
- } else if (aPointA) {
- FeaturePtr aLine = SketcherPrs_Tools::getFeatureLine(data(),
- SketchPlugin_Constraint::ENTITY_B());
- if (!aLine)
- return;
- std::shared_ptr<GeomAPI_Pnt2d> aPoint = aPointA->pnt();
- aStartPnt = aPoint->xy();
- aEndPnt = SketcherPrs_Tools::getProjectionPoint(aLine, aPoint)->xy();
- } else if (aPointB) {
- FeaturePtr aLine = SketcherPrs_Tools::getFeatureLine(data(),
- SketchPlugin_Constraint::ENTITY_A());
- if (!aLine)
- return;
- std::shared_ptr<GeomAPI_Pnt2d> aPoint = aPointB->pnt();
- aStartPnt = SketcherPrs_Tools::getProjectionPoint(aLine, aPoint)->xy();
- aEndPnt = aPoint->xy();
- } else
- return;
+ std::shared_ptr<GeomDataAPI_Point2D> aStart = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
+ aLineFeature->attribute(SketchPlugin_Line::START_ID()));
+ std::shared_ptr<GeomDataAPI_Point2D> aEnd = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
+ aLineFeature->attribute(SketchPlugin_Line::END_ID()));