X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Boolean.h;h=f87c28fdcd0fa159cc73cc0b593ff1b678c541a2;hb=HEAD;hp=c18d2eb67fb8e78061bd0eb85eaa657aeb5ef28a;hpb=4dac51be8dafc9fd0e2b50ce5f773471ee174ff2;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Boolean.h b/src/FeaturesPlugin/FeaturesPlugin_Boolean.h index c18d2eb67..f87c28fdc 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Boolean.h +++ b/src/FeaturesPlugin/FeaturesPlugin_Boolean.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -20,22 +20,13 @@ #ifndef FeaturesPlugin_Boolean_H_ #define FeaturesPlugin_Boolean_H_ -#include "FeaturesPlugin.h" -#include "FeaturesPlugin_Tools.h" - -#include -#include - -#include - -class ModelAPI_Result; -class GeomAlgoAPI_MakeShapeList; +#include "FeaturesPlugin_VersionedBoolean.h" /// \class FeaturesPlugin_Boolean /// \ingroup Plugins /// \brief Feature for applying of Boolean operations on Solids. /// Supports four kinds of Boolean operations: Cut, Fuse, Common and Smash. -class FeaturesPlugin_Boolean : public ModelAPI_Feature +class FeaturesPlugin_Boolean : public FeaturesPlugin_VersionedBoolean { public: enum OperationType { @@ -60,11 +51,18 @@ public: return MY_TOOL_LIST_ID; } - /// Attribute name of the version of Boolean feature - inline static const std::string& VERSION_ID() + /// Attribute name of use fuzzy parameter. + inline static const std::string& USE_FUZZY_ID() { - static const std::string MY_VERSION_ID("version"); - return MY_VERSION_ID; + static const std::string MY_USE_FUZZY_ID("use_fuzzy"); + return MY_USE_FUZZY_ID; + } + + /// Attribute name of fuzzy parameter. + inline static const std::string& FUZZY_PARAM_ID() + { + static const std::string MY_FUZZY_PARAM_ID("fuzzy_param"); + return MY_FUZZY_PARAM_ID; } /// \return boolean operation type. @@ -78,11 +76,6 @@ protected: /// Use plugin manager for features creation. FeaturesPlugin_Boolean(const OperationType theOperationType); - /// 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); - /// Load Naming data structure of the feature to the document void loadNamingDS(std::shared_ptr theResultBody, const std::shared_ptr theBaseShape, @@ -90,154 +83,13 @@ protected: const std::shared_ptr theResultShape, const GeomMakeShapePtr& theMakeShape); - - /// 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); - - /// 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, - ListOfShape& thePlanesList); - - /// Perform Boolean operation of the object with the tools. - /// In case of theResultCompound is not empty, the result of Boolean operation - /// is added to this compound, and corresponding ResultBody is not generated. - /// \return \c false if something went wrong - bool processObject(const GeomAlgoAPI_Tools::BOPType theBooleanType, - const GeomShapePtr& theObject, - const ListOfShape& theTools, - const ListOfShape& thePlanes, - int& theResultIndex, - std::vector& theResultBaseAlgoList, - ListOfShape& theResultShapesList, - GeomShapePtr theResulCompound = GeomShapePtr()); - - /// Perform Boolean operation of the Compsolid with the tools - /// In case of theResultCompound is not empty, the result of Boolean operation - /// 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, - const ObjectHierarchy& theCompsolidHierarchy, - const GeomShapePtr& theCompsolid, - const ListOfShape& theTools, - const ListOfShape& thePlanes, - int& theResultIndex, - std::vector& theResultBaseAlgoList, - ListOfShape& theResultShapesList, - GeomShapePtr theResulCompound = GeomShapePtr()); - - /// Perform Boolean operation of the Compound with the tools - /// In case of theResultCompound is not empty, the result of Boolean operation - /// 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, - const ObjectHierarchy& theCompoundHierarchy, - const GeomShapePtr& theCompound, - const ListOfShape& theTools, - int& theResultIndex, - std::vector& theResultBaseAlgoList, - ListOfShape& theResultShapesList, - GeomShapePtr theResulCompound = GeomShapePtr()); - - /// Process unused sub-shapes of compounds. - /// Keep the compound hierarchy, but merge top-level compounds - /// into a single compound and add the result of the FUSE operation. - GeomShapePtr keepUnusedSubsOfCompound( - const GeomShapePtr& theResult, - const ObjectHierarchy& theObjectsHierarchy, - const ObjectHierarchy& theToolsHierarchy, - std::shared_ptr theMakeShapeList); - /// Store result shape if it is not empty and increase results counter void storeResult(const ListOfShape& theObjects, const ListOfShape& theTools, const GeomShapePtr theResultShape, int& theResultIndex, std::shared_ptr theMakeShapeList, - std::vector& theResultBaseAlgoList); - - /// Return version of the feature - int version(); - -private: - void parentForShape(const GeomShapePtr& theShape, - const std::shared_ptr& theContext, - ObjectHierarchy& theShapesHierarchy); + std::vector& theResultBaseAlgoList); private: OperationType myOperationType;