Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:03:04

0001 // Created by: Eugeny MALTCHIKOV
0002 // Copyright (c) 2017 OPEN CASCADE SAS
0003 //
0004 // This file is part of Open CASCADE Technology software library.
0005 //
0006 // This library is free software; you can redistribute it and/or modify it under
0007 // the terms of the GNU Lesser General Public License version 2.1 as published
0008 // by the Free Software Foundation, with special exception defined in the file
0009 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0010 // distribution for complete text of the license and disclaimer of any warranty.
0011 //
0012 // Alternatively, this file may be used under the terms of Open CASCADE
0013 // commercial license or contractual agreement. 
0014 
0015 #ifndef _BOPAlgo_Splitter_HeaderFile
0016 #define _BOPAlgo_Splitter_HeaderFile
0017 
0018 #include <Standard.hxx>
0019 #include <Standard_DefineAlloc.hxx>
0020 #include <Standard_Handle.hxx>
0021 
0022 #include <BOPAlgo_ToolsProvider.hxx>
0023 
0024 //! The **Splitter algorithm** is the algorithm for splitting a group of
0025 //! arbitrary shapes by the other group of arbitrary shapes.<br>
0026 //! The arguments of the operation are divided on two groups:<br>
0027 //! *Objects* - shapes that will be split;<br>
0028 //! *Tools*   - shapes by which the *Objects* will be split.<br>
0029 //! The result of the operation contains only the split parts
0030 //! of the shapes from the group of *Objects*.<br>
0031 //! The split parts of the shapes from the group of *Tools* are excluded
0032 //! from the result.<br>
0033 //! The shapes can be split by the other shapes from the same group
0034 //! (in case these shapes are interfering).
0035 //!
0036 //! The class is a General Fuse based algorithm. Thus, all options
0037 //! of the General Fuse algorithm such as Fuzzy mode, safe processing mode,
0038 //! parallel processing mode, gluing mode and history support are also
0039 //! available in this algorithm.<br>
0040 //! There is no requirement on the existence of the *Tools* shapes.
0041 //! And if there are no *Tools* shapes, the result of the splitting
0042 //! operation will be equivalent to the General Fuse result.
0043 //!
0044 //! The implementation of the algorithm is minimal - only the methods
0045 //! CheckData() and Perform() have been overridden.<br>
0046 //! The method BOPAlgo_Builder::BuildResult(), which adds the split parts of the arguments
0047 //! into result, does not have to be overridden, because its native implementation
0048 //! performs the necessary actions for the Splitter algorithm - it adds
0049 //! the split parts of only Objects into result, avoiding the split parts of Tools.
0050 class BOPAlgo_Splitter : public BOPAlgo_ToolsProvider
0051 {
0052 public:
0053 
0054   DEFINE_STANDARD_ALLOC
0055 
0056   //! Empty constructor
0057   Standard_EXPORT BOPAlgo_Splitter();
0058   Standard_EXPORT virtual ~BOPAlgo_Splitter();
0059 
0060   Standard_EXPORT BOPAlgo_Splitter(const Handle(NCollection_BaseAllocator)& theAllocator);
0061 
0062   //! Performs the operation
0063   Standard_EXPORT virtual void Perform(const Message_ProgressRange& theRange = Message_ProgressRange()) Standard_OVERRIDE;
0064 
0065 protected:
0066 
0067   //! Checks the input data
0068   Standard_EXPORT virtual void CheckData() Standard_OVERRIDE;
0069 
0070   //! Adds images of the argument shapes into result.
0071   //! When called the for the last time (for compound) it rebuilds the result
0072   //! shape to avoid multiple enclosure into compounds.
0073   Standard_EXPORT virtual void BuildResult(const TopAbs_ShapeEnum theType) Standard_OVERRIDE;
0074 
0075 };
0076 
0077 #endif // _BOPAlgo_Splitter_HeaderFile