From 6c9733606d54a0813c3b7d5522dd74a3af989917 Mon Sep 17 00:00:00 2001 From: jfa Date: Thu, 7 Jul 2022 09:41:56 +0300 Subject: [PATCH] [bos #30433] [CEA 30426] Shaper performance issue. Milti-translation. --- .../FeaturesPlugin_MultiRotation.cpp | 4 +- .../FeaturesPlugin_MultiTranslation.cpp | 4 +- src/GeomAlgoAPI/CMakeLists.txt | 2 + src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.cpp | 71 +++++++++++++++++++ src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.h | 51 +++++++++++++ 5 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.cpp create mode 100644 src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.h diff --git a/src/FeaturesPlugin/FeaturesPlugin_MultiRotation.cpp b/src/FeaturesPlugin/FeaturesPlugin_MultiRotation.cpp index 16a2e16cb..83f296653 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_MultiRotation.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_MultiRotation.cpp @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include #include @@ -195,7 +195,7 @@ void FeaturesPlugin_MultiRotation::performRotation1D() } // Collect transformations for each object in a part. - std::shared_ptr aMakeShapeList(new GeomAlgoAPI_MakeShapeList); + std::shared_ptr aMakeShapeList(new GeomAlgoAPI_MakeShapeSet); for (GeomAPI_ShapeHierarchy::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end(); anObjectsIt++) { std::shared_ptr aBaseShape = *anObjectsIt; diff --git a/src/FeaturesPlugin/FeaturesPlugin_MultiTranslation.cpp b/src/FeaturesPlugin/FeaturesPlugin_MultiTranslation.cpp index 5067c4ac8..fb71d07e1 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_MultiTranslation.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_MultiTranslation.cpp @@ -21,7 +21,7 @@ #include #include -#include +#include #include #include @@ -136,7 +136,7 @@ void FeaturesPlugin_MultiTranslation::execute() } // Collect transformations for each object in a part. - std::shared_ptr aMakeShapeList(new GeomAlgoAPI_MakeShapeList); + std::shared_ptr aMakeShapeList(new GeomAlgoAPI_MakeShapeSet); for (GeomAPI_ShapeHierarchy::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end(); anObjectsIt++) { std::shared_ptr aBaseShape = *anObjectsIt; diff --git a/src/GeomAlgoAPI/CMakeLists.txt b/src/GeomAlgoAPI/CMakeLists.txt index ef574969c..86ee8fe7c 100644 --- a/src/GeomAlgoAPI/CMakeLists.txt +++ b/src/GeomAlgoAPI/CMakeLists.txt @@ -39,6 +39,7 @@ SET(PROJECT_HEADERS GeomAlgoAPI_MakeShape.h GeomAlgoAPI_MakeShapeCustom.h GeomAlgoAPI_MakeShapeList.h + GeomAlgoAPI_MakeShapeSet.h GeomAlgoAPI_MakeSweep.h GeomAlgoAPI_MakeVolume.h GeomAlgoAPI_DFLoader.h @@ -112,6 +113,7 @@ SET(PROJECT_SOURCES GeomAlgoAPI_MakeShape.cpp GeomAlgoAPI_MakeShapeCustom.cpp GeomAlgoAPI_MakeShapeList.cpp + GeomAlgoAPI_MakeShapeSet.cpp GeomAlgoAPI_MakeSweep.cpp GeomAlgoAPI_MakeVolume.cpp GeomAlgoAPI_DFLoader.cpp diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.cpp new file mode 100644 index 000000000..f624da5a2 --- /dev/null +++ b/src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.cpp @@ -0,0 +1,71 @@ +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "GeomAlgoAPI_MakeShapeSet.h" + + +#include +#include +#include + +//================================================================================================== +GeomAlgoAPI_MakeShapeSet::GeomAlgoAPI_MakeShapeSet() +: GeomAlgoAPI_MakeShapeList() +{} + +//================================================================================================== +GeomAlgoAPI_MakeShapeSet::GeomAlgoAPI_MakeShapeSet(const ListOfMakeShape& theMakeShapeSet) +: GeomAlgoAPI_MakeShapeList(theMakeShapeSet) +{ +} + +//================================================================================================== +void GeomAlgoAPI_MakeShapeSet::generated(const GeomShapePtr theOldShape, + ListOfShape& theNewShapes) +{ + if (myListOfMakeShape.empty()) { + return; + } + + for (ListOfMakeShape::iterator aBuilderIt = myListOfMakeShape.begin(); + aBuilderIt != myListOfMakeShape.end(); + ++aBuilderIt) + { + GeomMakeShapePtr aMakeShape = *aBuilderIt; + aMakeShape->generated(theOldShape, theNewShapes); + } +} + +//================================================================================================== +void GeomAlgoAPI_MakeShapeSet::modified(const GeomShapePtr theOldShape, + ListOfShape& theNewShapes) +{ + if (myListOfMakeShape.empty()) { + return; + } + + for (ListOfMakeShape::iterator aBuilderIt = myListOfMakeShape.begin(); + aBuilderIt != myListOfMakeShape.end(); + ++aBuilderIt) + { + GeomMakeShapePtr aMakeShape = *aBuilderIt; + ListOfShape aModifiedShapes; + aMakeShape->modified(theOldShape, theNewShapes); + } +} diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.h b/src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.h new file mode 100644 index 000000000..5f1522596 --- /dev/null +++ b/src/GeomAlgoAPI/GeomAlgoAPI_MakeShapeSet.h @@ -0,0 +1,51 @@ +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef GeomAlgoAPI_MakeShapeSet_H_ +#define GeomAlgoAPI_MakeShapeSet_H_ + +#include +#include +#include + +#include + +/// \class GeomAlgoAPI_MakeShapeSet +/// \ingroup DataAlgo +/// \brief Set of independent topological shapes constructions +class GeomAlgoAPI_MakeShapeSet : public GeomAlgoAPI_MakeShapeList +{ +public: + /// Default constructor + GEOMALGOAPI_EXPORT GeomAlgoAPI_MakeShapeSet(); + + /// \brief Constructor + /// \param[in] theMakeShapeSet list of algorithms. + GEOMALGOAPI_EXPORT GeomAlgoAPI_MakeShapeSet(const ListOfMakeShape& theMakeShapeSet); + + /// \return the list of shapes generated from the shape \a theShape + GEOMALGOAPI_EXPORT virtual void generated(const GeomShapePtr theShape, + ListOfShape& theHistory); + + /// \return the list of shapes modified from the shape \a theShape + GEOMALGOAPI_EXPORT virtual void modified(const GeomShapePtr theShape, + ListOfShape& theHistory); +}; + +#endif -- 2.30.2