Salome HOME
FIx for issue #360 : make switching on/off checking of transactions in Session -...
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_MakeShape.cpp
index d743b567ab15c82663d048240e85dc207bd2d99f..f28779de5f60f244d5c41124d2541b00fdeefcbf 100644 (file)
@@ -1,58 +1,71 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
 // File:        GeomAlgoAPI_MakeShape.cpp
 // Created:     20 Oct 2014
 // Author:      Sergey ZARITCHNY
 
 #include <GeomAlgoAPI_MakeShape.h>
+#include <BRepBuilderAPI_MakeShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
-GeomAlgoAPI_MakeShape::GeomAlgoAPI_MakeShape(BRepBuilderAPI_MakeShape *  theMkShape)
-{ myBuilder = theMkShape;}
+GeomAlgoAPI_MakeShape::GeomAlgoAPI_MakeShape(void* theMkShape)
+  : GeomAPI_Interface(theMkShape),myShape(new GeomAPI_Shape())
+{
+  myShape->setImpl((void *)&implPtr<BRepBuilderAPI_MakeShape>()->Shape());
+}
 
-const boost::shared_ptr<GeomAPI_Shape>  GeomAlgoAPI_MakeShape::shape() const
+GeomAlgoAPI_MakeShape::GeomAlgoAPI_MakeShape()
+  : GeomAPI_Interface(),myShape(new GeomAPI_Shape())
+{}
+void GeomAlgoAPI_MakeShape::init(void* theMkShape)
 {
-  boost::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
-  if(myBuilder != NULL) 
-    aShape->setImpl(new TopoDS_Shape(myBuilder->Shape()));
-  return aShape;
+  setImpl((void *)implPtr<BRepBuilderAPI_MakeShape>());
 }
 
-  /// Returns the  list   of shapes generated   from the shape <theShape>
-const ListOfShape& GeomAlgoAPI_MakeShape::generated(const boost::shared_ptr<GeomAPI_Shape> theShape)
+const std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_MakeShape::shape() const
 {
-  myHistory.clear();
-  if(myBuilder != NULL) {
-       const TopTools_ListOfShape& aList =  myBuilder->Generated(theShape->impl<TopoDS_Shape>());
+  return myShape;
+}
+
+/// Returns the  list   of shapes generated   from the shape <theShape>
+void GeomAlgoAPI_MakeShape::generated(
+  const std::shared_ptr<GeomAPI_Shape> theShape, ListOfShape& theHistory)
+{
+  BRepBuilderAPI_MakeShape* aBuilder = implPtr<BRepBuilderAPI_MakeShape>();
+  if(aBuilder) {
+    const TopTools_ListOfShape& aList =  aBuilder->Generated(theShape->impl<TopoDS_Shape>());
     TopTools_ListIteratorOfListOfShape it(aList);
-       for(;it.More();it.Next()) {
-               boost::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
-               aShape->setImpl(&(it.Value()));
-               myHistory.push_back(aShape);
-       }
+    for(;it.More();it.Next()) {
+      std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
+      aShape->setImpl(new TopoDS_Shape(it.Value()));
+      theHistory.push_back(aShape);
+    }
   }
-  return myHistory;
 }
 
-  /// Returns the  list   of shapes modified   from the shape <theShape>
-const ListOfShape& GeomAlgoAPI_MakeShape::modified(const boost::shared_ptr<GeomAPI_Shape> theShape)
+/// Returns the  list   of shapes modified   from the shape <theShape>
+void GeomAlgoAPI_MakeShape::modified(
+  const std::shared_ptr<GeomAPI_Shape> theShape, ListOfShape& theHistory)
 {
-  myHistory.clear();
-  if(myBuilder != NULL) {
-       const TopTools_ListOfShape& aList =  myBuilder->Modified(theShape->impl<TopoDS_Shape>());
-       TopTools_ListIteratorOfListOfShape it(aList);
-       for(;it.More();it.Next()) {
-               boost::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
-               aShape->setImpl(&(it.Value()));
-               myHistory.push_back(aShape);
-       }
+  BRepBuilderAPI_MakeShape* aBuilder = implPtr<BRepBuilderAPI_MakeShape>();
+  if(aBuilder) {
+    const TopTools_ListOfShape& aList =  aBuilder->Modified(theShape->impl<TopoDS_Shape>());
+    TopTools_ListIteratorOfListOfShape it(aList);
+    for(;it.More();it.Next()) {
+      std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
+      aShape->setImpl(new TopoDS_Shape(it.Value()));
+      theHistory.push_back(aShape);
+    }
   }
-  return myHistory;
 }
 
-  /// Returns whether the shape is an edge
-bool GeomAlgoAPI_MakeShape::isDeleted(const boost::shared_ptr<GeomAPI_Shape> theShape)
+/// Returns whether the shape is an edge
+bool GeomAlgoAPI_MakeShape::isDeleted(const std::shared_ptr<GeomAPI_Shape> theShape)
 {
   bool isDeleted(false);
-  if (myBuilder != NULL) 
-       isDeleted = (bool) myBuilder->IsDeleted(theShape->impl<TopoDS_Shape>());        
+  BRepBuilderAPI_MakeShape* aBuilder = implPtr<BRepBuilderAPI_MakeShape>();
+  if(aBuilder) {
+    isDeleted = aBuilder->IsDeleted(theShape->impl<TopoDS_Shape>()) == Standard_True;
+  }
   return isDeleted;
-}
\ No newline at end of file
+}