mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-24 16:30:35 +05:00
0022338: implement check self-intersection option for boolean operations
This commit is contained in:
parent
5dd2cb307e
commit
265dfeb97b
@ -8,8 +8,8 @@ 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".
|
||||
|
||||
@ -17,8 +17,8 @@ The \b Result will be a \b GEOM_Object.
|
||||
|
||||
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
|
||||
<b>Arguments:</b> Name + 2 shapes.
|
||||
<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>
|
||||
|
||||
|
@ -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
|
||||
<b>Arguments:</b> Name + the object + the tool.
|
||||
<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>
|
||||
|
||||
|
@ -9,8 +9,8 @@ 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
|
||||
<b>Arguments:</b> Name + 2 shapes.
|
||||
<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>
|
||||
|
||||
|
@ -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".
|
||||
|
||||
|
@ -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
|
||||
— Common, 2 — Cut, 3 — Fuse, 4 — 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".
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -25,9 +25,10 @@
|
||||
#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:
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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();
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user