Salome HOME
Move generation of AIS presentation into SketchPlugin
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_Feature.cpp
index 7bda5720bb0e1fc8bdb0e28705d1a420bd965c88..6a7e12f5d83590a12b2f591d48c5de0aa4e4483a 100644 (file)
@@ -5,6 +5,10 @@
 #include <ModelAPI_Object.h>
 #include <ModelAPI_AttributeRefList.h>
 
+#include <AIS_InteractiveObject.hxx>
+#include <AIS_Shape.hxx>
+#include <TopoDS_Shape.hxx>
+
 SketchPlugin_Feature::SketchPlugin_Feature()
 {
   mySketch = 0;
@@ -43,3 +47,30 @@ SketchPlugin_Sketch* SketchPlugin_Feature::sketch()
   }
   return mySketch;
 }
+
+Handle(AIS_InteractiveObject) SketchPlugin_Feature::getAISShape(Handle(AIS_InteractiveObject) thePrevious)
+{
+  boost::shared_ptr<GeomAPI_Shape> aPreview = preview();
+
+  Handle(AIS_InteractiveObject) anAIS = thePrevious;
+  const TopoDS_Shape& aShape = aPreview ? aPreview->impl<TopoDS_Shape>() : TopoDS_Shape();
+  if (!anAIS.IsNull())
+  {
+    Handle(AIS_Shape) aShapeAIS = Handle(AIS_Shape)::DownCast(anAIS);
+    if (!aShapeAIS.IsNull()) {
+      // if the AIS object is displayed in the opened local context in some mode, additional
+      // AIS sub objects are created there. They should be rebuild for correct selecting.
+      // It is possible to correct it by closing local context before the shape set and opening
+      // after. Another workaround to thrown down the selection and reselecting the AIS.
+      // If there was a problem here, try the first solution with close/open local context.
+
+      aShapeAIS->Set(aShape);
+      aShapeAIS->Redisplay(Standard_True);
+    }
+  }
+  else
+  {
+    anAIS = new AIS_Shape(aShape);
+  }
+  return anAIS;
+}