]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Composite features fix.
authordbv <dbv@opencascade.com>
Wed, 6 Apr 2016 13:56:09 +0000 (16:56 +0300)
committerdbv <dbv@opencascade.com>
Wed, 6 Apr 2016 14:20:04 +0000 (17:20 +0300)
src/FeaturesPlugin/FeaturesPlugin_CompositeBoolean.cpp
src/FeaturesPlugin/FeaturesPlugin_CompositeBoolean.h
src/FeaturesPlugin/FeaturesPlugin_ExtrusionCut.cpp
src/FeaturesPlugin/FeaturesPlugin_ExtrusionCut.h
src/FeaturesPlugin/FeaturesPlugin_ExtrusionFuse.cpp
src/FeaturesPlugin/FeaturesPlugin_ExtrusionFuse.h
src/FeaturesPlugin/FeaturesPlugin_RevolutionCut.cpp
src/FeaturesPlugin/FeaturesPlugin_RevolutionCut.h
src/FeaturesPlugin/FeaturesPlugin_RevolutionFuse.cpp
src/FeaturesPlugin/FeaturesPlugin_RevolutionFuse.h

index 5c86e7eb78717291da0d19aaa810147005d995ba..89d4d54a4cdc4574c29b9b978bb4671704b79f37 100644 (file)
@@ -25,7 +25,7 @@ void FeaturesPlugin_CompositeBoolean::initBooleanAttributes()
 }
 
 //=================================================================================================
-void FeaturesPlugin_CompositeBoolean::execute()
+void FeaturesPlugin_CompositeBoolean::executeCompositeBoolean()
 {
   // Make generation.
   ListOfShape aGenBaseShapes;
@@ -76,7 +76,11 @@ void FeaturesPlugin_CompositeBoolean::execute()
 
     int aModTag = aTag;
     storeModificationHistory(aResultBody, *aBoolObjIt, aTools, *aBoolMSIt, aModTag);
+
+    myFeature->setResult(aResultBody, aResultIndex++);
   }
+
+  myFeature->removeResults(aResultIndex);
 }
 
 //=================================================================================================
@@ -179,8 +183,8 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
           return false;
         }
 
-        GeomAlgoAPI_MakeShapeList aMakeShapeList;
-        aMakeShapeList.appendAlgo(aBoolAlgo);
+        std::shared_ptr<GeomAlgoAPI_MakeShapeList> aMakeShapeList(new GeomAlgoAPI_MakeShapeList());
+        aMakeShapeList->appendAlgo(aBoolAlgo);
 
         // Add result to not used solids from compsolid.
         aShapesToAdd.push_back(aBoolAlgo->shape());
@@ -190,11 +194,11 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
           return false;
         }
 
-        aMakeShapeList.appendAlgo(aFillerAlgo);
+        aMakeShapeList->appendAlgo(aFillerAlgo);
 
         if(GeomAlgoAPI_ShapeTools::volume(aFillerAlgo->shape()) > 1.e-7) {
           theObjects.push_back(aCompSolid);
-          theMakeShapes.push_back(aBoolAlgo);
+          theMakeShapes.push_back(aMakeShapeList);
         }
       }
       break;
@@ -207,7 +211,7 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
 
       // Filter edges and faces in tools.
       ListOfShape aTools;
-      for(ListOfShape::const_iterator anIt = aTools.cbegin(); anIt != aTools.cend(); ++anIt) {
+      for(ListOfShape::const_iterator anIt = theTools.cbegin(); anIt != theTools.cend(); ++anIt) {
         if((*anIt)->shapeType() == GeomAPI_Shape::EDGE ||
            (*anIt)->shapeType() == GeomAPI_Shape::FACE) {
           anEdgesAndFaces.push_back(*anIt);
@@ -255,7 +259,7 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
       aCutTools.insert(aCutTools.end(), aCompSolids.begin(), aCompSolids.end());
       aCutTools.insert(aCutTools.end(), aTools.begin(), aTools.end());
 
-      GeomAlgoAPI_MakeShapeList aMakeShapeList;
+      std::shared_ptr<GeomAlgoAPI_MakeShapeList> aMakeShapeList(new GeomAlgoAPI_MakeShapeList());
       if(!anEdgesAndFaces.empty() && !aCutTools.empty()) {
         std::shared_ptr<GeomAlgoAPI_Boolean> aCutAlgo(new GeomAlgoAPI_Boolean(anEdgesAndFaces,
                                                                               aCutTools,
@@ -263,7 +267,7 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
         if(aCutAlgo->isDone() && !aCutAlgo->shape()->isNull() && aCutAlgo->isValid()) {
           anEdgesAndFaces.clear();
           anEdgesAndFaces.push_back(aCutAlgo->shape());
-          aMakeShapeList.appendAlgo(aCutAlgo);
+          aMakeShapeList->appendAlgo(aCutAlgo);
         }
       }
 
@@ -275,7 +279,7 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
         if(aCutAlgo->isDone() && GeomAlgoAPI_ShapeTools::volume(aCutAlgo->shape()) > 1.e-7) {
           aSolidsToFuse.clear();
           aSolidsToFuse.push_back(aCutAlgo->shape());
-          aMakeShapeList.appendAlgo(aCutAlgo);
+          aMakeShapeList->appendAlgo(aCutAlgo);
         }
       }
 
@@ -300,7 +304,7 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
         }
 
         aFusedShape = aFuseAlgo->shape();
-        aMakeShapeList.appendAlgo(aFuseAlgo);
+        aMakeShapeList->appendAlgo(aFuseAlgo);
       }
 
       // Combine result with not used solids from compsolid and edges and faces (if we have any).
@@ -316,8 +320,10 @@ bool FeaturesPlugin_CompositeBoolean::makeBoolean(const ListOfShape& theTools,
           return false;
         }
 
-        aMakeShapeList.appendAlgo(aFillerAlgo);
+        aMakeShapeList->appendAlgo(aFillerAlgo);
       }
+
+      theMakeShapes.push_back(aMakeShapeList);
       break;
     }
   }
index daa2e060d9635cf00c9bd1232ff797547b984a40..34b88aebc511df99c57e94f0de0fe951d49cdc0a 100644 (file)
@@ -34,7 +34,7 @@ public:
   }
 
   /// Creates a new part document if needed.
-  FEATURESPLUGIN_EXPORT virtual void execute();
+  FEATURESPLUGIN_EXPORT virtual void executeCompositeBoolean();
 
 protected:
   FeaturesPlugin_CompositeBoolean(){};
index 7b885df7a16eb038dcb424fff9a959fe08c5ae87..f7344b0a462b2f68f8837430a66d09d621d4a2d8 100644 (file)
@@ -12,3 +12,9 @@ FeaturesPlugin_ExtrusionCut::FeaturesPlugin_ExtrusionCut()
   myFeature = this;
   myOperationType = BOOL_CUT;
 }
+
+//=================================================================================================
+void FeaturesPlugin_ExtrusionCut::execute()
+{
+  executeCompositeBoolean();
+}
index acfa643c8f47f5fb4feefb7bd40389921a14478a..1d3d7c3d4c2461fa9516c2b06994a02b17e5c917 100755 (executable)
@@ -32,6 +32,9 @@ public:
     static std::string MY_KIND = FeaturesPlugin_ExtrusionCut::ID();
     return MY_KIND;
   }
+
+  /// Creates a new part document if needed.
+  FEATURESPLUGIN_EXPORT virtual void execute();
 };
 
 #endif
index 956a02648b2ac9d16be9c3ea5414d6df89303836..da93295e0d2b14cbfd059a1dfee8e2c3ecde2bd2 100644 (file)
@@ -12,3 +12,9 @@ FeaturesPlugin_ExtrusionFuse::FeaturesPlugin_ExtrusionFuse()
   myFeature = this;
   myOperationType = BOOL_FUSE;
 }
+
+//=================================================================================================
+void FeaturesPlugin_ExtrusionFuse::execute()
+{
+  executeCompositeBoolean();
+}
index 5e7a3236fdcde2cedc12c9a8f6f3519325217d1e..dfa723632aba39d912f78bbedd6a4ff4033da0a2 100644 (file)
@@ -32,6 +32,9 @@ public:
     static std::string MY_KIND = FeaturesPlugin_ExtrusionFuse::ID();
     return MY_KIND;
   }
+
+  /// Creates a new part document if needed.
+  FEATURESPLUGIN_EXPORT virtual void execute();
 };
 
 #endif
index 7685a77cb45cce3a8c0e3a261d82c680e1ec743f..881879717bea197648a45d8c18fa22d89c3784db 100644 (file)
@@ -12,3 +12,9 @@ FeaturesPlugin_RevolutionCut::FeaturesPlugin_RevolutionCut()
   myFeature = this;
   myOperationType = BOOL_CUT;
 }
+
+//=================================================================================================
+void FeaturesPlugin_RevolutionCut::execute()
+{
+  executeCompositeBoolean();
+}
index 481cfd99590549ea9fec786c3cc65f9ec18bdaf9..d63073c9f6e53af22639c98537a46b4883168ffc 100644 (file)
@@ -32,6 +32,9 @@ public:
     static std::string MY_KIND = FeaturesPlugin_RevolutionCut::ID();
     return MY_KIND;
   }
+
+  /// Creates a new part document if needed.
+  FEATURESPLUGIN_EXPORT virtual void execute();
 };
 
 #endif
index 8bed6dad71e55c657f7f959d79f65b0d9ff3999b..687a1ffb68a7712509a27f5bdbca0d59566230d6 100644 (file)
@@ -12,3 +12,9 @@ FeaturesPlugin_RevolutionFuse::FeaturesPlugin_RevolutionFuse()
   myFeature = this;
   myOperationType = BOOL_FUSE;
 }
+
+//=================================================================================================
+void FeaturesPlugin_RevolutionFuse::execute()
+{
+  executeCompositeBoolean();
+}
index bdc7f8e57586b4adf790c88bdab182634b9d44b6..32fc8a6ec75be98141aed0502bfcb8e9a8119ed3 100644 (file)
@@ -32,6 +32,9 @@ class FeaturesPlugin_RevolutionFuse : public FeaturesPlugin_RevolutionBoolean
     static std::string MY_KIND = FeaturesPlugin_RevolutionFuse::ID();
     return MY_KIND;
   }
+
+  /// Creates a new part document if needed.
+  FEATURESPLUGIN_EXPORT virtual void execute();
 };
 
 #endif