Salome HOME
Issue #1664 In the Sketcher, add the function Split a segment - correction for arc...
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_MakeShapeList.cpp
index cdcc4596dadc8b541ea65f98bedd3f9d896e1a81..7be7d7c12571d913d033c8ed67d144dbbaad4f4d 100644 (file)
@@ -4,12 +4,10 @@
 // Created:     27 May 2015
 // Author:      Dmitry Bobylev
 
-#include <GeomAlgoAPI_MakeShapeList.h>
+#include "GeomAlgoAPI_MakeShapeList.h"
 
-#include <BRepBuilderAPI_MakeShape.hxx>
 #include <NCollection_Map.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopoDS_Shape.hxx>
 
 //=================================================================================================
 GeomAlgoAPI_MakeShapeList::GeomAlgoAPI_MakeShapeList()
@@ -26,32 +24,40 @@ GeomAlgoAPI_MakeShapeList::GeomAlgoAPI_MakeShapeList(const ListOfMakeShape& theM
 //=================================================================================================
 void GeomAlgoAPI_MakeShapeList::init(const ListOfMakeShape& theMakeShapeList)
 {
+  if(myMap.get()) {
+    myMap->clear();
+  } else {
+    myMap.reset(new GeomAPI_DataMapOfShapeShape);
+  }
+
   myListOfMakeShape = theMakeShapeList;
-}
 
-//=================================================================================================
-void GeomAlgoAPI_MakeShapeList::append(const std::shared_ptr<GeomAlgoAPI_MakeShape> theMakeShape)
-{
-  myListOfMakeShape.push_back(theMakeShape);
+  for(ListOfMakeShape::const_iterator anIt = theMakeShapeList.cbegin();
+      anIt != theMakeShapeList.cend(); ++anIt) {
+    myMap->merge((*anIt)->mapOfSubShapes());
+  }
 }
 
 //=================================================================================================
-void GeomAlgoAPI_MakeShapeList::append(const GeomAlgoAPI_MakeShapeList& theMakeShapeList)
+void GeomAlgoAPI_MakeShapeList::appendAlgo(const std::shared_ptr<GeomAlgoAPI_MakeShape> theMakeShape)
 {
-  for(ListOfMakeShape::const_iterator anIt = theMakeShapeList.myListOfMakeShape.cbegin();
-    anIt != theMakeShapeList.myListOfMakeShape.cend(); anIt++) {
-    myListOfMakeShape.push_back(*anIt);
+  myListOfMakeShape.push_back(theMakeShape);
+  if(!myMap.get()) {
+    myMap.reset(new GeomAPI_DataMapOfShapeShape());
   }
+  myMap->merge(theMakeShape->mapOfSubShapes());
 }
 
 //=================================================================================================
 const std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_MakeShapeList::shape() const
 {
-  if(myListOfMakeShape.empty()) {
-    return std::shared_ptr<GeomAPI_Shape>();
-  } else {
+  std::shared_ptr<GeomAPI_Shape> aShape = GeomAlgoAPI_MakeShape::shape();
+  if(aShape.get() && !aShape->impl<TopoDS_Shape>().IsNull()) {
+    return aShape;
+  } else if(!myListOfMakeShape.empty()) {
     return myListOfMakeShape.back()->shape();
   }
+  return std::shared_ptr<GeomAPI_Shape>();
 }
 
 //=================================================================================================