]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0022338: implement check self-intersection option for boolean operations
authorskv <skv@opencascade.com>
Wed, 16 Oct 2013 11:22:29 +0000 (11:22 +0000)
committerskv <skv@opencascade.com>
Wed, 16 Oct 2013 11:22:29 +0000 (11:22 +0000)
19 files changed:
doc/salome/gui/GEOM/input/common_operation.doc
doc/salome/gui/GEOM/input/cut_operation.doc
doc/salome/gui/GEOM/input/fuse_operation.doc
doc/salome/gui/GEOM/input/section_operation.doc
doc/salome/gui/GEOM/input/using_boolean_operations.doc
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx
src/BooleanGUI/BooleanGUI_Dialog.cxx
src/BooleanGUI/BooleanGUI_Dialog.h
src/GEOMImpl/GEOMImpl_BooleanDriver.cxx
src/GEOMImpl/GEOMImpl_IBoolean.hxx
src/GEOMImpl/GEOMImpl_IBooleanOperations.cxx
src/GEOMImpl/GEOMImpl_IBooleanOperations.hxx
src/GEOM_I/GEOM_IBooleanOperations_i.cc
src/GEOM_I/GEOM_IBooleanOperations_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh
src/GEOM_SWIG/geomBuilder.py

index e24645f31eb9280ad6149c911ff55725b30a28c4..c9bca9897311f73889b4774be39b92450a64fa05 100644 (file)
@@ -8,23 +8,23 @@ This operation cuts the common part of a list of shapes and transforms it into a
 
 The \b Result will be a \b GEOM_Object.
 
-<b>TUI Command:</b> <em>geompy.MakeCommonList(theShapesList)</em>\n
-<b>Arguments:</b> Name + a list of shapes.\n
+<b>TUI Command:</b> <em>geompy.MakeCommonList(theShapesList, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + a list of shapes + an optional flag for self-intersection check.\n
 <b>Advanced option:</b>
 \ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
 
 \image html bool2.png "Common dialog"
-\r
+
 For a particular case with two shapes for the Common operation there is the following TUI command:
 
-<b>TUI Command:</b> <em>geompy.MakeCommon(s1, s2)</em>\n\r
-<b>Arguments:</b> Name + 2 shapes.\r
+<b>TUI Command:</b> <em>geompy.MakeCommon(s1, s2, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.
 
 <b>Example:</b>
 
 \image html fusesn1.png "The initial shapes"
 
-\image html commonsn.png "The resulting object" 
+\image html commonsn.png "The resulting object"
 
 Our <b>TUI Scripts</b> provide you with useful examples of the use of
 \ref tui_common "Boolean Operations".
@@ -32,7 +32,7 @@ Our <b>TUI Scripts</b> provide you with useful examples of the use of
 <b> More details </b>
 
 For a detailed description of the Boolean operations please refer to
-<a href="SALOME_BOA_PA.pdf">this document</a>. 
+<a href="SALOME_BOA_PA.pdf">this document</a>.
 It provides a general review of the Partition and Boolean
 operations algorithms, describes the usage methodology and highlights
 major limitations of these operations.
index d00c587eb5825927ac0de953dda1543415c03eb2..745a49c091960add345f4a657ac363658dbfa930 100644 (file)
@@ -8,8 +8,8 @@ This operation cuts a shape with a list of other shapes.
 
 The \b Result will be a \b GEOM_Object.
 
-<b>TUI Command:</b> <em>geompy.MakeCutList(theMainShape, theShapesList)</em>\n
-<b>Arguments:</b> Name + a main shape + a list of other shapes.\n
+<b>TUI Command:</b> <em>geompy.MakeCutList(theMainShape, theShapesList, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + a main shape + a list of other shapes + an optional flag for self-intersection check.\n
 <b>Advanced option:</b>
 \ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
 
@@ -17,8 +17,8 @@ The \b Result will be a \b GEOM_Object.
 
 For a particular case with two shapes (object and tool) for the Cut operation there is the following TUI command:
 
-<b>TUI Command:</b> <em>geompy.MakeCut(s1, s2)</em>\n\r
-<b>Arguments:</b> Name + the object + the tool.\r
+<b>TUI Command:</b> <em>geompy.MakeCut(s1, s2, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + the object + the tool + an optional flag for self-intersection check.
 
 <b>Example:</b>
 
@@ -26,13 +26,13 @@ For a particular case with two shapes (object and tool) for the Cut operation th
 
 \image html cutsn.png "The resulting object"
 
-Our <b>TUI Scripts</b> provide you with useful examples of the use of 
+Our <b>TUI Scripts</b> provide you with useful examples of the use of
 \ref tui_cut "Boolean Operations".
 
 <b> More details </b>
 
 For a detailed description of the Boolean operations please refer to
-<a href="SALOME_BOA_PA.pdf">this document</a>. 
+<a href="SALOME_BOA_PA.pdf">this document</a>.
 It provides a general review of the Partition and Boolean
 operations algorithms, describes the usage methodology and highlights
 major limitations of these operations.
index b45e580a8238c51a2511c0d805bbeec53b58449d..a185601e9e65565f2ce2e75f205aeadaa08fa0c2 100644 (file)
@@ -3,14 +3,14 @@
 \page fuse_operation_page Fuse
 
 To produce a \b Fuse operation in the <b>Main Menu</b> select
-<b>Operations - > Boolean - > Fuse</b>. 
+<b>Operations - > Boolean - > Fuse</b>.
 
 This operation creates one shape from a list of shapes.
 
 The \b Result will be a \b GEOM_Object.
 
-<b>TUI Command:</b> <em>geompy.MakeFuseList(theShapesList)</em>\n
-<b>Arguments:</b> Name + a list of shapes.\n
+<b>TUI Command:</b> <em>geompy.MakeFuseList(theShapesList, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + a list of shapes + an optional flag for self-intersection check.\n
 <b>Advanced option:</b>
 \ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
 
@@ -18,8 +18,8 @@ The \b Result will be a \b GEOM_Object.
 
 For a particular case with two shapes to be fused there is the following TUI command:
 
-<b>TUI Command:</b> <em>geompy.MakeFuse(s1, s2)</em>\n\r
-<b>Arguments:</b> Name + 2 shapes.\r
+<b>TUI Command:</b> <em>geompy.MakeFuse(s1, s2, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.
 
 <b>Example:</b>
 
@@ -27,13 +27,13 @@ For a particular case with two shapes to be fused there is the following TUI com
 
 \image html fusesn2.png "The resulting fuse"
 
-Our <b>TUI Scripts</b> provide you with useful examples of the use of 
+Our <b>TUI Scripts</b> provide you with useful examples of the use of
 \ref tui_fuse "Boolean Operations".
 
 <b> More details </b>
 <ul>
   <li>For a detailed description of the Boolean operations please refer to
-<a href="SALOME_BOA_PA.pdf">this document</a>. 
+<a href="SALOME_BOA_PA.pdf">this document</a>.
 It provides a general review of the Partition and Boolean
 operations algorithms, describes the usage methodology and highlights
 major limitations of these operations.</li>
index 5d60cf433d0a40342e920c52883b280294fd71ab..0fd316a406fafb0b1ced2ab5cfbebd918e45d257 100644 (file)
@@ -9,8 +9,8 @@ This operation creates the section between 2 shapes.
 
 The \b Result will be any \b GEOM_Object (EDGE or WIRE).
 
-<b>TUI Command:</b> <em>geompy.MakeSection(s1, s2)</em>\n
-<b>Arguments:</b> Name + 2 shapes.\n
+<b>TUI Command:</b> <em>geompy.MakeSection(s1, s2, checkSelfInte)</em>\n
+<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.\n
 <b>Advanced option:</b>
 \ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
 
@@ -22,13 +22,13 @@ The \b Result will be any \b GEOM_Object (EDGE or WIRE).
 
 \image html sectionsn.png "The resulting object"
 
-Our <b>TUI Scripts</b> provide you with useful examples of the use of 
+Our <b>TUI Scripts</b> provide you with useful examples of the use of
 \ref tui_section "Boolean Operations".
 
 <b> More details </b>
 
 For a detailed description of the Boolean operations please refer to
-<a href="SALOME_BOA_PA.pdf">this document</a>. 
+<a href="SALOME_BOA_PA.pdf">this document</a>.
 It provides a general review of the Partition and Boolean
 operations algorithms, describes the usage methodology and highlights
 major limitations of these operations.
index 84301523e8c22a91f813a962cec133b2cd82abfe..628992bba431f3e95bf3963a53d35aa3d08e403e 100644 (file)
@@ -23,17 +23,17 @@ a list of others. </li>
 You can use advanced TUI commands performing these operations
 independently from each other:
 \par
-<em>geompy.MakeFuseList(theShapesList)</em>, where \em theShapesList is
+<em>geompy.MakeFuseList(theShapesList, checkSelfInte)</em>, where \em theShapesList is
 the list of shapes for Fuse operation; 
 \par
-<em>geompy.MakeCommonList(theShapesList)</em>, where \em theShapesList is
+<em>geompy.MakeCommonList(theShapesList, checkSelfInte)</em>, where \em theShapesList is
 the list of shapes for Common operation;
 \par
-<em>geompy.MakeCutList(theMainShape, theShapesList)</em>, where \em
+<em>geompy.MakeCutList(theMainShape, theShapesList, checkSelfInte)</em>, where \em
 theMainShape is the object of the operation and \em theShapesList is
 the list of tools for Cut operation;
 \par
-<em>geompy.MakeSection(Shape1, Shape2)</em>, where \em Shape1 is the first
+<em>geompy.MakeSection(Shape1, Shape2, checkSelfInte)</em>, where \em Shape1 is the first
 argument and \em Shape2 is the second argument of Section operation;
 
 
@@ -42,7 +42,7 @@ with only two arguments. There is a general TUI command covering these
 operations, which can be used alongside with separate commands for each
 operation.
 \par
-<em>geompy.MakeBoolean(Shape1, Shape2, Operation),</em> where \em
+<em>geompy.MakeBoolean(Shape1, Shape2, Operation, checkSelfInte),</em> where \em
 Shape1 is the first argument and \em Shape2 is the second argument of
 Boolean operation, \em Operation is a type of the Boolean operation (1
 &mdash; Common, 2 &mdash; Cut, 3 &mdash; Fuse, 4 &mdash; Section).
@@ -51,15 +51,22 @@ Boolean operation, \em Operation is a type of the Boolean operation (1
 Besides, you can use advanced TUI commands performing these operations
 independently from each other:
 \par
-<em>geompy.MakeFuse(Shape1, Shape2)</em>, where \em Shape1 is the first
+<em>geompy.MakeFuse(Shape1, Shape2, checkSelfInte)</em>, where \em Shape1 is the first
 argument and \em Shape2 is the second argument of Fuse operation; 
 \par
-<em>geompy.MakeCommon(Shape1, Shape2)</em>, where \em Shape1 is the first
+<em>geompy.MakeCommon(Shape1, Shape2, checkSelfInte)</em>, where \em Shape1 is the first
 argument and \em Shape2 is the second argument of Common operation;
 \par
-<em>geompy.MakeCut(Shape1, Shape2)</em>, where \em Shape1 is the first
+<em>geompy.MakeCut(Shape1, Shape2, checkSelfInte)</em>, where \em Shape1 is the first
 argument and \em Shape2 is the second argument of Cut operation;
 
+The flag \em checkSelfInte tells whether arguments should be checked for
+self-intersection prior to an operation. Its default value is \em False which
+means that there is no need to check it. This option is provided to ensure that
+an operation is performed on not self-intersected shapes as these shapes are
+not valid for boolean operations.
+
+
 Our <b>TUI Scripts</b> provide you with useful examples of the use of 
 \ref tui_boolean_operations_page "Boolean Operations".
 
index 8984f724d2223b8e38db9565230a363cb612c741..c364c17ca24a52739e470427e180eba9943761a9 100644 (file)
@@ -2887,34 +2887,46 @@ module GEOM
      *  \param theShape2 Second argument for boolean operation.
      *  \param theOperation Indicates the operation to be done:
      *                      1 - Common, 2 - Cut, 3 - Fuse, 4 - Section.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeBoolean (in GEOM_Object theShape1,
                              in GEOM_Object theShape2,
-                             in long theOperation);
+                             in long        theOperation,
+                             in boolean     IsCheckSelfInte);
 
     /*!
      *  \brief Perform fusion boolean operation on list of objects.
      *  \param theShapes Shapes to be fused.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
      *  \return New GEOM_Object, containing the result shape.
      */
-    GEOM_Object MakeFuseList (in ListOfGO theShapes);
+    GEOM_Object MakeFuseList (in ListOfGO theShapes,
+                              in boolean  IsCheckSelfInte);
 
     /*!
      *  \brief Perform common boolean operation on list of objects.
      *  \param theShapes Shapes for common operation.
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
      *  \return New GEOM_Object, containing the result shape.
      */
-    GEOM_Object MakeCommonList (in ListOfGO theShapes);
+    GEOM_Object MakeCommonList (in ListOfGO theShapes,
+                                in boolean  IsCheckSelfInte);
 
     /*!
      *  \brief Perform cutting of list of objects from theMainShape.
      *  \param theMainShape the object for cut operation.
      *  \param theShapes Shapes to be cut from theMainShape (tools).
+     *  \param IsCheckSelfInte If TRUE, perform check self intersection
+     *                         of arguments before an operation.
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeCutList (in GEOM_Object theMainShape,
-                             in ListOfGO theShapes);
+                             in ListOfGO theShapes,
+                             in boolean  IsCheckSelfInte);
 
     /*!
      *  \brief Perform partition operation.
index 0e7e85ca3329d3271d763f488f699491f94afe70..8970992f163192c2a8d8fa0a1e1bee8080fa8ec8 100644 (file)
@@ -238,9 +238,11 @@ module GEOM
     //-----------------------------------------------------------//
     GEOM_Object MakeBoolean (in GEOM_Object theShape1,
                              in GEOM_Object theShape2,
-                             in long        theOperation) ;
+                             in long        theOperation,
+                             in boolean     IsCheckSelfInte) ;
     GEOM_Object MakeFuse (in GEOM_Object theShape1,
-                          in GEOM_Object theShape2) ;
+                          in GEOM_Object theShape2,
+                          in boolean     IsCheckSelfInte) ;
     GEOM_Object MakePartition (in GEOM_List   theShapes,
                                in GEOM_List   theTools,
                                in GEOM_List   theKeepInside,
index 974f0e13df277a41f4110916804797be01c94f3c..36961c7e6d55b70655173257e3328030ee5c51b4 100644 (file)
@@ -322,7 +322,8 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
   aBox->GetLastFunction()->SetDescription("");
   aShell->GetLastFunction()->SetDescription("");
   // Get the common shapes between shell and shape
-  Handle(GEOM_Object) aCommonCompound = myBooleanOperations->MakeBoolean (theShape, aShell, 1); // MakeCommon
+  Handle(GEOM_Object) aCommonCompound = myBooleanOperations->MakeBoolean
+                            (theShape, aShell, 1, Standard_False); // MakeCommon
   if (aCommonCompound.IsNull()) {
     SetErrorCode(myBooleanOperations->GetErrorCode());
     return false;
index b312686e327691674dbe152077819fc308648b36..bd49c95d2c7956075a5880baec70d85ad060aeff 100644 (file)
@@ -93,7 +93,7 @@ BooleanGUI_Dialog::BooleanGUI_Dialog (const int theOperation, GeometryGUI* theGe
   mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
   mainFrame()->RadioButton3->close();
 
-  myGroup = new DlgRef_2Sel(centralWidget());
+  myGroup = new DlgRef_2Sel2Spin1Check(centralWidget());
 
   myGroup->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
   if (myOperation == BooleanGUI::CUT) {
@@ -118,6 +118,12 @@ BooleanGUI_Dialog::BooleanGUI_Dialog (const int theOperation, GeometryGUI* theGe
     myGroup->LineEdit2->setReadOnly(true);
   }
 
+  myGroup->TextLabel3->hide();
+  myGroup->TextLabel4->hide();
+  myGroup->SpinBox_DX->hide();
+  myGroup->SpinBox_DY->hide();
+  myGroup->CheckButton1->setText(tr("GEOM_CHECK_SELF_INTERSECTIONS"));
+
   QVBoxLayout* layout = new QVBoxLayout(centralWidget());
   layout->setMargin(0); layout->setSpacing(6);
   layout->addWidget(myGroup);
@@ -152,6 +158,7 @@ void BooleanGUI_Dialog::Init()
 
   myGroup->LineEdit1->setText("");
   myGroup->LineEdit2->setText("");
+  myGroup->CheckButton1->setChecked(true);
   myObject1.nullify();
   reset();
  
@@ -402,19 +409,22 @@ bool BooleanGUI_Dialog::execute (ObjectList& objects)
   GEOM::GEOM_Object_var anObj;
 
   GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow(getOperation());
+  const bool isCheckSelfInte = myGroup->CheckButton1->isChecked();
 
   switch (myOperation) {
     case BooleanGUI::FUSE:
-      anObj = anOper->MakeFuseList(myObjects);
+      anObj = anOper->MakeFuseList(myObjects, isCheckSelfInte);
     break;
     case BooleanGUI::COMMON:
-      anObj = anOper->MakeCommonList(myObjects);
+      anObj = anOper->MakeCommonList(myObjects, isCheckSelfInte);
     break;
   case BooleanGUI::CUT:
-      anObj = anOper->MakeCutList(myObject1.get(), myObjects);
+      anObj =
+        anOper->MakeCutList(myObject1.get(), myObjects, isCheckSelfInte);
     break;
   case BooleanGUI::SECTION:
-      anObj = anOper->MakeBoolean(myObject1.get(), myObjects[0], myOperation);
+      anObj = anOper->MakeBoolean
+        (myObject1.get(), myObjects[0], myOperation, isCheckSelfInte);
     break;
   default:
     break;
index 14d84ffd9adf0ddd1a8b91e570285142792c9532..911e271d7d94f52d1ffe7f3924afe4b69c7b9390 100644 (file)
@@ -30,7 +30,7 @@
 #include "GEOMBase_Skeleton.h"
 #include "GEOM_GenericObjPtr.h"
 
-class DlgRef_2Sel;
+class DlgRef_2Sel2Spin1Check;
 
 //=================================================================================
 // class    : BooleanGUI_Dialog
@@ -65,7 +65,7 @@ private:
   GEOM::GeomObjPtr                   myObject1;
   GEOM::ListOfGO_var                 myObjects;
   
-  DlgRef_2Sel*                       myGroup;
+  DlgRef_2Sel2Spin1Check*            myGroup;
 
 private slots:
   void                               ClickOnOk();
index af5a144dd421004048be65c6ccbd1b7956e0188b..250218208657f244760a1ae15acac7e3aef11c11 100644 (file)
@@ -56,8 +56,6 @@
 #include <Standard_ConstructionError.hxx>
 #include <StdFail_NotDone.hxx>
 
-// Comment next macro in order to avoid check of boolean operations arguments for self-intersections
-#define BOP_CHECK_SELF_INTERSECTIONS
 // Depth of self-intersection check (see BOPAlgo_CheckerSI::SetLevelOfCheck() for more details)
 // Default value for BOPAlgo_CheckerSI gives very long computation when checking face-to-face intersections;
 // here check level is decreased to more appropriate value to avoid problems with performance).
@@ -92,6 +90,7 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute (TFunction_Logbook& log) const
 
   GEOMImpl_IBoolean aCI (aFunction);
   Standard_Integer aType = aFunction->GetType();
+  const Standard_Boolean isCheckSelfInte = aCI.GetCheckSelfIntersection();
 
   TopoDS_Shape aShape;
 
@@ -115,21 +114,21 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute (TFunction_Logbook& log) const
         if (!ana.IsValid())
           StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is not valid");
 
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-       BOPAlgo_CheckerSI aCSI;  // checker of self-interferences
-       aCSI.SetLevelOfCheck(BOP_SELF_INTERSECTIONS_LEVEL);
-       BOPCol_ListOfShape aList1, aList2;
-       aList1.Append(aShape1);
-       aList2.Append(aShape2);
-       aCSI.SetArguments(aList1);
-       aCSI.Perform();
-       if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0)
-          StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
-       aCSI.SetArguments(aList2);
-       aCSI.Perform();
-       if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0)
-          StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
-#endif
+        if (isCheckSelfInte) {
+          BOPAlgo_CheckerSI aCSI;  // checker of self-interferences
+          aCSI.SetLevelOfCheck(BOP_SELF_INTERSECTIONS_LEVEL);
+          BOPCol_ListOfShape aList1, aList2;
+          aList1.Append(aShape1);
+          aList2.Append(aShape2);
+          aCSI.SetArguments(aList1);
+          aCSI.Perform();
+          if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0)
+            StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
+          aCSI.SetArguments(aList2);
+          aCSI.Perform();
+          if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0)
+            StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
+        }
 
         // Make a copy to prevent the original shape changes.
         TopoDS_Shape aShapeCopy1;
@@ -162,23 +161,22 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute (TFunction_Logbook& log) const
        
         if (!aShape.IsNull()) {
           BRepCheck_Analyzer anAna (aShape, Standard_True);
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-         BOPAlgo_CheckerSI aCSI;  // checker of self-interferences
-         aCSI.SetLevelOfCheck(BOP_SELF_INTERSECTIONS_LEVEL);
-#endif   
           if (!anAna.IsValid()) {
             StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is not valid");
           }
 
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-         BOPCol_ListOfShape aList1;
-         aList1.Append(aShape);
-         aCSI.SetArguments(aList1);
-         aCSI.Perform();
-         if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
-           StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
-         }
-#endif   
+          BOPAlgo_CheckerSI aCSI;  // checker of self-interferences
+
+          if (isCheckSelfInte) {
+            aCSI.SetLevelOfCheck(BOP_SELF_INTERSECTIONS_LEVEL);
+            BOPCol_ListOfShape aList1;
+            aList1.Append(aShape);
+            aCSI.SetArguments(aList1);
+            aCSI.Perform();
+            if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
+              StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
+            }
+          }
 
           // Copy shape
           TopoDS_Shape aShapeCopy;
@@ -196,15 +194,16 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute (TFunction_Logbook& log) const
              StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is not valid");
            }
            
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-           BOPCol_ListOfShape aList2;
-           aList2.Append(aShape2);
-           aCSI.SetArguments(aList2);
-           aCSI.Perform();
-           if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
-             StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
-           }
-#endif     
+            if (isCheckSelfInte) {
+              BOPCol_ListOfShape aList2;
+              aList2.Append(aShape2);
+              aCSI.SetArguments(aList2);
+              aCSI.Perform();
+              if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
+                StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
+              }
+            }
+
             // Copy shape
             TNaming_CopyShape::CopyTool(aShape2, aMapTShapes, aShapeCopy);
            aShape = performOperation (aShape, aShapeCopy, aSimpleType);
@@ -226,23 +225,24 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute (TFunction_Logbook& log) const
       if (!aShape.IsNull()) {
         // check arguments for Mantis issue 0021019
         BRepCheck_Analyzer anAna (aShape, Standard_True);
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-       BOPAlgo_CheckerSI aCSI;  // checker of self-interferences
-       aCSI.SetLevelOfCheck(BOP_SELF_INTERSECTIONS_LEVEL);
-#endif
+
         if (!anAna.IsValid()) {
           StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is not valid");
         }
 
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-       BOPCol_ListOfShape aList1;
-       aList1.Append(aShape);
-       aCSI.SetArguments(aList1);
-       aCSI.Perform();
-       if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
-         StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
-       }
-#endif
+       BOPAlgo_CheckerSI aCSI;  // checker of self-interferences
+
+        if (isCheckSelfInte) {
+          aCSI.SetLevelOfCheck(BOP_SELF_INTERSECTIONS_LEVEL);
+          BOPCol_ListOfShape aList1;
+          aList1.Append(aShape);
+          aCSI.SetArguments(aList1);
+          aCSI.Perform();
+          if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
+            StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
+          }
+        }
+
         // Copy shape
         TopoDS_Shape aShapeCopy;
         TColStd_IndexedDataMapOfTransientTransient aMapTShapes;
@@ -265,15 +265,15 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute (TFunction_Logbook& log) const
             StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is not valid");
           }
 
-#ifdef BOP_CHECK_SELF_INTERSECTIONS
-         BOPCol_ListOfShape aList2;
-         aList2.Append(aTool);
-         aCSI.SetArguments(aList2);
-         aCSI.Perform();
-         if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
-           StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
-         }
-#endif
+          if (isCheckSelfInte) {
+            BOPCol_ListOfShape aList2;
+            aList2.Append(aTool);
+            aCSI.SetArguments(aList2);
+            aCSI.Perform();
+            if (aCSI.ErrorStatus() || aCSI.DS().Interferences().Extent() > 0) {
+              StdFail_NotDone::Raise("Boolean operation will not be performed, because argument shape is self-intersected");
+            }
+          }
 
           // Copy shape
           TNaming_CopyShape::CopyTool(aTool, aMapTShapes, aShapeCopy);
index 46d5c8e482e02934abba0328d636d360243327c7..3b6707cbc2fc4783bc1f5e6134ae078244528a33 100644 (file)
 #include "GEOM_Function.hxx"
 #include "TColStd_HSequenceOfTransient.hxx"
 
-#define BOOL_ARG_SHAPE1  1
-#define BOOL_ARG_SHAPE2  2
-#define BOOL_ARG_SHAPES  3
+#define BOOL_ARG_SHAPE1                   1
+#define BOOL_ARG_SHAPE2                   2
+#define BOOL_ARG_SHAPES                   3
+#define BOOL_ARG_CHECK_SELF_INTERSECTION  4
 
 class GEOMImpl_IBoolean
 {
@@ -39,11 +40,15 @@ class GEOMImpl_IBoolean
   void SetShape2(Handle(GEOM_Function) theRef) { _func->SetReference(BOOL_ARG_SHAPE2, theRef); }
   void SetShapes(const Handle(TColStd_HSequenceOfTransient)& theShapes)
   { _func->SetReferenceList(BOOL_ARG_SHAPES, theShapes); }
+  void SetCheckSelfIntersection (Standard_Boolean theFlag)
+  { _func->SetInteger(BOOL_ARG_CHECK_SELF_INTERSECTION, theFlag ? 1 : 0); }
 
   Handle(GEOM_Function) GetShape1() { return _func->GetReference(BOOL_ARG_SHAPE1); }
   Handle(GEOM_Function) GetShape2() { return _func->GetReference(BOOL_ARG_SHAPE2); }
   Handle(TColStd_HSequenceOfTransient) GetShapes()
   { return _func->GetReferenceList(BOOL_ARG_SHAPES); }
+  Standard_Boolean GetCheckSelfIntersection()
+  { return (_func->GetInteger(BOOL_ARG_CHECK_SELF_INTERSECTION) != 0); }
 
  private:
 
index a96b1810bf54d3cd0680e0ca0a9a851d3baf3508..be4bfb3d3757ff306d8725eb3181a79e247c8753 100644 (file)
@@ -71,9 +71,11 @@ GEOMImpl_IBooleanOperations::~GEOMImpl_IBooleanOperations()
  *  MakeBoolean
  */
 //=============================================================================
-Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeBoolean (Handle(GEOM_Object) theShape1,
-                                                              Handle(GEOM_Object) theShape2,
-                                                              Standard_Integer    theOp)
+Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeBoolean
+                                  (Handle(GEOM_Object)    theShape1,
+                                   Handle(GEOM_Object)    theShape2,
+                                   const Standard_Integer theOp,
+                                   const Standard_Boolean IsCheckSelfInte)
 {
   SetErrorCode(KO);
 
@@ -108,6 +110,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeBoolean (Handle(GEOM_Object
 
   aCI.SetShape1(aRef1);
   aCI.SetShape2(aRef2);
+  aCI.SetCheckSelfIntersection(IsCheckSelfInte);
 
   //Compute the Boolean value
   try {
@@ -133,7 +136,13 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeBoolean (Handle(GEOM_Object
   else if (theOp == 3) pd << " = geompy.MakeFuse(";
   else if (theOp == 4) pd << " = geompy.MakeSection(";
   else {}
-  pd << theShape1 << ", " << theShape2 << ")";
+  pd << theShape1 << ", " << theShape2;
+
+  if (IsCheckSelfInte) {
+    pd << ", True";
+  }
+
+  pd << ")";
 
   SetErrorCode(OK);
   return aBool;
@@ -145,7 +154,8 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeBoolean (Handle(GEOM_Object
  */
 //=============================================================================
 Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeFuseList
-                  (const Handle(TColStd_HSequenceOfTransient)& theShapes)
+                  (const Handle(TColStd_HSequenceOfTransient)& theShapes,
+                   const Standard_Boolean IsCheckSelfInte)
 {
   SetErrorCode(KO);
 
@@ -172,6 +182,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeFuseList
   if (aShapesSeq.IsNull()) return NULL;
 
   aCI.SetShapes(aShapesSeq);
+  aCI.SetCheckSelfIntersection(IsCheckSelfInte);
 
   //Compute the Boolean value
   try {
@@ -190,8 +201,16 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeFuseList
   }
 
   //Make a Python command
-  GEOM::TPythonDump(aFunction) << aBool <<
-    " = geompy.MakeFuseList([" << aDescription.ToCString() << "])";
+  GEOM::TPythonDump pd (aFunction);
+
+  pd << aBool <<
+    " = geompy.MakeFuseList([" << aDescription.ToCString() << "]";
+
+  if (IsCheckSelfInte) {
+    pd << ", True";
+  }
+
+  pd << ")";
 
   SetErrorCode(OK);
   return aBool;
@@ -203,7 +222,8 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeFuseList
  */
 //=============================================================================
 Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCommonList
-                  (const Handle(TColStd_HSequenceOfTransient)& theShapes)
+                  (const Handle(TColStd_HSequenceOfTransient)& theShapes,
+                   const Standard_Boolean IsCheckSelfInte)
 {
   SetErrorCode(KO);
 
@@ -230,6 +250,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCommonList
   if (aShapesSeq.IsNull()) return NULL;
 
   aCI.SetShapes(aShapesSeq);
+  aCI.SetCheckSelfIntersection(IsCheckSelfInte);
 
   //Compute the Boolean value
   try {
@@ -248,8 +269,16 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCommonList
   }
 
   //Make a Python command
-  GEOM::TPythonDump(aFunction) << aBool <<
-    " = geompy.MakeCommonList([" << aDescription.ToCString() << "])";
+  GEOM::TPythonDump pd (aFunction);
+
+  pd << aBool <<
+    " = geompy.MakeCommonList([" << aDescription.ToCString() << "]";
+
+  if (IsCheckSelfInte) {
+    pd << ", True";
+  }
+
+  pd << ")";
 
   SetErrorCode(OK);
   return aBool;
@@ -262,7 +291,8 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCommonList
 //=============================================================================
 Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCutList
                   (Handle(GEOM_Object) theMainShape,
-                   const Handle(TColStd_HSequenceOfTransient)& theShapes)
+                   const Handle(TColStd_HSequenceOfTransient)& theShapes,
+                   const Standard_Boolean IsCheckSelfInte)
 {
   SetErrorCode(KO);
 
@@ -293,6 +323,7 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCutList
 
   aCI.SetShape1(aMainRef);
   aCI.SetShapes(aShapesSeq);
+  aCI.SetCheckSelfIntersection(IsCheckSelfInte);
 
   //Compute the Boolean value
   try {
@@ -311,8 +342,16 @@ Handle(GEOM_Object) GEOMImpl_IBooleanOperations::MakeCutList
   }
 
   //Make a Python command
-  GEOM::TPythonDump(aFunction) << aBool << " = geompy.MakeCutList("
-    << theMainShape << ", [" << aDescription.ToCString() << "])";
+  GEOM::TPythonDump pd (aFunction);
+
+  pd << aBool << " = geompy.MakeCutList("
+    << theMainShape << ", [" << aDescription.ToCString() << "]";
+
+  if (IsCheckSelfInte) {
+    pd << ", True";
+  }
+
+  pd << ")";
 
   SetErrorCode(OK);
   return aBool;
index c1c492c478a68c2b77ab74b444272555391ca053..ad3f9e5b870d9311cac5f48a98877b871679130b 100644 (file)
@@ -36,19 +36,24 @@ class GEOMImpl_IBooleanOperations : public GEOM_IOperations {
   Standard_EXPORT GEOMImpl_IBooleanOperations(GEOM_Engine* theEngine, int theDocID);
   Standard_EXPORT ~GEOMImpl_IBooleanOperations();
 
-  Standard_EXPORT Handle(GEOM_Object) MakeBoolean (Handle(GEOM_Object) theShape1,
-                                                   Handle(GEOM_Object) theShape2,
-                                                   Standard_Integer    theOp);
+  Standard_EXPORT Handle(GEOM_Object) MakeBoolean
+                                (Handle(GEOM_Object)    theShape1,
+                                 Handle(GEOM_Object)    theShape2,
+                                 const Standard_Integer theOp,
+                                 const Standard_Boolean IsCheckSelfInte);
 
   Standard_EXPORT Handle(GEOM_Object) MakeFuseList
-                  (const Handle(TColStd_HSequenceOfTransient)& theShapes);
+                  (const Handle(TColStd_HSequenceOfTransient)& theShapes,
+                   const Standard_Boolean IsCheckSelfInte);
 
   Standard_EXPORT Handle(GEOM_Object) MakeCommonList
-                  (const Handle(TColStd_HSequenceOfTransient)& theShapes);
+                  (const Handle(TColStd_HSequenceOfTransient)& theShapes,
+                   const Standard_Boolean IsCheckSelfInte);
 
   Standard_EXPORT Handle(GEOM_Object) MakeCutList
                   (Handle(GEOM_Object) theMainShape,
-                   const Handle(TColStd_HSequenceOfTransient)& theShapes);
+                   const Handle(TColStd_HSequenceOfTransient)& theShapes,
+                   const Standard_Boolean IsCheckSelfInte);
 
   Standard_EXPORT Handle(GEOM_Object) MakePartition
                   (const Handle(TColStd_HSequenceOfTransient)& theShapes,
index 2cad84b5dbafc9eb51e5c4fe4f1aa46e5d0e7cac..84c513815f12b87aabd95d15a9b25d4c0d6321b5 100644 (file)
@@ -62,9 +62,10 @@ GEOM_IBooleanOperations_i::~GEOM_IBooleanOperations_i()
  */
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeBoolean
-                                                 (GEOM::GEOM_Object_ptr theShape1,
-                                                  GEOM::GEOM_Object_ptr theShape2,
-                                                  CORBA::Long           theOp)
+                                    (GEOM::GEOM_Object_ptr theShape1,
+                                     GEOM::GEOM_Object_ptr theShape2,
+                                     CORBA::Long           theOp,
+                                     CORBA::Boolean        IsCheckSelfInte)
 {
   GEOM::GEOM_Object_var aGEOMObject;
 
@@ -78,7 +79,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeBoolean
   if (aSh1.IsNull() || aSh2.IsNull()) return aGEOMObject._retn();
 
   // Make Boolean
-  Handle(GEOM_Object) anObject = GetOperations()->MakeBoolean(aSh1, aSh2, theOp);
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeBoolean(aSh1, aSh2, theOp, IsCheckSelfInte);
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
@@ -91,7 +93,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeBoolean
  */
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeFuseList
-                                    (const GEOM::ListOfGO& theShapes)
+                                    (const GEOM::ListOfGO& theShapes,
+                                     CORBA::Boolean        IsCheckSelfInte)
 {
   GEOM::GEOM_Object_var aGEOMObject;
 
@@ -106,7 +109,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeFuseList
   }
 
   // Make fusion
-  Handle(GEOM_Object) anObject = GetOperations()->MakeFuseList(aShapes);
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeFuseList(aShapes, IsCheckSelfInte);
 
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
@@ -120,7 +124,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeFuseList
  */
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeCommonList
-                                    (const GEOM::ListOfGO& theShapes)
+                                    (const GEOM::ListOfGO& theShapes,
+                                     CORBA::Boolean        IsCheckSelfInte)
 {
   GEOM::GEOM_Object_var aGEOMObject;
 
@@ -135,7 +140,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeCommonList
   }
 
   // Make fusion
-  Handle(GEOM_Object) anObject = GetOperations()->MakeCommonList(aShapes);
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeCommonList(aShapes, IsCheckSelfInte);
 
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
@@ -150,7 +156,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeCommonList
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeCutList
                                     (GEOM::GEOM_Object_ptr theMainShape,
-                                     const GEOM::ListOfGO& theShapes)
+                                     const GEOM::ListOfGO& theShapes,
+                                     CORBA::Boolean        IsCheckSelfInte)
 {
   GEOM::GEOM_Object_var aGEOMObject;
 
@@ -171,7 +178,8 @@ GEOM::GEOM_Object_ptr GEOM_IBooleanOperations_i::MakeCutList
   }
 
   // Make fusion
-  Handle(GEOM_Object) anObject = GetOperations()->MakeCutList(aMainShape, aShapes);
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeCutList(aMainShape, aShapes, IsCheckSelfInte);
 
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
index 3150fcd56ac3fadb97087784d2d0b238d572fd2b..e8381d0853b04ea2bea177a2d4f04d7df838e27f 100644 (file)
@@ -44,14 +44,18 @@ class GEOM_I_EXPORT GEOM_IBooleanOperations_i :
 
   GEOM::GEOM_Object_ptr MakeBoolean (GEOM::GEOM_Object_ptr theShape1,
                                     GEOM::GEOM_Object_ptr theShape2,
-                                    CORBA::Long           theOp);
+                                    CORBA::Long           theOp,
+                                     CORBA::Boolean        IsCheckSelfInte);
 
-  GEOM::GEOM_Object_ptr MakeFuseList (const GEOM::ListOfGO& theShapes);
+  GEOM::GEOM_Object_ptr MakeFuseList (const GEOM::ListOfGO& theShapes,
+                                      CORBA::Boolean        IsCheckSelfInte);
 
-  GEOM::GEOM_Object_ptr MakeCommonList (const GEOM::ListOfGO& theShapes);
+  GEOM::GEOM_Object_ptr MakeCommonList (const GEOM::ListOfGO& theShapes,
+                                        CORBA::Boolean        IsCheckSelfInte);
 
   GEOM::GEOM_Object_ptr MakeCutList (GEOM::GEOM_Object_ptr theMainShape,
-                                     const GEOM::ListOfGO& theShapes);
+                                     const GEOM::ListOfGO& theShapes,
+                                     CORBA::Boolean        IsCheckSelfInte);
 
   GEOM::GEOM_Object_ptr MakePartition (const GEOM::ListOfGO&   theShapes,
                                       const GEOM::ListOfGO&   theTools,
index 33b95bef2be31b1497bcc0b96127e9e3e723e3e6..17c58cf1dd4e049e62e46c49e44523d039be9e09 100644 (file)
@@ -1337,16 +1337,19 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilling (GEOM::GEOM_Object_ptr theShape
 //=============================================================================
 //  MakeBoolean:
 //=============================================================================
-GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoolean (GEOM::GEOM_Object_ptr theShape1,
-                                                  GEOM::GEOM_Object_ptr theShape2,
-                                                  CORBA::Long theOperation)
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeBoolean
+                                        (GEOM::GEOM_Object_ptr theShape1,
+                                         GEOM::GEOM_Object_ptr theShape2,
+                                         CORBA::Long           theOperation,
+                                         CORBA::Boolean        IsCheckSelfInte)
 {
   beginService( " GEOM_Superv_i::MakeBoolean" );
   // theOperation indicates the operation to be done:
   // 1 - Common, 2 - Cut, 3 - Fuse, 4 - Section
   MESSAGE("GEOM_Superv_i::MakeBoolean");
   getBoolOp();
-  GEOM::GEOM_Object_ptr anObj = myBoolOp->MakeBoolean(theShape1, theShape2, theOperation);
+  GEOM::GEOM_Object_ptr anObj =
+    myBoolOp->MakeBoolean(theShape1, theShape2, theOperation, IsCheckSelfInte);
   endService( " GEOM_Superv_i::MakeBoolean" );
   return anObj;
 }
@@ -1447,13 +1450,16 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeBiNormalAlongVector
 //=============================================================================
 //  MakeFuse:
 //=============================================================================
-GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFuse (GEOM::GEOM_Object_ptr theShape1,
-                                               GEOM::GEOM_Object_ptr theShape2)
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFuse
+                                        (GEOM::GEOM_Object_ptr theShape1,
+                                         GEOM::GEOM_Object_ptr theShape2,
+                                         CORBA::Boolean        IsCheckSelfInte)
 {
   beginService( " GEOM_Superv_i::MakeFuse" );
   MESSAGE("GEOM_Superv_i::MakeFuse");
   getBoolOp();
-  GEOM::GEOM_Object_ptr anObj = myBoolOp->MakeBoolean(theShape1, theShape2, 3);
+  GEOM::GEOM_Object_ptr anObj =
+    myBoolOp->MakeBoolean(theShape1, theShape2, 3, IsCheckSelfInte);
   endService( " GEOM_Superv_i::MakeFuse" );
   return anObj;
 }
index ee8657090048ca90e90bc43a3ec89b9d5802cdef..524d164d3a409ad83c18df7168aa3c03c38b2011 100644 (file)
@@ -332,9 +332,11 @@ public:
   //-----------------------------------------------------------//
   GEOM::GEOM_Object_ptr MakeBoolean (GEOM::GEOM_Object_ptr theShape1,
                                      GEOM::GEOM_Object_ptr theShape2,
-                                     CORBA::Long theOperation);
+                                     CORBA::Long           theOperation,
+                                     CORBA::Boolean        IsCheckSelfInte);
   GEOM::GEOM_Object_ptr MakeFuse (GEOM::GEOM_Object_ptr theShape1,
-                                  GEOM::GEOM_Object_ptr theShape2);
+                                  GEOM::GEOM_Object_ptr theShape2,
+                                  CORBA::Boolean        IsCheckSelfInte);
   GEOM::GEOM_Object_ptr MakePartition (GEOM::GEOM_List_ptr   theShapes,
                                        GEOM::GEOM_List_ptr   theTools,
                                        GEOM::GEOM_List_ptr   theKeepInside,
index 7d9ffde95cb2c073a9de8e0cc528354d9c61b200..669d61de76e4d78e593cab6a34b002809a3042da 100644 (file)
@@ -6601,6 +6601,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #  @param theShape2 Second argument for boolean operation.
         #  @param theOperation Indicates the operation to be done:\n
         #                      1 - Common, 2 - Cut, 3 - Fuse, 4 - Section.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6608,7 +6610,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #  @return New GEOM.GEOM_Object, containing the result shape.
         #
         #  @ref tui_fuse "Example"
-        def MakeBoolean(self, theShape1, theShape2, theOperation, theName=None):
+        def MakeBoolean(self, theShape1, theShape2, theOperation, checkSelfInte=False, theName=None):
             """
             Perform one of boolean operations on two given shapes.
 
@@ -6617,6 +6619,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
                 theShape2 Second argument for boolean operation.
                 theOperation Indicates the operation to be done:
                              1 - Common, 2 - Cut, 3 - Fuse, 4 - Section.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6625,7 +6630,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
                 New GEOM.GEOM_Object, containing the result shape.
             """
             # Example: see GEOM_TestAll.py
-            anObj = self.BoolOp.MakeBoolean(theShape1, theShape2, theOperation)
+            anObj = self.BoolOp.MakeBoolean(theShape1, theShape2, theOperation, checkSelfInte)
             RaiseIfFailed("MakeBoolean", self.BoolOp)
             def_names = { 1: "common", 2: "cut", 3: "fuse", 4: "section" }
             self._autoPublish(anObj, theName, def_names[theOperation])
@@ -6634,6 +6639,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         ## Perform Common boolean operation on two given shapes.
         #  @param theShape1 First argument for boolean operation.
         #  @param theShape2 Second argument for boolean operation.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6642,13 +6649,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_common "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeCommon(self, theShape1, theShape2, theName=None):
+        def MakeCommon(self, theShape1, theShape2, checkSelfInte=False, theName=None):
             """
             Perform Common boolean operation on two given shapes.
 
             Parameters: 
                 theShape1 First argument for boolean operation.
                 theShape2 Second argument for boolean operation.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6658,11 +6668,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             """
             # Example: see GEOM_TestOthers.py
             # note: auto-publishing is done in self.MakeBoolean()
-            return self.MakeBoolean(theShape1, theShape2, 1, theName)
+            return self.MakeBoolean(theShape1, theShape2, 1, checkSelfInte, theName)
 
         ## Perform Cut boolean operation on two given shapes.
         #  @param theShape1 First argument for boolean operation.
         #  @param theShape2 Second argument for boolean operation.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6671,13 +6683,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_cut "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeCut(self, theShape1, theShape2, theName=None):
+        def MakeCut(self, theShape1, theShape2, checkSelfInte=False, theName=None):
             """
             Perform Cut boolean operation on two given shapes.
 
             Parameters: 
                 theShape1 First argument for boolean operation.
                 theShape2 Second argument for boolean operation.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6688,11 +6703,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             """
             # Example: see GEOM_TestOthers.py
             # note: auto-publishing is done in self.MakeBoolean()
-            return self.MakeBoolean(theShape1, theShape2, 2, theName)
+            return self.MakeBoolean(theShape1, theShape2, 2, checkSelfInte, theName)
 
         ## Perform Fuse boolean operation on two given shapes.
         #  @param theShape1 First argument for boolean operation.
         #  @param theShape2 Second argument for boolean operation.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6701,13 +6718,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_fuse "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeFuse(self, theShape1, theShape2, theName=None):
+        def MakeFuse(self, theShape1, theShape2, checkSelfInte=False, theName=None):
             """
             Perform Fuse boolean operation on two given shapes.
 
             Parameters: 
                 theShape1 First argument for boolean operation.
                 theShape2 Second argument for boolean operation.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6718,11 +6738,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             """
             # Example: see GEOM_TestOthers.py
             # note: auto-publishing is done in self.MakeBoolean()
-            return self.MakeBoolean(theShape1, theShape2, 3, theName)
+            return self.MakeBoolean(theShape1, theShape2, 3, checkSelfInte, theName)
 
         ## Perform Section boolean operation on two given shapes.
         #  @param theShape1 First argument for boolean operation.
         #  @param theShape2 Second argument for boolean operation.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6731,13 +6753,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_section "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeSection(self, theShape1, theShape2, theName=None):
+        def MakeSection(self, theShape1, theShape2, checkSelfInte=False, theName=None):
             """
             Perform Section boolean operation on two given shapes.
 
             Parameters: 
                 theShape1 First argument for boolean operation.
                 theShape2 Second argument for boolean operation.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6748,10 +6773,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             """
             # Example: see GEOM_TestOthers.py
             # note: auto-publishing is done in self.MakeBoolean()
-            return self.MakeBoolean(theShape1, theShape2, 4, theName)
+            return self.MakeBoolean(theShape1, theShape2, 4, checkSelfInte, theName)
 
         ## Perform Fuse boolean operation on the list of shapes.
         #  @param theShapesList Shapes to be fused.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6760,12 +6787,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_fuse "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeFuseList(self, theShapesList, theName=None):
+        def MakeFuseList(self, theShapesList, checkSelfInte=False, theName=None):
             """
             Perform Fuse boolean operation on the list of shapes.
 
             Parameters: 
                 theShapesList Shapes to be fused.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6775,13 +6805,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             
             """
             # Example: see GEOM_TestOthers.py
-            anObj = self.BoolOp.MakeFuseList(theShapesList)
+            anObj = self.BoolOp.MakeFuseList(theShapesList, checkSelfInte)
             RaiseIfFailed("MakeFuseList", self.BoolOp)
             self._autoPublish(anObj, theName, "fuse")
             return anObj
 
         ## Perform Common boolean operation on the list of shapes.
         #  @param theShapesList Shapes for Common operation.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6790,12 +6822,15 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_common "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeCommonList(self, theShapesList, theName=None):
+        def MakeCommonList(self, theShapesList, checkSelfInte=False, theName=None):
             """
             Perform Common boolean operation on the list of shapes.
 
             Parameters: 
                 theShapesList Shapes for Common operation.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6805,7 +6840,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             
             """
             # Example: see GEOM_TestOthers.py
-            anObj = self.BoolOp.MakeCommonList(theShapesList)
+            anObj = self.BoolOp.MakeCommonList(theShapesList, checkSelfInte)
             RaiseIfFailed("MakeCommonList", self.BoolOp)
             self._autoPublish(anObj, theName, "common")
             return anObj
@@ -6813,6 +6848,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         ## Perform Cut boolean operation on one object and the list of tools.
         #  @param theMainShape The object of the operation.
         #  @param theShapesList The list of tools of the operation.
+        #  @param checkSelfInte The flag that tells if the arguments should
+        #         be checked for self-intersection prior to the operation.
         #  @param theName Object name; when specified, this parameter is used
         #         for result publication in the study. Otherwise, if automatic
         #         publication is switched on, default value is used for result name.
@@ -6821,13 +6858,16 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_cut "Example 1"
         #  \n @ref swig_MakeCommon "Example 2"
-        def MakeCutList(self, theMainShape, theShapesList, theName=None):
+        def MakeCutList(self, theMainShape, theShapesList, checkSelfInte=False, theName=None):
             """
             Perform Cut boolean operation on one object and the list of tools.
 
             Parameters: 
                 theMainShape The object of the operation.
                 theShapesList The list of tools of the operation.
+                checkSelfInte The flag that tells if the arguments should
+                              be checked for self-intersection prior to
+                              the operation.
                 theName Object name; when specified, this parameter is used
                         for result publication in the study. Otherwise, if automatic
                         publication is switched on, default value is used for result name.
@@ -6837,7 +6877,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
             
             """
             # Example: see GEOM_TestOthers.py
-            anObj = self.BoolOp.MakeCutList(theMainShape, theShapesList)
+            anObj = self.BoolOp.MakeCutList(theMainShape, theShapesList, checkSelfInte)
             RaiseIfFailed("MakeCutList", self.BoolOp)
             self._autoPublish(anObj, theName, "cut")
             return anObj