Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-23 09:16:47

0001 // Created by: Peter KURNEV
0002 // Copyright (c) 2010-2014 OPEN CASCADE SAS
0003 // Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
0004 // Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
0005 //                         EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
0006 //
0007 // This file is part of Open CASCADE Technology software library.
0008 //
0009 // This library is free software; you can redistribute it and/or modify it under
0010 // the terms of the GNU Lesser General Public License version 2.1 as published
0011 // by the Free Software Foundation, with special exception defined in the file
0012 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0013 // distribution for complete text of the license and disclaimer of any warranty.
0014 //
0015 // Alternatively, this file may be used under the terms of Open CASCADE
0016 // commercial license or contractual agreement.
0017 
0018 #ifndef _BOPAlgo_Builder_HeaderFile
0019 #define _BOPAlgo_Builder_HeaderFile
0020 
0021 #include <Standard.hxx>
0022 #include <Standard_DefineAlloc.hxx>
0023 #include <Standard_Handle.hxx>
0024 
0025 #include <BOPAlgo_PPaveFiller.hxx>
0026 #include <BOPAlgo_BuilderShape.hxx>
0027 #include <BOPAlgo_GlueEnum.hxx>
0028 #include <BOPAlgo_Operation.hxx>
0029 #include <BOPDS_PDS.hxx>
0030 #include <NCollection_BaseAllocator.hxx>
0031 #include <Standard_Integer.hxx>
0032 #include <Standard_Real.hxx>
0033 #include <TopoDS_Shape.hxx>
0034 #include <NCollection_List.hxx>
0035 #include <TopTools_ShapeMapHasher.hxx>
0036 #include <NCollection_DataMap.hxx>
0037 #include <NCollection_Map.hxx>
0038 #include <TopAbs_ShapeEnum.hxx>
0039 class IntTools_Context;
0040 class TopoDS_Shape;
0041 
0042 //!
0043 //! The class is a General Fuse algorithm - base algorithm for the
0044 //! algorithms in the Boolean Component. Its main purpose is to build
0045 //! the split parts of the argument shapes from which the result of
0046 //! the operations is combined.
0047 //! The result of the General Fuse algorithm itself is a compound
0048 //! containing all split parts of the arguments.
0049 //!
0050 //! Additionally to the options of the base classes, the algorithm has
0051 //! the following options:
0052 //! - *Safe processing mode* - allows to avoid modification of the input
0053 //!                            shapes during the operation (by default it is off);
0054 //! - *Gluing options* - allows to speed up the calculation of the intersections
0055 //!                      on the special cases, in which some sub-shapes are coinciding.
0056 //! - *Disabling the check for inverted solids* - Disables/Enables the check of the input solids
0057 //!                          for inverted status (holes in the space). The default value is TRUE,
0058 //!                          i.e. the check is performed. Setting this flag to FALSE for inverted
0059 //!                          solids, most likely will lead to incorrect results.
0060 //!
0061 //! The algorithm returns the following warnings:
0062 //! - *BOPAlgo_AlertUnableToOrientTheShape* - in case the check on the orientation of the split
0063 //! shape
0064 //!                                           to match the orientation of the original shape has
0065 //!                                           failed.
0066 //!
0067 //! The algorithm returns the following Error statuses:
0068 //! - *BOPAlgo_AlertTooFewArguments* - in case there are no enough arguments to perform the
0069 //! operation;
0070 //! - *BOPAlgo_AlertNoFiller* - in case the intersection tool has not been created;
0071 //! - *BOPAlgo_AlertIntersectionFailed* - in case the intersection of the arguments has failed;
0072 //! - *BOPAlgo_AlertBuilderFailed* - in case building splits of arguments has failed with some
0073 //! unexpected error.
0074 //!
0075 class BOPAlgo_Builder : public BOPAlgo_BuilderShape
0076 {
0077 public:
0078   DEFINE_STANDARD_ALLOC
0079 
0080   //! Empty constructor.
0081   Standard_EXPORT BOPAlgo_Builder();
0082   Standard_EXPORT ~BOPAlgo_Builder() override;
0083 
0084   Standard_EXPORT BOPAlgo_Builder(const occ::handle<NCollection_BaseAllocator>& theAllocator);
0085 
0086   //! Clears the content of the algorithm.
0087   Standard_EXPORT void Clear() override;
0088 
0089   //! Returns the PaveFiller, algorithm for sub-shapes intersection.
0090   BOPAlgo_PPaveFiller PPaveFiller() { return myPaveFiller; }
0091 
0092   //! Returns the Data Structure, holder of intersection information.
0093   BOPDS_PDS PDS() { return myDS; }
0094 
0095   //! Returns the Context, tool for cashing heavy algorithms.
0096   occ::handle<IntTools_Context> Context() const { return myContext; }
0097 
0098 public: //! @name Arguments
0099   //! Adds the argument to the operation.
0100   Standard_EXPORT virtual void AddArgument(const TopoDS_Shape& theShape);
0101 
0102   //! Sets the list of arguments for the operation.
0103   Standard_EXPORT virtual void SetArguments(const NCollection_List<TopoDS_Shape>& theLS);
0104 
0105   //! Returns the list of arguments.
0106   const NCollection_List<TopoDS_Shape>& Arguments() const { return myArguments; }
0107 
0108 public: //! @name Options
0109   //! Sets the flag that defines the mode of treatment.
0110   //! In non-destructive mode the argument shapes are not modified. Instead
0111   //! a copy of a sub-shape is created in the result if it is needed to be updated.
0112   //! This flag is taken into account if internal PaveFiller is used only.
0113   //! In the case of calling PerformWithFiller the corresponding flag of that PaveFiller
0114   //! is in force.
0115   void SetNonDestructive(const bool theFlag) { myNonDestructive = theFlag; }
0116 
0117   //! Returns the flag that defines the mode of treatment.
0118   //! In non-destructive mode the argument shapes are not modified. Instead
0119   //! a copy of a sub-shape is created in the result if it is needed to be updated.
0120   bool NonDestructive() const { return myNonDestructive; }
0121 
0122   //! Sets the glue option for the algorithm
0123   void SetGlue(const BOPAlgo_GlueEnum theGlue) { myGlue = theGlue; }
0124 
0125   //! Returns the glue option of the algorithm
0126   BOPAlgo_GlueEnum Glue() const { return myGlue; }
0127 
0128   //! Enables/Disables the check of the input solids for inverted status
0129   void SetCheckInverted(const bool theCheck) { myCheckInverted = theCheck; }
0130 
0131   //! Returns the flag defining whether the check for input solids on inverted status
0132   //! should be performed or not.
0133   bool CheckInverted() const { return myCheckInverted; }
0134 
0135 public: //! @name Performing the operation
0136   //! Performs the operation.
0137   //! The intersection will be performed also.
0138   Standard_EXPORT void Perform(
0139     const Message_ProgressRange& theRange = Message_ProgressRange()) override;
0140 
0141   //! Performs the operation with the prepared filler.
0142   //! The intersection will not be performed in this case.
0143   Standard_EXPORT virtual void PerformWithFiller(
0144     const BOPAlgo_PaveFiller&    theFiller,
0145     const Message_ProgressRange& theRange = Message_ProgressRange());
0146 
0147 public: //! @name BOPs on open solids
0148   //! Builds the result shape according to the given states for the objects
0149   //! and tools. These states can be unambiguously converted into the Boolean operation type.
0150   //! Thus, it performs the Boolean operation on the given groups of shapes.
0151   //!
0152   //! The result is built basing on the result of Builder operation (GF or any other).
0153   //! The only condition for the Builder is that the splits of faces should be created
0154   //! and classified relatively solids.
0155   //!
0156   //! The method uses classification approach for choosing the faces which will
0157   //! participate in building the result shape:
0158   //! - All faces from each group having the given state for the opposite group
0159   //!   will be taken into result.
0160   //!
0161   //! Such approach shows better results (in comparison with BOPAlgo_BuilderSolid approach)
0162   //! when working with open solids. However, the result may not be always
0163   //! correct on such data (at least, not as expected) as the correct classification
0164   //! of the faces relatively open solids is not always possible and may vary
0165   //! depending on the chosen classification point on the face.
0166   //!
0167   //! History is not created for the solids in this method.
0168   //!
0169   //! To avoid pollution of the report of Builder algorithm, there is a possibility to pass
0170   //! the different report to collect the alerts of the method only. But, if the new report
0171   //! is not given, the Builder report will be used.
0172   //! So, even if Builder passed without any errors, but some error has been stored into its report
0173   //! in this method, for the following calls the Builder report must be cleared.
0174   //!
0175   //! The method may set the following errors:
0176   //! - BOPAlgo_AlertBuilderFailed - Building operation has not been performed yet or failed;
0177   //! - BOPAlgo_AlertBOPNotSet - invalid BOP type is given (COMMON/FUSE/CUT/CUT21 are supported);
0178   //! - BOPAlgo_AlertTooFewArguments - arguments are not given;
0179   //! - BOPAlgo_AlertUnknownShape - the shape is unknown for the operation.
0180   //!
0181   //! Parameters:
0182   //! @param theObjects     - The group of Objects for BOP;
0183   //! @param theObjState    - State for objects faces to pass into result;
0184   //! @param theTools       - The group of Tools for BOP;
0185   //! @param theToolsState  - State for tools faces to pass into result;
0186   //! @param theReport      - The alternative report to avoid pollution of the main one.
0187   Standard_EXPORT virtual void BuildBOP(const NCollection_List<TopoDS_Shape>& theObjects,
0188                                         const TopAbs_State                    theObjState,
0189                                         const NCollection_List<TopoDS_Shape>& theTools,
0190                                         const TopAbs_State                    theToolsState,
0191                                         const Message_ProgressRange&          theRange,
0192                                         occ::handle<Message_Report>           theReport = nullptr);
0193 
0194   //! Builds the result of Boolean operation of given type
0195   //! basing on the result of Builder operation (GF or any other).
0196   //!
0197   //! The method converts the given type of operation into the states
0198   //! for the objects and tools required for their face to pass into result
0199   //! and performs the call to the same method, but with states instead
0200   //! of operation type.
0201   //!
0202   //! The conversion looks as follows:
0203   //! - COMMON is built from the faces of objects located IN any of the tools
0204   //!          and vice versa.
0205   //! - FUSE   is built from the faces OUT of all given shapes;
0206   //! - CUT    is built from the faces of the objects OUT of the tools and
0207   //!          faces of the tools located IN solids of the objects.
0208   //!
0209   //! @param theObjects   - The group of Objects for BOP;
0210   //! @param theTools     - The group of Tools for BOP;
0211   //! @param theOperation - The BOP type;
0212   //! @param theRange     - The parameter to progressIndicator
0213   //! @param theReport    - The alternative report to avoid pollution of the global one.
0214   void BuildBOP(const NCollection_List<TopoDS_Shape>& theObjects,
0215                 const NCollection_List<TopoDS_Shape>& theTools,
0216                 const BOPAlgo_Operation               theOperation,
0217                 const Message_ProgressRange&          theRange,
0218                 occ::handle<Message_Report>           theReport = nullptr)
0219   {
0220     TopAbs_State anObjState, aToolsState;
0221     switch (theOperation)
0222     {
0223       case BOPAlgo_COMMON: {
0224         anObjState  = TopAbs_IN;
0225         aToolsState = TopAbs_IN;
0226         break;
0227       }
0228       case BOPAlgo_FUSE: {
0229         anObjState  = TopAbs_OUT;
0230         aToolsState = TopAbs_OUT;
0231         break;
0232       }
0233       case BOPAlgo_CUT: {
0234         anObjState  = TopAbs_OUT;
0235         aToolsState = TopAbs_IN;
0236         break;
0237       }
0238       case BOPAlgo_CUT21: {
0239         anObjState  = TopAbs_IN;
0240         aToolsState = TopAbs_OUT;
0241         break;
0242       }
0243       default: {
0244         anObjState  = TopAbs_UNKNOWN;
0245         aToolsState = TopAbs_UNKNOWN;
0246         break;
0247       }
0248     }
0249     BuildBOP(theObjects, anObjState, theTools, aToolsState, theRange, theReport);
0250   }
0251 
0252 protected: //! @name History methods
0253   //! Prepare information for history support.
0254   Standard_EXPORT void PrepareHistory(const Message_ProgressRange& theRange);
0255 
0256   //! Prepare history information for the input shapes taking into account possible
0257   //! operation-specific modifications.
0258   //! For instance, in the CellsBuilder operation, additionally to splitting input shapes
0259   //! the splits of the shapes (or the shapes themselves) may be unified during removal of internal
0260   //! boundaries. In this case each split should be linked to the unified shape.
0261   //!
0262   //! To have correct history information, the method should be redefined in each operation
0263   //! where such additional modification is possible. The input shape <theS> should be the one from
0264   //! arguments, and the returning list should contain all final elements to which the input shape
0265   //! has evolved, including those not contained in the result shape.
0266   //!
0267   //! The method returns pointer to the list of modified elements.
0268   //! NULL pointer means that the shape has not been modified at all.
0269   //!
0270   //! The General Fuse operation does not perform any other modification than splitting the input
0271   //! shapes basing on their intersection information. This information is contained in myImages
0272   //! map. Thus, here the method returns only splits (if any) contained in this map.
0273   Standard_EXPORT virtual const NCollection_List<TopoDS_Shape>* LocModified(
0274     const TopoDS_Shape& theS);
0275 
0276   //! Returns the list of shapes generated from the shape theS.
0277   //! Similarly to *LocModified* must be redefined for specific operations,
0278   //! obtaining Generated elements differently.
0279   Standard_EXPORT virtual const NCollection_List<TopoDS_Shape>& LocGenerated(
0280     const TopoDS_Shape& theS);
0281 
0282 public: //! @name Images/Origins
0283   //! Returns the map of images.
0284   const NCollection_DataMap<TopoDS_Shape, NCollection_List<TopoDS_Shape>, TopTools_ShapeMapHasher>&
0285     Images() const
0286   {
0287     return myImages;
0288   }
0289 
0290   //! Returns the map of origins.
0291   const NCollection_DataMap<TopoDS_Shape, NCollection_List<TopoDS_Shape>, TopTools_ShapeMapHasher>&
0292     Origins() const
0293   {
0294     return myOrigins;
0295   }
0296 
0297   //! Returns the map of Same Domain (SD) shapes - coinciding shapes
0298   //! from different arguments.
0299   const NCollection_DataMap<TopoDS_Shape, TopoDS_Shape, TopTools_ShapeMapHasher>& ShapesSD() const
0300   {
0301     return myShapesSD;
0302   }
0303 
0304 protected: //! @name Analyze progress of the operation
0305   //! List of operations to be supported by the Progress Indicator
0306   enum BOPAlgo_PIOperation
0307   {
0308     PIOperation_TreatVertices = 0,
0309     PIOperation_TreatEdges,
0310     PIOperation_TreatWires,
0311     PIOperation_TreatFaces,
0312     PIOperation_TreatShells,
0313     PIOperation_TreatSolids,
0314     PIOperation_TreatCompsolids,
0315     PIOperation_TreatCompounds,
0316     PIOperation_FillHistory,
0317     PIOperation_PostTreat,
0318     PIOperation_Last
0319   };
0320 
0321   //! Auxiliary structure to get information about number of shapes
0322   //! of each type participated in operation.
0323   class NbShapes
0324   {
0325   public:
0326     NbShapes()
0327     {
0328       for (int i = 0; i < 8; ++i)
0329       {
0330         myNbShapesArr[i] = 0;
0331       }
0332     }
0333 
0334     int NbVertices() const { return myNbShapesArr[0]; }
0335 
0336     int NbEdges() const { return myNbShapesArr[1]; }
0337 
0338     int NbWires() const { return myNbShapesArr[2]; }
0339 
0340     int NbFaces() const { return myNbShapesArr[3]; }
0341 
0342     int NbShells() const { return myNbShapesArr[4]; }
0343 
0344     int NbSolids() const { return myNbShapesArr[5]; }
0345 
0346     int NbCompsolids() const { return myNbShapesArr[6]; }
0347 
0348     int NbCompounds() const { return myNbShapesArr[7]; }
0349 
0350     int& NbVertices() { return myNbShapesArr[0]; }
0351 
0352     int& NbEdges() { return myNbShapesArr[1]; }
0353 
0354     int& NbWires() { return myNbShapesArr[2]; }
0355 
0356     int& NbFaces() { return myNbShapesArr[3]; }
0357 
0358     int& NbShells() { return myNbShapesArr[4]; }
0359 
0360     int& NbSolids() { return myNbShapesArr[5]; }
0361 
0362     int& NbCompsolids() { return myNbShapesArr[6]; }
0363 
0364     int& NbCompounds() { return myNbShapesArr[7]; }
0365 
0366   private:
0367     int myNbShapesArr[8];
0368   };
0369 
0370 protected:
0371   //! Compute number of shapes of certain type participating in operation
0372   Standard_EXPORT NbShapes getNbShapes() const;
0373 
0374   //! Filling steps for constant operations
0375   Standard_EXPORT void fillPIConstants(const double     theWhole,
0376                                        BOPAlgo_PISteps& theSteps) const override;
0377 
0378   //! Filling steps for all other operations
0379   Standard_EXPORT void fillPISteps(BOPAlgo_PISteps& theSteps) const override;
0380 
0381 protected: //! @name Methods for building the result
0382   //! Performs the building of the result.
0383   //! The method calls the PerformInternal1() method surrounded by a try-catch block.
0384   Standard_EXPORT virtual void PerformInternal(const BOPAlgo_PaveFiller&    thePF,
0385                                                const Message_ProgressRange& theRange);
0386 
0387   //! Performs the building of the result.
0388   //! To build the result of any other operation
0389   //! it will be necessary to override this method.
0390   Standard_EXPORT virtual void PerformInternal1(const BOPAlgo_PaveFiller&    thePF,
0391                                                 const Message_ProgressRange& theRange);
0392 
0393   //! Builds the result of operation.
0394   //! The method is called for each of the arguments type and
0395   //! adds into the result the splits of the arguments of that type.
0396   Standard_EXPORT virtual void BuildResult(const TopAbs_ShapeEnum theType);
0397 
0398 protected: //! @name Checking input arguments
0399   //! Checks the input data.
0400   Standard_EXPORT void CheckData() override;
0401 
0402   //! Checks if the intersection algorithm has Errors/Warnings.
0403   Standard_EXPORT void CheckFiller();
0404 
0405   //! Prepares the result shape by making it empty compound.
0406   Standard_EXPORT virtual void Prepare();
0407 
0408 protected: //! @name Fill Images of VERTICES
0409   //! Fills the images of vertices.
0410   Standard_EXPORT void FillImagesVertices(const Message_ProgressRange& theRange);
0411 
0412 protected: //! @name Fill Images of EDGES
0413   //! Fills the images of edges.
0414   Standard_EXPORT void FillImagesEdges(const Message_ProgressRange& theRange);
0415 
0416 protected: //! @name Fill Images of CONTAINERS
0417   //! Fills the images of containers (WIRES/SHELLS/COMPSOLID).
0418   Standard_EXPORT void FillImagesContainers(const TopAbs_ShapeEnum       theType,
0419                                             const Message_ProgressRange& theRange);
0420 
0421   //! Builds the image of the given container using the splits
0422   //! of its sub-shapes.
0423   Standard_EXPORT void FillImagesContainer(const TopoDS_Shape&    theS,
0424                                            const TopAbs_ShapeEnum theType);
0425 
0426 protected: //! @name Fill Images of FACES
0427   //! Fills the images of faces.
0428   //! The method consists of three steps:
0429   //! 1. Build the splits of faces;
0430   //! 2. Find SD faces;
0431   //! 3. Add internal vertices (if any) to faces.
0432   Standard_EXPORT void FillImagesFaces(const Message_ProgressRange& theRange);
0433 
0434   //! Builds the splits of faces using the information from the
0435   //! intersection stage stored in Data Structure.
0436   Standard_EXPORT virtual void BuildSplitFaces(const Message_ProgressRange& theRange);
0437 
0438   //! Looks for the same domain faces among the splits of the faces.
0439   //! Updates the map of images with SD faces.
0440   Standard_EXPORT void FillSameDomainFaces(const Message_ProgressRange& theRange);
0441 
0442   //! Classifies the alone vertices on faces relatively its splits
0443   //! and adds them as INTERNAL into the splits.
0444   Standard_EXPORT void FillInternalVertices(const Message_ProgressRange& theRange);
0445 
0446 protected: //! @name Fill Images of SOLIDS
0447   //! Fills the images of solids.
0448   //! The method consists of four steps:
0449   //! 1. Build the draft solid - just rebuild the solid using the splits of faces;
0450   //! 2. Find faces from other arguments located inside the solids;
0451   //! 3. Build splits of solid using the inside faces;
0452   //! 4. Fill internal shapes for the splits (Wires and vertices).
0453   Standard_EXPORT void FillImagesSolids(const Message_ProgressRange& theRange);
0454 
0455   //! Builds the draft solid by rebuilding the shells of the solid
0456   //! with the splits of faces.
0457   Standard_EXPORT void BuildDraftSolid(const TopoDS_Shape&             theSolid,
0458                                        TopoDS_Shape&                   theDraftSolid,
0459                                        NCollection_List<TopoDS_Shape>& theLIF);
0460 
0461   //! Finds faces located inside each solid.
0462   Standard_EXPORT virtual void FillIn3DParts(
0463     NCollection_DataMap<TopoDS_Shape, TopoDS_Shape, TopTools_ShapeMapHasher>& theDraftSolids,
0464     const Message_ProgressRange&                                              theRange);
0465 
0466   //! Builds the splits of the solids using their draft versions
0467   //! and faces located inside.
0468   Standard_EXPORT void BuildSplitSolids(
0469     NCollection_DataMap<TopoDS_Shape, TopoDS_Shape, TopTools_ShapeMapHasher>& theDraftSolids,
0470     const Message_ProgressRange&                                              theRange);
0471 
0472   //! Classifies the vertices and edges from the arguments relatively
0473   //! splits of solids and makes them INTERNAL for solids.
0474   Standard_EXPORT void FillInternalShapes(const Message_ProgressRange& theRange);
0475 
0476 protected: //! @name Fill Images of COMPOUNDS
0477   //! Fills the images of compounds.
0478   Standard_EXPORT void FillImagesCompounds(const Message_ProgressRange& theRange);
0479 
0480   //! Builds the image of the given compound.
0481   Standard_EXPORT void FillImagesCompound(
0482     const TopoDS_Shape&                                     theS,
0483     NCollection_Map<TopoDS_Shape, TopTools_ShapeMapHasher>& theMF);
0484 
0485 protected: //! @name Post treatment
0486   //! Post treatment of the result of the operation.
0487   //! The method checks validity of the sub-shapes of the result
0488   //! and updates the tolerances to make them valid.
0489   Standard_EXPORT virtual void PostTreat(const Message_ProgressRange& theRange);
0490 
0491 protected:                                    //! @name Fields
0492   NCollection_List<TopoDS_Shape> myArguments; //!< Arguments of the operation
0493   // clang-format off
0494   NCollection_Map<TopoDS_Shape, TopTools_ShapeMapHasher> myMapFence;               //!< Fence map providing the uniqueness of the shapes in the list of arguments
0495   BOPAlgo_PPaveFiller myPaveFiller;             //!< Pave Filler - algorithm for sub-shapes intersection
0496   BOPDS_PDS myDS;                               //!< Data Structure - holder of intersection information
0497   occ::handle<IntTools_Context> myContext;           //!< Context - tool for cashing heavy algorithms such as Projectors and Classifiers
0498   int myEntryPoint;                //!< EntryPoint - controls the deletion of the PaveFiller, which could live longer than the Builder
0499   NCollection_DataMap<TopoDS_Shape, NCollection_List<TopoDS_Shape>, TopTools_ShapeMapHasher> myImages;  //!< Images - map of Images of the sub-shapes of arguments
0500   NCollection_DataMap<TopoDS_Shape, TopoDS_Shape, TopTools_ShapeMapHasher> myShapesSD;      //!< ShapesSD - map of SD Shapes
0501   NCollection_DataMap<TopoDS_Shape, NCollection_List<TopoDS_Shape>, TopTools_ShapeMapHasher> myOrigins; //!< Origins - map of Origins, back map of Images
0502   NCollection_DataMap<TopoDS_Shape, NCollection_List<TopoDS_Shape>, TopTools_ShapeMapHasher> myInParts; //!< InParts - map of own and acquired IN faces of the arguments solids
0503   bool myNonDestructive;            //!< Safe processing option allows avoiding modification of the input shapes
0504   BOPAlgo_GlueEnum myGlue;                      //!< Gluing option allows speeding up the intersection of the input shapes
0505   bool myCheckInverted;             //!< Check inverted option allows disabling the check of input solids on inverted status
0506   // clang-format on
0507 };
0508 
0509 #endif // _BOPAlgo_Builder_HeaderFile