X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_VersionedBoolean.h;h=963745141b90cfa0c2f1d03ddea44bed7c7b1f07;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=4d95da152d0b71c89c339379d590b03b3635ac59;hpb=3c59f3791eb40076c14ad4cd2e5c0d260ec643fa;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_VersionedBoolean.h b/src/FeaturesPlugin/FeaturesPlugin_VersionedBoolean.h index 4d95da152..963745141 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_VersionedBoolean.h +++ b/src/FeaturesPlugin/FeaturesPlugin_VersionedBoolean.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 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 @@ -23,9 +23,11 @@ #include "FeaturesPlugin.h" #include "FeaturesPlugin_Tools.h" +#include #include #include +#include class ModelAPI_Attribute; class ModelAPI_Result; @@ -36,114 +38,28 @@ class GeomAlgoAPI_MakeShapeList; /// \brief Feature controls a version of Boolean operations. class FeaturesPlugin_VersionedBoolean : public ModelAPI_Feature { -public: - /// Attribute name of the version of Boolean feature - inline static const std::string& VERSION_ID() +protected: + static const std::string& BOP_VERSION_9_4() { - static const std::string MY_VERSION_ID("version"); - return MY_VERSION_ID; + static const std::string VERSION("v9.4"); + return VERSION; } -protected: - /// Use plugin manager for features creation. FeaturesPlugin_VersionedBoolean() {} /// Initialize version field of the Boolean feature. /// The version is initialized for newly created features, /// not read from previously stored document. - void initVersion(const int theVersion, + void initVersion(const std::string& theVersion, const std::shared_ptr theObjectsAttr = std::shared_ptr(), const std::shared_ptr theToolsAttr = std::shared_ptr()); - /// Auxiliary class to store hierarchy of Boolean operation objects/tools - /// and their parent shapes (compounds or compsolids) - class ObjectHierarchy { - typedef std::pair ShapeAndSubshapes; - typedef std::map MapShapeToParent; - typedef std::map MapShapeToIndex; - typedef std::set SetOfShape; - - ListOfShape myObjects; ///< list of objects/tools of Boolean operation - MapShapeToParent myParent; ///< refer a shape to compound/compsolid containing it - /// indices of compounds/compsolids to keep the order of parent shapes - /// corresponding to the order of objects - MapShapeToIndex myParentIndices; - /// list of shape and its subshapes stored according to the index of parent shape - std::vector mySubshapes; - - SetOfShape myProcessedObjects; - - public: - /// Add object of Boolean opration - void AddObject(const GeomShapePtr& theObject); - - /// Maps shape and its parent - void AddParent(const GeomShapePtr& theShape, const GeomShapePtr& theParent); - - /// Return parent shape for the given, or empty if it is a high-level shape. - /// By default, the parent and all its subshapes are marked as processed for further skip. - GeomShapePtr Parent(const GeomShapePtr& theShape, bool theMarkProcessed = true); - - /// Marke the shape as already processed - void MarkProcessed(const GeomShapePtr& theShape); - /// Marke list ofshapes as already processed - void MarkProcessed(const ListOfShape& theShapes); - - /// Split compound/compsolid shape for subshapes selected for Boolean operation and the other. - void SplitCompound(const GeomShapePtr& theCompShape, - ListOfShape& theUsed, - ListOfShape& theNotUsed) const; - - /// Generates the list of top-level compounds, which contain the objects of Boolean operation. - /// The generated list will contain only shapes unused during the Boolean operation. - void CompoundsOfUnusedObjects(ListOfShape& theDestination) const; - - /// Return \c true if there is no object in hierarchy - bool IsEmpty() const; - - /// Return list of objects - const ListOfShape& Objects() const { return myObjects; } - /// Separate objects of the given range of types and all other objects - void ObjectsByType(ListOfShape& theShapesByType, ListOfShape& theOtherShapes, - const GeomAPI_Shape::ShapeType theMinType = GeomAPI_Shape::COMPOUND, - const GeomAPI_Shape::ShapeType theMaxType = GeomAPI_Shape::SHAPE) const; - - private: - GeomShapePtr collectUnusedSubs(const GeomShapePtr theTopLevelCompound, - const SetOfShape& theUsed) const; - - public: - class Iterator { - friend class ObjectHierarchy; - - ObjectHierarchy* myHierarchy; - ListOfShape::iterator myObject; - - Iterator() {} - Iterator(ObjectHierarchy* theHierarchy, bool isBegin = true); - - void SkipAlreadyProcessed(); - - public: - bool operator==(const Iterator&) const; - bool operator!=(const Iterator&) const; - - Iterator& operator++(); - Iterator operator++(int); - - GeomShapePtr operator*() const; - }; - - Iterator Begin(); - Iterator End(); - }; - /// Process SelectionList attribute and fill the objects hierarchy. bool processAttribute(const std::string& theAttributeName, - ObjectHierarchy& theObjects, + GeomAPI_ShapeHierarchy& theObjects, ListOfShape& thePlanesList); /// Perform Boolean operation of the object with the tools. @@ -154,8 +70,9 @@ protected: const GeomShapePtr& theObject, const ListOfShape& theTools, const ListOfShape& thePlanes, + const double theFuzzy, int& theResultIndex, - std::vector& theResultBaseAlgoList, + std::vector& theResultBaseAlgoList, ListOfShape& theResultShapesList, GeomShapePtr theResulCompound = GeomShapePtr()); @@ -164,12 +81,13 @@ protected: /// is added to this compound, and corresponding ResultBody is not generated. /// \return \c false if something went wrong bool processCompsolid(const GeomAlgoAPI_Tools::BOPType theBooleanType, - ObjectHierarchy& theCompsolidHierarchy, + GeomAPI_ShapeHierarchy& theCompsolidHierarchy, const GeomShapePtr& theCompsolid, const ListOfShape& theTools, const ListOfShape& thePlanes, + const double theFuzzy, int& theResultIndex, - std::vector& theResultBaseAlgoList, + std::vector& theResultBaseAlgoList, ListOfShape& theResultShapesList, GeomShapePtr theResulCompound = GeomShapePtr()); @@ -178,11 +96,12 @@ protected: /// is added to this compound, and corresponding ResultBody is not generated. /// \return \c false if something went wrong bool processCompound(const GeomAlgoAPI_Tools::BOPType theBooleanType, - ObjectHierarchy& theCompoundHierarchy, + GeomAPI_ShapeHierarchy& theCompoundHierarchy, const GeomShapePtr& theCompound, const ListOfShape& theTools, + const double theFuzzy, int& theResultIndex, - std::vector& theResultBaseAlgoList, + std::vector& theResultBaseAlgoList, ListOfShape& theResultShapesList, GeomShapePtr theResulCompound = GeomShapePtr()); @@ -196,17 +115,9 @@ protected: /// into a single compound and add the result of the FUSE operation. GeomShapePtr keepUnusedSubsOfCompound( const GeomShapePtr& theResult, - const ObjectHierarchy& theObjectsHierarchy, - const ObjectHierarchy& theToolsHierarchy, + const GeomAPI_ShapeHierarchy& theObjectsHierarchy, + const GeomAPI_ShapeHierarchy& theToolsHierarchy, std::shared_ptr theMakeShapeList); - - /// Return version of the feature - int version(); - -private: - void parentForShape(const GeomShapePtr& theShape, - const std::shared_ptr& theContext, - ObjectHierarchy& theShapesHierarchy); }; #endif