- int aLimit = GetLimit();
- int aConstructorId = getConstructorId();
- int aKeepNonlimitShapes = 0;
-
- if ( aConstructorId == 1 ) {
- aLimit = GEOM::SHAPE;
- }
- else {
- if ( GroupPoints->CheckButton1->isChecked() ) {
- aKeepNonlimitShapes = 1;
- }
- else {
- aKeepNonlimitShapes = 0;
- }
- }
-
- if ( isValid( msg ) ) {
- anObj = GEOM::GEOM_IBooleanOperations::_narrow( getOperation() )->
- MakePartition( myListShapes, myListTools,
- myListKeepInside, myListRemoveInside,
- aLimit, false, myListMaterials, aKeepNonlimitShapes );
+ int aLimit = GetLimit();
+ int aKeepNonlimitShapes = GroupPoints->CheckButton1->isChecked();
+ bool aNoSelfIntersection = GroupPoints->CheckButton2->isChecked();
+
+ GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow( getOperation() );
+
+ switch ( getConstructorId() ) {
+ case 0:
+ anObj = aNoSelfIntersection ?
+ anOper->MakePartitionNonSelfIntersectedShape( myListShapes, myListTools,
+ myListKeepInside, myListRemoveInside,
+ aLimit, false, myListMaterials, aKeepNonlimitShapes ) :
+ anOper->MakePartition( myListShapes, myListTools,
+ myListKeepInside, myListRemoveInside,
+ aLimit, false, myListMaterials, aKeepNonlimitShapes );