From: dbv Date: Thu, 24 Dec 2015 07:05:23 +0000 (+0300) Subject: GeomAlgoAPI_PaveFiller now derived from GeomAlgoAPI_MakeShape X-Git-Tag: V_2.1.0~81 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=950b00b13f43db3a8d495695ef31c4ac03af1739;p=modules%2Fshaper.git GeomAlgoAPI_PaveFiller now derived from GeomAlgoAPI_MakeShape --- diff --git a/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp b/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp index 7425816a6..ee767710c 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp @@ -205,19 +205,19 @@ void FeaturesPlugin_Boolean::execute() // Add result to not used solids from compsolid. ListOfShape aShapesToAdd = aNotUsedSolids; aShapesToAdd.push_back(aBoolAlgo->shape()); - GeomAlgoAPI_PaveFiller aFillerAlgo(aShapesToAdd, true); - if(!aFillerAlgo.isDone()) { + std::shared_ptr aFillerAlgo(new GeomAlgoAPI_PaveFiller(aShapesToAdd, true)); + if(!aFillerAlgo->isDone()) { std::string aFeatureError = "PaveFiller algorithm failed"; setError(aFeatureError); return; } - aMakeShapeList.appendAlgo(aFillerAlgo.makeShape()); - aMapOfShapes.merge(aFillerAlgo.mapOfShapes()); + aMakeShapeList.appendAlgo(aFillerAlgo); + aMapOfShapes.merge(aFillerAlgo->mapOfSubShapes()); - if(GeomAlgoAPI_ShapeTools::volume(aFillerAlgo.shape()) > 1.e-7) { + if(GeomAlgoAPI_ShapeTools::volume(aFillerAlgo->shape()) > 1.e-7) { std::shared_ptr aResultBody = document()->createBody(data(), aResultIndex); - loadNamingDS(aResultBody, aCompSolid, aTools, aFillerAlgo.shape(), aMakeShapeList, aMapOfShapes); + loadNamingDS(aResultBody, aCompSolid, aTools, aFillerAlgo->shape(), aMakeShapeList, aMapOfShapes); setResult(aResultBody, aResultIndex); aResultIndex++; } @@ -312,26 +312,26 @@ void FeaturesPlugin_Boolean::execute() // Add result to not used solids from compsolid (if we have any). if(!aNotUsedSolids.empty()) { aNotUsedSolids.push_back(aShape); - GeomAlgoAPI_PaveFiller aFillerAlgo(aNotUsedSolids, true); - if(!aFillerAlgo.isDone()) { + std::shared_ptr aFillerAlgo(new GeomAlgoAPI_PaveFiller(aNotUsedSolids, true)); + if(!aFillerAlgo->isDone()) { std::string aFeatureError = "PaveFiller algorithm failed"; setError(aFeatureError); return; } - if(aFillerAlgo.shape()->isNull()) { + if(aFillerAlgo->shape()->isNull()) { static const std::string aShapeError = "Resulting shape is Null"; setError(aShapeError); return; } - if(!aFillerAlgo.isValid()) { + if(!aFillerAlgo->isValid()) { std::string aFeatureError = "Warning: resulting shape is not valid"; setError(aFeatureError); return; } - aShape = aFillerAlgo.shape(); - aMakeShapeList.appendAlgo(aFillerAlgo.makeShape()); - aMapOfShapes.merge(aFillerAlgo.mapOfShapes()); + aShape = aFillerAlgo->shape(); + aMakeShapeList.appendAlgo(aFillerAlgo); + aMapOfShapes.merge(aFillerAlgo->mapOfSubShapes()); } std::shared_ptr aResultBody = document()->createBody(data(), aResultIndex); diff --git a/src/FeaturesPlugin/FeaturesPlugin_CompositeBoolean.cpp b/src/FeaturesPlugin/FeaturesPlugin_CompositeBoolean.cpp index 0eb79e23a..50883b7c0 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_CompositeBoolean.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_CompositeBoolean.cpp @@ -246,19 +246,19 @@ void FeaturesPlugin_CompositeBoolean::execute() // Add result to not used solids from compsolid. ListOfShape aShapesToAdd = aNotUsedSolids; aShapesToAdd.push_back(aBoolAlgo->shape()); - GeomAlgoAPI_PaveFiller aFillerAlgo(aShapesToAdd, true); - if(!aFillerAlgo.isDone()) { + std::shared_ptr aFillerAlgo(new GeomAlgoAPI_PaveFiller(aShapesToAdd, true)); + if(!aFillerAlgo->isDone()) { std::string aFeatureError = "PaveFiller algorithm failed"; setError(aFeatureError); return; } - aMakeShapeList.appendAlgo(aFillerAlgo.makeShape()); - aMapOfShapes.merge(aFillerAlgo.mapOfShapes()); + aMakeShapeList.appendAlgo(aFillerAlgo); + aMapOfShapes.merge(aFillerAlgo->mapOfSubShapes()); - if(GeomAlgoAPI_ShapeTools::volume(aFillerAlgo.shape()) > 1.e-7) { + if(GeomAlgoAPI_ShapeTools::volume(aFillerAlgo->shape()) > 1.e-7) { std::shared_ptr aResultBody = document()->createBody(data(), aResultIndex); - loadNamingDS(aResultBody, aShells, aSolidsAlgos, aCompSolid, aTools, aFillerAlgo.shape(), aMakeShapeList, aMapOfShapes); + loadNamingDS(aResultBody, aShells, aSolidsAlgos, aCompSolid, aTools, aFillerAlgo->shape(), aMakeShapeList, aMapOfShapes); setResult(aResultBody, aResultIndex); aResultIndex++; } @@ -337,26 +337,26 @@ void FeaturesPlugin_CompositeBoolean::execute() // Add result to not used solids from compsolid (if we have any). if(!aNotUsedSolids.empty()) { aNotUsedSolids.push_back(aShape); - GeomAlgoAPI_PaveFiller aFillerAlgo(aNotUsedSolids, true); - if(!aFillerAlgo.isDone()) { + std::shared_ptr aFillerAlgo(new GeomAlgoAPI_PaveFiller(aNotUsedSolids, true)); + if(!aFillerAlgo->isDone()) { std::string aFeatureError = "PaveFiller algorithm failed"; setError(aFeatureError); return; } - if(aFillerAlgo.shape()->isNull()) { + if(aFillerAlgo->shape()->isNull()) { static const std::string aShapeError = "Resulting shape is Null"; setError(aShapeError); return; } - if(!aFillerAlgo.isValid()) { + if(!aFillerAlgo->isValid()) { std::string aFeatureError = "Warning: resulting shape is not valid"; setError(aFeatureError); return; } - aShape = aFillerAlgo.shape(); - aMakeShapeList.appendAlgo(aFillerAlgo.makeShape()); - aMapOfShapes.merge(aFillerAlgo.mapOfShapes()); + aShape = aFillerAlgo->shape(); + aMakeShapeList.appendAlgo(aFillerAlgo); + aMapOfShapes.merge(aFillerAlgo->mapOfSubShapes()); } std::shared_ptr aResultBody = document()->createBody(data(), aResultIndex); diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.cpp index beeccc72a..ad20d9edd 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.cpp @@ -4,20 +4,17 @@ // Created: 27 August 2015 // Author: Dmitry Bobylev -#include +#include "GeomAlgoAPI_PaveFiller.h" #include #include #include #include -#include -#include #include //================================================================================================= GeomAlgoAPI_PaveFiller::GeomAlgoAPI_PaveFiller(const ListOfShape& theListOfShape, const bool theIsMakeCompSolids) -: myDone(false) { build(theListOfShape, theIsMakeCompSolids); } @@ -39,7 +36,8 @@ void GeomAlgoAPI_PaveFiller::build(const ListOfShape& theListOfShape, const bool } BOPAlgo_Builder* aBuilder = new BOPAlgo_Builder(); - myMkShape.reset(new GeomAlgoAPI_MakeShape(aBuilder, GeomAlgoAPI_MakeShape::OCCT_BOPAlgo_Builder)); + this->setImpl(aBuilder); + this->setBuilderType(OCCT_BOPAlgo_Builder); aBuilder->SetArguments(aListOfShape); aBuilder->PerformWithFiller(aPaveFiller); iErr = aBuilder->ErrorStatus(); @@ -72,47 +70,8 @@ void GeomAlgoAPI_PaveFiller::build(const ListOfShape& theListOfShape, const bool } } - // fill data map to keep correct orientation of sub-shapes - myMap.reset(new GeomAPI_DataMapOfShapeShape()); - for (TopExp_Explorer Exp(aResult, TopAbs_FACE); Exp.More(); Exp.Next()) { - std::shared_ptr aCurrentShape(new GeomAPI_Shape()); - aCurrentShape->setImpl(new TopoDS_Shape(Exp.Current())); - myMap->bind(aCurrentShape, aCurrentShape); - } - - myShape.reset(new GeomAPI_Shape()); - myShape->setImpl(new TopoDS_Shape(aResult)); - - myDone = true; -} - -//================================================================================================= -const bool GeomAlgoAPI_PaveFiller::isDone() const -{ - return myDone; -} - -//================================================================================================= -const bool GeomAlgoAPI_PaveFiller::isValid() const -{ - BRepCheck_Analyzer aChecker(myShape->impl()); - return (aChecker.IsValid() == Standard_True); -} - -//================================================================================================= -std::shared_ptr GeomAlgoAPI_PaveFiller::shape() const -{ - return myShape; -} - -//================================================================================================= -std::shared_ptr GeomAlgoAPI_PaveFiller::mapOfShapes() const -{ - return myMap; -} - -//================================================================================================= -std::shared_ptr GeomAlgoAPI_PaveFiller::makeShape() const -{ - return myMkShape; + std::shared_ptr aShape(new GeomAPI_Shape()); + aShape->setImpl(new TopoDS_Shape(aResult)); + this->setShape(aShape); + this->setDone(true); } diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.h b/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.h index f508e7e20..d14aacbac 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.h +++ b/src/GeomAlgoAPI/GeomAlgoAPI_PaveFiller.h @@ -11,47 +11,21 @@ #include #include -#include -#include -/** \class GeomAlgoAPI_PaveFiller - * \ingroup DataAlgo - * \brief Finds the common parts from the list of shapes and breaks it to shapes with shared subshapes. - */ -class GeomAlgoAPI_PaveFiller : public GeomAPI_Interface +/// \class GeomAlgoAPI_PaveFiller +/// \ingroup DataAlgo +/// \brief Finds the common parts from the list of shapes and breaks it to shapes with shared subshapes. +class GeomAlgoAPI_PaveFiller : public GeomAlgoAPI_MakeShape { public: - /** \brief Constructor. - * \param[in] theListOfShape list of shape which should be splitted. - * \param[in] theIsMakeCompSolids if true gather shapes with shared faces to compsolids. - */ + /// \brief Constructor. + /// \param[in] theListOfShape list of shape which should be splitted. + /// \param[in] theIsMakeCompSolids if true gather shapes with shared faces to compsolids. GEOMALGOAPI_EXPORT GeomAlgoAPI_PaveFiller(const ListOfShape& theListOfShape, const bool theIsMakeCompSolids = false); - /// \return true if algorithm succeed. - GEOMALGOAPI_EXPORT const bool isDone() const; - - /// \return true if resulting shape is valid. - GEOMALGOAPI_EXPORT const bool isValid() const; - - /// \return result of the boolean algorithm. - GEOMALGOAPI_EXPORT std::shared_ptr shape() const; - - /// \return map of sub-shapes of the result. To be used for History keeping. - GEOMALGOAPI_EXPORT std::shared_ptr mapOfShapes() const; - - /// \return interface for for History processing. - GEOMALGOAPI_EXPORT std::shared_ptr makeShape() const; - private: /// Builds resulting shape. void build(const ListOfShape& theListOfShape, const bool theIsMakeCompSolids); - -private: - /// Fields. - bool myDone; - std::shared_ptr myShape; - std::shared_ptr myMap; - std::shared_ptr myMkShape; }; #endif