]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2577: add constructor for the single shape.
authormzn <mzn@opencascade.com>
Fri, 17 Aug 2018 08:10:33 +0000 (11:10 +0300)
committermzn <mzn@opencascade.com>
Fri, 17 Aug 2018 08:11:10 +0000 (11:11 +0300)
src/GeomAlgoAPI/GeomAlgoAPI_UnifySameDomain.cpp
src/GeomAlgoAPI/GeomAlgoAPI_UnifySameDomain.h

index a2a27ba5d968c6a0c4d5b576a9af9ae3386a9b51..ee9c6fecac07a7e1f67ee24b67edc6119ebdb8bf 100644 (file)
@@ -33,6 +33,13 @@ GeomAlgoAPI_UnifySameDomain::GeomAlgoAPI_UnifySameDomain(const ListOfShape& theS
   build(theShapes);
 }
 
+//==================================================================================================
+GeomAlgoAPI_UnifySameDomain::GeomAlgoAPI_UnifySameDomain(const GeomShapePtr& theShape)
+{
+  build(theShape, false);
+}
+
+//==================================================================================================
 void GeomAlgoAPI_UnifySameDomain::build(const ListOfShape& theShapes)
 {
   if(theShapes.empty()) {
@@ -54,10 +61,20 @@ void GeomAlgoAPI_UnifySameDomain::build(const ListOfShape& theShapes)
 
   const TopoDS_Shape& aShell = aCombined.front()->impl<TopoDS_Shape>();
 
+  std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
+  aShape->setImpl(new TopoDS_Shape(aShell));
+  build(aShape, true);
+}
+
+//==================================================================================================
+void GeomAlgoAPI_UnifySameDomain::build(const GeomShapePtr& theShape,
+                                        const bool theIsToSimplifyShell)
+{
   ShapeUpgrade_UnifySameDomain* aUnifyAlgo = new ShapeUpgrade_UnifySameDomain();
   this->setImpl(aUnifyAlgo);
 
-  aUnifyAlgo->Initialize(aShell);
+  const TopoDS_Shape& aShape = theShape->impl<TopoDS_Shape>();
+  aUnifyAlgo->Initialize(aShape);
   aUnifyAlgo->Build();
 
   TopoDS_Shape aResult = aUnifyAlgo->Shape();
@@ -65,7 +82,7 @@ void GeomAlgoAPI_UnifySameDomain::build(const ListOfShape& theShapes)
     return;
   }
 
-  if (aResult.ShapeType() == TopAbs_SHELL) {
+  if (theIsToSimplifyShell && aResult.ShapeType() == TopAbs_SHELL) {
     int aNb = 0;
     TopoDS_Iterator anIt(aResult);
     for (; anIt.More(); anIt.Next()) {
@@ -78,9 +95,9 @@ void GeomAlgoAPI_UnifySameDomain::build(const ListOfShape& theShapes)
     }
   }
 
-  std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
-  aShape->setImpl(new TopoDS_Shape(aResult));
-  this->setShape(aShape);
+  std::shared_ptr<GeomAPI_Shape> aResShape(new GeomAPI_Shape());
+  aResShape->setImpl(new TopoDS_Shape(aResult));
+  this->setShape(aResShape);
   this->setDone(true);
 }
 
index a18366672634fe6c7f2fb0d3b135686e23ee518d..1b70f43a2f41e8840f1e3b7c408aa2adb1470762 100644 (file)
@@ -35,6 +35,9 @@ public:
   /// Constructor.
   GEOMALGOAPI_EXPORT GeomAlgoAPI_UnifySameDomain(const ListOfShape& theShapes);
 
+  /// Constructor.
+  GEOMALGOAPI_EXPORT GeomAlgoAPI_UnifySameDomain(const GeomShapePtr& theShape);
+
   /// \return the list of shapes modified from the shape \a theShape.
   /// \param[in] theShape base shape.
   /// \param[out] theHistory modified shapes.
@@ -42,8 +45,11 @@ public:
                                            ListOfShape& theHistory);
 
 private:
-  /// Builds resulting shape.
+  /// Builds resulting shape from list of shapes.
   void build(const ListOfShape& theShapes);
+
+  /// Builds resulting shape from the shape.
+  void build(const GeomShapePtr& theShape, const bool theIsToSimplifyShell);
 };
 
 #endif