X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_MakeShape.h;h=a840233ecfad96805a04abd34befa47e7f55e12e;hb=f813e863f0a60ee69846227f99f0dd6a84f8498c;hp=6ed4f1d859425116d4bee21990fe318df4188ed1;hpb=7074394f8f08413d885f63be01df6bd5007b868c;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_MakeShape.h b/src/GeomAlgoAPI/GeomAlgoAPI_MakeShape.h index 6ed4f1d85..a840233ec 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_MakeShape.h +++ b/src/GeomAlgoAPI/GeomAlgoAPI_MakeShape.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 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 @@ -12,10 +12,9 @@ // // 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 +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #ifndef GeomAlgoAPI_MakeShape_H_ @@ -46,10 +45,14 @@ public: /// \brief Empty constructor. GEOMALGOAPI_EXPORT GeomAlgoAPI_MakeShape(); + /// Destructor for remove myHist + GEOMALGOAPI_EXPORT ~GeomAlgoAPI_MakeShape(); + /// \brief Constructor by builder and builder type. /// \param[in] theBuilder pointer to the builder. /// \param[in] theBuilderType builder type. - template explicit GeomAlgoAPI_MakeShape(T* theBuilder, + template explicit GeomAlgoAPI_MakeShape( + T* theBuilder, const BuilderType theBuilderType = OCCT_BRepBuilderAPI_MakeShape) : GeomAPI_Interface(theBuilder), myBuilderType(theBuilderType) @@ -60,7 +63,8 @@ public: /// \brief Initializes internals. /// \param[in] theBuilder pointer to the builder. /// \param[in] theBuilderType builder type. - template void initialize(T* theBuilder, + template void initialize( + T* theBuilder, const BuilderType theBuilderType = OCCT_BRepBuilderAPI_MakeShape) { setImpl(theBuilder); @@ -68,53 +72,80 @@ public: initialize(); } + /// Execute the algorithm. + GEOMALGOAPI_EXPORT virtual void build() {} + /// \return status of builder. GEOMALGOAPI_EXPORT bool isDone() const; /// \return a shape built by the shape construction algorithm. - GEOMALGOAPI_EXPORT virtual const std::shared_ptr shape() const; + GEOMALGOAPI_EXPORT virtual const GeomShapePtr shape() const; /// \return true if resulting shape is valid. GEOMALGOAPI_EXPORT bool isValid() const; - /// \return true if resulting shape has volume. - GEOMALGOAPI_EXPORT bool hasVolume() const; - /// \return map of sub-shapes of the result. To be used for History keeping. GEOMALGOAPI_EXPORT std::shared_ptr mapOfSubShapes() const; /// \return the list of shapes generated from the shape \a theShape. - /// \param[in] theShape base shape. - /// \param[out] theHistory generated shapes. - GEOMALGOAPI_EXPORT virtual void generated(const std::shared_ptr theShape, - ListOfShape& theHistory); + /// \param[in] theOldShape base shape. + /// \param[out] theNewShapes shapes generated from \a theShape. Does not cleared! + GEOMALGOAPI_EXPORT virtual void generated(const GeomShapePtr theOldShape, + ListOfShape& theNewShapes); /// \return the list of shapes modified from the shape \a theShape. - /// \param[in] theShape base shape. - /// \param[out] theHistory modified shapes. Does not cleared! - GEOMALGOAPI_EXPORT virtual void modified(const std::shared_ptr theShape, - ListOfShape& theHistory); + /// \param[in] theOldShape base shape. + /// \param[out] theNewShapes shapes modified from \a theShape. Does not cleared! + GEOMALGOAPI_EXPORT virtual void modified(const GeomShapePtr theOldShape, + ListOfShape& theNewShapes); /// \return true if theShape was deleted. - /// \param[in] theShape base shape. - GEOMALGOAPI_EXPORT virtual bool isDeleted(const std::shared_ptr theShape); + /// \param[in] theOldShape base shape. + GEOMALGOAPI_EXPORT virtual bool isDeleted(const GeomShapePtr theOldShape); /// \return true if the data were correct. GEOMALGOAPI_EXPORT virtual bool check() { return true; }; + /// \brief Prepare the naming of faces. + GEOMALGOAPI_EXPORT virtual void prepareNamingFaces(); + /// \return the list of created faces. - GEOMALGOAPI_EXPORT std::map< std::string, std::shared_ptr > getCreatedFaces() - {return myCreatedFaces;} + GEOMALGOAPI_EXPORT std::map< std::string, GeomShapePtr > getCreatedFaces() { + return myCreatedFaces; + } /// \return the error. GEOMALGOAPI_EXPORT std::string getError() { return myError; } - /// \brief Prepare the naming of faces. - GEOMALGOAPI_EXPORT virtual void prepareNamingFaces(); - /// \brief Check the validity of the produced shape. GEOMALGOAPI_EXPORT bool checkValid(std::string theMessage); + /// Optimization of access the new shapes by old shapes for the limited set of needed new shapes. + /// \param theWholeOld the whole old shape + /// \param theShapeType type of the sub-shapes that is used for optimization + /// \returns true if optimization containers are already filled + GEOMALGOAPI_EXPORT bool isNewShapesCollected(GeomShapePtr theWholeOld, + const int theShapeType); + + /// Optimization of access the new shapes by old shapes for the limited set of needed new shapes. + /// \param theWholeOld the whole old shape + /// \param theShapeType type of the sub-shapes that is used for optimization + /// \returns true if optimization containers are already filled + GEOMALGOAPI_EXPORT void collectNewShapes(GeomShapePtr theWholeOld, + const int theShapeType); + + /// Optimization of access the new shapes by old shapes for the limited set of needed new shapes. + /// \param theWholeOld the whole old shape + /// \param theNewShape the whole new shape + /// \param theShapeType type of the old sub-shapes + /// \returns compound of all old shapes that were used for creation of the given new + GEOMALGOAPI_EXPORT GeomShapePtr oldShapesForNew(GeomShapePtr theWholeOld, + GeomShapePtr theNewShape, + const int theShapeType); + + /// Replaces \a theShape with shape from \a myMap. + GEOMALGOAPI_EXPORT void fixOrientation(GeomShapePtr& theShape); + protected: /// \brief Sets builder type. /// \param[in] theBuilderType new builder type. @@ -126,7 +157,10 @@ protected: /// \brief Sets result shape. /// \param[in] theShape new shape. - void setShape(const std::shared_ptr theShape); + void setShape(const GeomShapePtr theShape); + + /// \return true if passed shape is valid for history. + bool isValidForHistory(const GeomShapePtr theShape); protected: /// Data map to keep correct orientation of sub-shapes. @@ -134,7 +168,7 @@ protected: /// Error occurred during the execution of an algorithm. std::string myError; /// Map of created faces with their name for naming. - std::map< std::string, std::shared_ptr > myCreatedFaces; + std::map< std::string, GeomShapePtr > myCreatedFaces; private: /// \brief Initializes internals. @@ -143,9 +177,14 @@ private: private: GeomAlgoAPI_MakeShape::BuilderType myBuilderType; ///< Type of make shape builder. bool myDone; ///< Builder status. - std::shared_ptr myShape; ///< Resulting shape. + GeomShapePtr myShape; ///< Resulting shape. + + /// map that is used to keep the optimization structure for access to the history + /// kind of sub-shapes -> whole old shape -> new shape -> list of old shapes that create this new + void* myHist; }; -typedef std::list > ListOfMakeShape; +typedef std::shared_ptr GeomMakeShapePtr; +typedef std::list ListOfMakeShape; #endif