// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-// File: GeomAlgoAPI_MakeShapeListList.h
+// File: GeomAlgoAPI_MakeShapeListList.cpp
// 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()
myListOfMakeShape = theMakeShapeList;
}
+//=================================================================================================
+void GeomAlgoAPI_MakeShapeList::appendAlgo(const std::shared_ptr<GeomAlgoAPI_MakeShape> theMakeShape)
+{
+ myListOfMakeShape.push_back(theMakeShape);
+}
+
//=================================================================================================
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>();
}
//=================================================================================================
void GeomAlgoAPI_MakeShapeList::generated(const std::shared_ptr<GeomAPI_Shape> theShape,
ListOfShape& theHistory)
{
- result(theShape, theHistory, GeomAlgoAPI_MakeShapeList::Generated);
+ result(theShape, GeomAlgoAPI_MakeShapeList::Generated, theHistory);
}
//=================================================================================================
void GeomAlgoAPI_MakeShapeList::modified(const std::shared_ptr<GeomAPI_Shape> theShape,
ListOfShape& theHistory)
{
- result(theShape, theHistory, GeomAlgoAPI_MakeShapeList::Modified);
+ result(theShape, GeomAlgoAPI_MakeShapeList::Modified, theHistory);
}
bool GeomAlgoAPI_MakeShapeList::isDeleted(const std::shared_ptr<GeomAPI_Shape> theShape)
{
for(ListOfMakeShape::iterator aBuilderIt = myListOfMakeShape.begin(); aBuilderIt != myListOfMakeShape.end(); aBuilderIt++) {
- BRepBuilderAPI_MakeShape* aBuilder = (*aBuilderIt)->implPtr<BRepBuilderAPI_MakeShape>();
- if(aBuilder && (aBuilder->IsDeleted(theShape->impl<TopoDS_Shape>()) == Standard_True)) {
+ std::shared_ptr<GeomAlgoAPI_MakeShape> aMakeShape = *aBuilderIt;
+ if(aMakeShape->isDeleted(theShape)) {
return true;
}
}
}
void GeomAlgoAPI_MakeShapeList::result(const std::shared_ptr<GeomAPI_Shape> theShape,
- ListOfShape& theHistory,
- OperationType theOperationType)
+ OperationType theOperationType,
+ ListOfShape& theHistory)
{
if(myListOfMakeShape.empty()) {
return;
aResultShapes.Add(theShape->impl<TopoDS_Shape>());
for(ListOfMakeShape::iterator aBuilderIt = myListOfMakeShape.begin(); aBuilderIt != myListOfMakeShape.end(); aBuilderIt++) {
- BRepBuilderAPI_MakeShape* aBuilder = (*aBuilderIt)->implPtr<BRepBuilderAPI_MakeShape>();
+ std::shared_ptr<GeomAlgoAPI_MakeShape> aMakeShape = *aBuilderIt;
NCollection_Map<TopoDS_Shape> aTempShapes;
bool hasResults = false;
for(NCollection_Map<TopoDS_Shape>::Iterator aShapeIt(anAlgoShapes); aShapeIt.More(); aShapeIt.Next()) {
- const TopoDS_Shape& aShape = aShapeIt.Value();
- const TopTools_ListOfShape& aGeneratedList = aBuilder->Generated(aShape);
- for(TopTools_ListIteratorOfListOfShape anIt(aGeneratedList); anIt.More(); anIt.Next()) {
- aTempShapes.Add(anIt.Value());
- aResultShapes.Add(anIt.Value());
+ std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape);
+ aShape->setImpl(new TopoDS_Shape(aShapeIt.Value()));
+ ListOfShape aGeneratedShapes;
+ aMakeShape->generated(aShape, aGeneratedShapes);
+ for(ListOfShape::const_iterator anIt = aGeneratedShapes.cbegin(); anIt != aGeneratedShapes.cend(); anIt++) {
+ aTempShapes.Add((*anIt)->impl<TopoDS_Shape>());
+ aResultShapes.Add((*anIt)->impl<TopoDS_Shape>());
hasResults = true;
}
- const TopTools_ListOfShape& aModifiedList = aBuilder->Modified(aShape);
- for(TopTools_ListIteratorOfListOfShape anIt(aModifiedList); anIt.More(); anIt.Next()) {
- aTempShapes.Add(anIt.Value());
- aResultShapes.Add(anIt.Value());
+ ListOfShape aModifiedShapes;
+ aMakeShape->modified(aShape, aModifiedShapes);
+ for(ListOfShape::const_iterator anIt = aModifiedShapes.cbegin(); anIt != aModifiedShapes.cend(); anIt++) {
+ aTempShapes.Add((*anIt)->impl<TopoDS_Shape>());
+ aResultShapes.Add((*anIt)->impl<TopoDS_Shape>());
hasResults = true;
}
if(hasResults) {
- aResultShapes.Remove(aShape);
+ aResultShapes.Remove(aShape->impl<TopoDS_Shape>());
}
}
anAlgoShapes.Unite(aTempShapes);
theHistory.push_back(aShape);
}
}
-