Salome HOME
Meet the coding style (line length <= 100)
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_IntersectionPoint.cpp
index 8310bccf6e6b5465a99755a4d6fe35725ad7e0a6..a71c02499b3d20b8a3c95fcaab2fdbaed182e4a8 100644 (file)
@@ -7,6 +7,8 @@
 #include "SketchPlugin_IntersectionPoint.h"
 
 #include <ModelAPI_AttributeSelection.h>
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Validator.h>
 
 #include <GeomAPI_Edge.h>
 #include <GeomAPI_Lin.h>
@@ -52,20 +54,25 @@ void SketchPlugin_IntersectionPoint::computePoint()
 {
   AttributeSelectionPtr aLineAttr =
       std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(attribute(EXTERNAL_LINE_ID()));
-  ResultPtr aLineResult = std::dynamic_pointer_cast<ModelAPI_Result>(aLineAttr->context());
-  if (!aLineResult)
+
+  std::shared_ptr<GeomAPI_Edge> anEdge;
+  if(aLineAttr && aLineAttr->value() && aLineAttr->value()->isEdge()) {
+    anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->value()));
+  } else if(aLineAttr->context() && aLineAttr->context()->shape() &&
+            aLineAttr->context()->shape()->isEdge()) {
+    anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->context()->shape()));
+  }
+  if(!anEdge.get())
     return;
 
-  std::shared_ptr<GeomAPI_Edge> aLinearEdge =
-      std::dynamic_pointer_cast<GeomAPI_Edge>(aLineResult->shape());
-  std::shared_ptr<GeomAPI_Lin> aLine = aLinearEdge->line();
+  std::shared_ptr<GeomAPI_Lin> aLine = anEdge->line();
   std::shared_ptr<GeomAPI_Pln> aSketchPlane = sketch()->plane();
 
   std::shared_ptr<GeomAPI_Pnt> anIntersection = aSketchPlane->intersect(aLine);
   if (!anIntersection)
     return;
 
-  std::shared_ptr<GeomDataAPI_Point2D> aCoordAttr = 
+  std::shared_ptr<GeomDataAPI_Point2D> aCoordAttr =
       std::dynamic_pointer_cast<GeomDataAPI_Point2D>(attribute(COORD_ID()));
   aCoordAttr->setValue(sketch()->to2D(anIntersection));
 }