X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Boolean.h;h=960edb58431382057908280b94c7ee57c4b36eb5;hb=b928c27cd38f150c23d182df53c23ab266aa6b49;hp=14edc73b33607e3b345e7971e7dd52238c86af2b;hpb=abe69bb38b6f2dee52946e626ba70b04d7c11a56;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Boolean.h b/src/FeaturesPlugin/FeaturesPlugin_Boolean.h index 14edc73b3..960edb584 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-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 @@ -20,21 +20,13 @@ #ifndef FeaturesPlugin_Boolean_H_ #define FeaturesPlugin_Boolean_H_ -#include "FeaturesPlugin.h" -#include "FeaturesPlugin_Tools.h" - -#include -#include - -#include - -class ModelAPI_Result; +#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 { @@ -77,109 +69,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::map MapShapeToSubshapes; - typedef std::map MapShapeToParent; - typedef std::set SetOfShape; - - ListOfShape myObjects; - MapShapeToParent myParent; - MapShapeToSubshapes 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; - - /// Return \c true if there is no object in hierarchy - bool IsEmpty() const; - - /// Return list of objects - const ListOfShape& Objects() const { return myObjects; } - - 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, - ListOfShape& theEdgesAndFaces); - - /// Perform Boolean operation of the object with the tools - /// \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); - - /// Perform Boolean operation of the Compsolid with the tools - /// \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); - - /// Perform Boolean operation of the Compound with the tools - /// \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); - -private: - void parentForShape(const GeomShapePtr& theShape, - const std::shared_ptr& theContext, - ObjectHierarchy& theShapesHierarchy); + /// 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); private: OperationType myOperationType;