Archived issue #0027049
Make non-destructive mode be defined by default in Boolean operations
Description
Recently Boolean operation has got the option of non-destructive mode of work. In this mode the algorithm does not change input shapes (in particular tolerances of vertices). The aim of this improvement is to make this mode of work the default one.
This is to be done both in algorithms (BOPAlgo, BRepAlgoAPI) and in Draw framework (BOPTest).
This is to be done both in algorithms (BOPAlgo, BRepAlgoAPI) and in Draw framework (BOPTest).
Steps to reproduce
1) Change the test case tests\bugs\modalg_6\bug26619 so that to remove the line:
bnondestructive 1
2) Run the test bugs modalg_6 bug26619
The result must remain OK.
bnondestructive 1
2) Run the test bugs modalg_6 bug26619
The result must remain OK.
Public activity
8 archived notes
Participants are labeled by their role within this record.
Problem described in issue is reproduced on current state of OCCT.
The test case bugs modalg_7 bug27049 is going to be fixed by the fix for the issue #29711, so the boolean operation in test case bugs modalg_6 bug26619 is going to be working the same in both not-safe and safe modes.
The issue is still should not be closed even after integration of the fix for #29711, as it does not set the non-destructive mode as default in Boolean operations.
The issue is still should not be closed even after integration of the fix for #29711, as it does not set the non-destructive mode as default in Boolean operations.
Branch [archived branch] has been created by Participant.
[revision removed]
Detailed log of new commits:
Author: emv
Date: Thu Apr 15 16:30:03 2021 +0300
0027049: Make non-destructive mode be defined by default in Boolean operations
Set non-destructive mode enabled by default in Boolean operation algorithms. It means that shapes will not be modified during any Boolean, Split, GeneralFuse, MakerVolume, CellsBuilder operations.
Since now, in this default mode, the user should not expect any shape from the input arguments being present in the result shape of the operations mentioned above. Some of the input shapes may be passed to the result, in case they are not affected by the operation, but in general, it is better to work through the History mechanism. The shapes replaced by the copies should be obtained through Modified method.
Incomplete: documentation of the algorithms has to be updated accordingly.
[revision removed]
Detailed log of new commits:
Author: emv
Date: Thu Apr 15 16:30:03 2021 +0300
0027049: Make non-destructive mode be defined by default in Boolean operations
Set non-destructive mode enabled by default in Boolean operation algorithms. It means that shapes will not be modified during any Boolean, Split, GeneralFuse, MakerVolume, CellsBuilder operations.
Since now, in this default mode, the user should not expect any shape from the input arguments being present in the result shape of the operations mentioned above. Some of the input shapes may be passed to the result, in case they are not affected by the operation, but in general, it is better to work through the History mechanism. The shapes replaced by the copies should be obtained through Modified method.
Incomplete: documentation of the algorithms has to be updated accordingly.
Working on the issue I was thinking if we should really enable the non-destructive mode in Booleans by default. I am currently against it for several reasons:
1. Not all users may really need it (and those who do need it can switch it on using the corresponding setter);
2. Enabling it by default we will stop testing the destructive mode.
3. Performance of non-destructive Booleans is significantly worse in some case.
Moreover, making the non-desctructive mode default in Boolean operations leads to numerous regressions:
http://occt-tests/CR27049-master-emv-OCCT/Debian80-64/summary.html
http://occt-tests/CR27049-master-emv-OCCT/Windows-64-VC14/summary.html
http://occt-tests/CR27049-master-emv-Products/Debian80-64/summary.html
http://occt-tests/CR27049-master-emv-Products/Windows-64-VC14/summary.html
Some of these regressions are caused by invalid inputs which are not allowed to be healed in Booleans in this mode and passed into result as is. Some regressions are caused by the inconsistencies in the algorithm. In any case, all these regressions have to be analyzed and resolved.
When all regressions are resolved, I propose to close the issue keeping the destructive mode default in Booleans.
1. Not all users may really need it (and those who do need it can switch it on using the corresponding setter);
2. Enabling it by default we will stop testing the destructive mode.
3. Performance of non-destructive Booleans is significantly worse in some case.
Moreover, making the non-desctructive mode default in Boolean operations leads to numerous regressions:
http://occt-tests/CR27049-master-emv-OCCT/Debian80-64/summary.html
http://occt-tests/CR27049-master-emv-OCCT/Windows-64-VC14/summary.html
http://occt-tests/CR27049-master-emv-Products/Debian80-64/summary.html
http://occt-tests/CR27049-master-emv-Products/Windows-64-VC14/summary.html
Some of these regressions are caused by invalid inputs which are not allowed to be healed in Booleans in this mode and passed into result as is. Some regressions are caused by the inconsistencies in the algorithm. In any case, all these regressions have to be analyzed and resolved.
When all regressions are resolved, I propose to close the issue keeping the destructive mode default in Booleans.
Branch [archived branch] has been updated forcibly by Participant.
[revision removed]
[revision removed]
I agree to leave destructive mode by default.
However, it is worth to make new tests upon those causing regressions in non-destructive mode.
However, it is worth to make new tests upon those causing regressions in non-destructive mode.
I propose not only making those tests, but also fix them.
Yes, of course.
Related records