X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_IntersectionPoint.cpp;h=a71c02499b3d20b8a3c95fcaab2fdbaed182e4a8;hb=b5893b0a30fac08134c24de4565cb513a43affa6;hp=8310bccf6e6b5465a99755a4d6fe35725ad7e0a6;hpb=06ce9f88a4ba875f2e22ca1a4ecad79fdea2ac18;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_IntersectionPoint.cpp b/src/SketchPlugin/SketchPlugin_IntersectionPoint.cpp index 8310bccf6..a71c02499 100644 --- a/src/SketchPlugin/SketchPlugin_IntersectionPoint.cpp +++ b/src/SketchPlugin/SketchPlugin_IntersectionPoint.cpp @@ -7,6 +7,8 @@ #include "SketchPlugin_IntersectionPoint.h" #include +#include +#include #include #include @@ -52,20 +54,25 @@ void SketchPlugin_IntersectionPoint::computePoint() { AttributeSelectionPtr aLineAttr = std::dynamic_pointer_cast(attribute(EXTERNAL_LINE_ID())); - ResultPtr aLineResult = std::dynamic_pointer_cast(aLineAttr->context()); - if (!aLineResult) + + std::shared_ptr anEdge; + if(aLineAttr && aLineAttr->value() && aLineAttr->value()->isEdge()) { + anEdge = std::shared_ptr(new GeomAPI_Edge(aLineAttr->value())); + } else if(aLineAttr->context() && aLineAttr->context()->shape() && + aLineAttr->context()->shape()->isEdge()) { + anEdge = std::shared_ptr(new GeomAPI_Edge(aLineAttr->context()->shape())); + } + if(!anEdge.get()) return; - std::shared_ptr aLinearEdge = - std::dynamic_pointer_cast(aLineResult->shape()); - std::shared_ptr aLine = aLinearEdge->line(); + std::shared_ptr aLine = anEdge->line(); std::shared_ptr aSketchPlane = sketch()->plane(); std::shared_ptr anIntersection = aSketchPlane->intersect(aLine); if (!anIntersection) return; - std::shared_ptr aCoordAttr = + std::shared_ptr aCoordAttr = std::dynamic_pointer_cast(attribute(COORD_ID())); aCoordAttr->setValue(sketch()->to2D(anIntersection)); }