Salome HOME
Merge branch 'Dev_2.1.0' of salome:modules/shaper into Dev_2.1.0
[modules/shaper.git] / src / PartSet / PartSet_OperationPrs.cpp
index 66e146f96210959647f26a920067448f0b35c093..9f52a502d035ba62e4f290737138cb6ee668b189 100755 (executable)
@@ -23,8 +23,7 @@
 #include <ModelAPI_AttributeRefList.h>
 #include <ModelAPI_Validator.h>
 #include <ModelAPI_Session.h>
-
-#include <GeomValidators_Tools.h>
+#include <ModelAPI_ResultCompSolid.h>
 
 #include <GeomAPI_IPresentable.h>
 
@@ -75,10 +74,17 @@ void PartSet_OperationPrs::updateShapes()
     myFeatureResults = myFeature->results();
 }
 
+bool PartSet_OperationPrs::hasShapes()
+{
+  return !myFeatureShapes.empty() || !myFeatureResults.empty();
+}
+
 void PartSet_OperationPrs::Compute(const Handle(PrsMgr_PresentationManager3d)& thePresentationManager,
                                    const Handle(Prs3d_Presentation)& thePresentation, 
                                    const Standard_Integer theMode)
 {
+  if (!hasShapes())
+    return;
   // when the feature can not be visualized in the module, the operation preview should not
   // be visualized also
   if (!myWorkshop->module()->canDisplayObject(myFeature))
@@ -171,6 +177,22 @@ void addValue(const ObjectPtr& theObject, const GeomShapePtr& theShape,
               QMap<ObjectPtr, QList<GeomShapePtr> >& theObjectShapes)
 {
   if (theObject.get()) {
+    ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
+    if (aResult.get()) {
+      ResultCompSolidPtr aCompsolidResult = std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(theObject);
+      if (aCompsolidResult.get()) {
+        for(int i = 0; i < aCompsolidResult->numberOfSubs(); i++) {
+          ResultPtr aSubResult = aCompsolidResult->subResult(i);
+          if (aSubResult.get()) {
+            GeomShapePtr aShape;
+            addValue(aSubResult, aShape, theFeature, theObjectShapes);
+          }
+        }
+        return;
+      }
+    }
+
+
     GeomShapePtr aShape = theShape;
     if (!aShape.get()) {
       ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);