Salome HOME
Update copyrights
[modules/shaper.git] / src / BuildPlugin / BuildPlugin_Solid.cpp
index 1066c3f587c76ba7c9cfa13b8551b95dc34cd386..00d9a473a6af37608f39c4a26f0b18ee0121d321 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2017-20xx  CEA/DEN, EDF R&D
+// Copyright (C) 2017-2019  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include "BuildPlugin_Solid.h"
@@ -41,115 +40,49 @@ void BuildPlugin_Solid::initAttributes()
 //=================================================================================================
 void BuildPlugin_Solid::execute()
 {
+  // all the needed checkings are in validator, so, here just make and store result
   ListOfShape anOriginalShapes;
-  std::shared_ptr<GeomAlgoAPI_MakeShape> aVolumeMaker;
-  if (!build(anOriginalShapes, aVolumeMaker))
-    return;
-
-  // check and process result of volume maker
-  GeomShapePtr aResShape = getSingleSubshape(aVolumeMaker->shape(), GeomAPI_Shape::SOLID);
-  int anIndex = 0;
-  if (aResShape) {
-    storeResult(anOriginalShapes, aResShape, aVolumeMaker);
-    ++anIndex;
-  }
-  removeResults(anIndex);
-}
-
-//=================================================================================================
-bool BuildPlugin_Solid::build(ListOfShape& theOriginalShapes,
-                              std::shared_ptr<GeomAlgoAPI_MakeShape>& theAlgorithm)
-{
-  // Get base objects list.
   AttributeSelectionListPtr aSelectionList = selectionList(BASE_OBJECTS_ID());
-  if (!aSelectionList.get()) {
-    setError("Error: Could not get selection list.");
-    return false;
-  }
-  if (aSelectionList->size() == 0) {
-    setError("Error: Empty selection list.");
-    return false;
-  }
-
-  // Collect base shapes.
   for (int anIndex = 0; anIndex < aSelectionList->size(); ++anIndex) {
     AttributeSelectionPtr aSelection = aSelectionList->value(anIndex);
     GeomShapePtr aShape = aSelection->value();
     if (!aShape.get())
       aShape = aSelection->context()->shape();
-    theOriginalShapes.push_back(aShape);
+    anOriginalShapes.push_back(aShape);
   }
-
-  theAlgorithm =
-      std::shared_ptr<GeomAlgoAPI_MakeVolume>(new GeomAlgoAPI_MakeVolume(theOriginalShapes));
-  return !isAlgorithmFailed(theAlgorithm);
+  std::shared_ptr<GeomAlgoAPI_MakeVolume> anAlgo(
+    new GeomAlgoAPI_MakeVolume(anOriginalShapes, false));
+  // check and process result of volume maker
+  GeomShapePtr aResShape = getSingleSubshape(anAlgo->shape());
+  storeResult(anOriginalShapes, aResShape, anAlgo);
 }
 
 void BuildPlugin_Solid::storeResult(const ListOfShape& theOriginalShapes,
                                     const GeomShapePtr& theResultShape,
-                                    const std::shared_ptr<GeomAlgoAPI_MakeShape>& theAlgorithm)
+                                    const GeomMakeShapePtr& theAlgorithm)
 {
   ResultBodyPtr aResultBody = document()->createBody(data());
   aResultBody->store(theResultShape);
 
   // Store faces
-  std::shared_ptr<GeomAPI_DataMapOfShapeShape> aMapOfSubs = theAlgorithm->mapOfSubShapes();
-  int aModifiedTag = 1;
-  for(ListOfShape::const_iterator anIt = theOriginalShapes.cbegin();
-      anIt != theOriginalShapes.cend(); ++anIt) {
+  for (ListOfShape::const_iterator anIt = theOriginalShapes.cbegin();
+       anIt != theOriginalShapes.cend();
+       ++anIt)
+  {
     GeomShapePtr aShape = *anIt;
-    aResultBody->loadAndOrientModifiedShapes(theAlgorithm.get(), aShape, GeomAPI_Shape::FACE,
-        aModifiedTag, "Modified_Face", *aMapOfSubs.get(), false, true, true);
+    aResultBody->loadModifiedShapes(theAlgorithm, aShape, GeomAPI_Shape::FACE);
   }
-
   setResult(aResultBody);
 }
 
-GeomShapePtr BuildPlugin_Solid::getSingleSubshape(const GeomShapePtr& theCompound,
-                                                  const GeomAPI_Shape::ShapeType theShapeType)
+GeomShapePtr BuildPlugin_Solid::getSingleSubshape(const GeomShapePtr& theCompound)
 {
-  if (theCompound->shapeType() == theShapeType)
-    return theCompound;
-  else if (theCompound->shapeType() == GeomAPI_Shape::COMPOUND) {
+  if (theCompound->shapeType() == GeomAPI_Shape::COMPOUND) {
     GeomAPI_ShapeIterator anIt(theCompound);
     GeomShapePtr aFoundSub;
     for (; anIt.more() && !aFoundSub; anIt.next()) {
-      aFoundSub = anIt.current();
-      if (aFoundSub->shapeType() != theShapeType)
-        return GeomShapePtr(); // not alone sub-shape
+      return anIt.current();
     }
-    if (anIt.more()) {
-      std::string anError = "Error: unable to build a ";
-      switch (theShapeType) {
-      case GeomAPI_Shape::SOLID: anError += "solid"; break;
-      case GeomAPI_Shape::COMPSOLID: anError += "compsolid"; break;
-      default: anError += "subshape"; break;
-      }
-      setError(anError);
-    } else
-      return aFoundSub;
-  }
-  // not a solid
-  return GeomShapePtr();
-}
-
-bool BuildPlugin_Solid::isAlgorithmFailed(
-    const std::shared_ptr<GeomAlgoAPI_MakeShape>& theAlgorithm)
-{
-  if (!theAlgorithm->isDone()) {
-    static const std::string aFeatureError = "Error: MakeVolume algorithm failed.";
-    setError(aFeatureError);
-    return true;
-  }
-  if (theAlgorithm->shape()->isNull()) {
-    static const std::string aShapeError = "Error: Resulting shape of MakeVolume is Null.";
-    setError(aShapeError);
-    return true;
-  }
-  if (!theAlgorithm->isValid()) {
-    std::string aFeatureError = "Error: Resulting shape of MakeVolume is not valid.";
-    setError(aFeatureError);
-    return true;
   }
-  return false;
+  return theCompound;
 }