View Issue Details

IDProjectCategoryView StatusLast Update
0026738Open CASCADEOCCT:Modeling Algorithmspublic2019-09-05 13:13
ReportermsvAssigned Toapn  
PriorityhighSeveritytweak 
Status closedResolutionfixed 
Product Version6.9.1 
Target Version7.1.0Fixed in Version7.1.0 
Summary0026738: Make Boolean operations safely treating arguments when running with fuzzy option
DescriptionWhen fuzzy option is in force Boolean operation increases tolerance of all sub-shapes of the arguments for the moment of finding intersections.
It will become a trouble if the same shape is participating in Boolean operations in different threads simultaneously.
So, it is needed to re-implement the fuzzy option in a different way. Instead of modifying tolerance of input shapes, the algorithm must add fuzzy value each time a tolerance of a shape is used.
Steps To Reproducetests bugs modalg_6 bug26738
TagsNo tags attached.
Test case numberbugs modalg_6 bug26738

Relationships

parent of 0027090 closedbugmaster Open CASCADE Point is classified IN solid but actually it is OUT 
related to 0026796 closedbugmaster Open CASCADE The result of General Fuse operation is self-intersecting shape 
related to 0027049 assignedemv Open CASCADE Make non-destructive mode be defined by default in Boolean operations 
child of 0027166 assignedmsv Open CASCADE Non-destructive principle in algorithms 

Activities

git

2015-12-30 14:44

administrator   ~0049684

Branch CR26738 has been created by msv.

SHA-1: 26477f3e80c19ce21aa9edad32222ffe6d2f4329


Detailed log of new commits:

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations non-destructive when running with fuzzy option
    
    Note: it is not complete yet.

git

2016-01-14 21:34

administrator   ~0049875

Branch CR26738 has been updated forcibly by msv.

SHA-1: 29ad62b19ea8bf463a96c22a5da50d2a064c4266

git

2016-01-25 15:49

administrator   ~0050101

Branch CR26738 has been updated by msv.

SHA-1: 28fc754ae50e1f3e66f7aa519aa9388b15643008


Detailed log of new commits:

Author: msv
Date: Mon Jan 25 15:48:56 2016 +0300

    Work against regressions.

git

2016-04-25 12:04

administrator   ~0053543

Branch CR26738_2 has been created by msv.

SHA-1: 2995e74729848863b030322ead7e9a711b600cf5


Detailed log of new commits:

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations guarding arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    Test case for the bug has been added.
    
    Update the test boolean/bcut_complex/N9

git

2016-04-25 15:30

administrator   ~0053555

Branch CR26738_3 has been created by emv.

SHA-1: 89505bf47531f0aea6613a08a46f14444c2f0561


Detailed log of new commits:

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations guarding arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    Test case for the bug has been added.
    
    Update the test boolean/bcut_complex/N9

git

2016-07-22 16:08

administrator   ~0056185

Branch CR26738_3 has been updated by emv.

SHA-1: ed6a71641d58350328c3cb6e97000261ec995ecb


Detailed log of new commits:

Author: emv
Date: Fri Jul 22 16:08:40 2016 +0300

    Use fuzzy value for updating common blocks.

git

2016-09-22 13:10

administrator   ~0058020

Branch CR26738_4 has been created by msv.

SHA-1: 85a7502e8b47dc638e2f81bdc9f2c9f2dc2921b8


Detailed log of new commits:

Author: msv
Date: Thu Sep 22 10:52:17 2016 +0300

    Use fuzzy value where it is needed while projecting a vertex on edge/face (to avoid regression "bugs modalg_6 bug25880").

Author: msv
Date: Mon Sep 19 18:00:28 2016 +0300

    Improve computation of the vertex tolerance, taking into account intersection segments between p-curves (to avoid regression on "bugs modalg_6 bug22794").

Author: msv
Date: Fri Sep 16 18:59:44 2016 +0300

    // - Correct the method FilterPavesOnCurves to allow filtering of only paves
    // that are projected with small angle to the curve tangent.
    // - Undo changes in BOPAlgo_BuilderSolid.cxx - not needed any more.

Author: msv
Date: Thu Sep 15 17:07:46 2016 +0300

    Correct test bugs/modalg_6/bug26954_3: now the result is more precise.

Author: msv
Date: Tue Sep 6 15:54:36 2016 +0300

    //Correct the function BOPAlgo_PaveFiller::FilterPavesOnCurves
    - Correct the method BOPAlgo_PaveFiller::PutPaveOnCurve. Use the original vertex tolerance instead of value increased during putting it on other curves.
    - Add the method BOPDS_PaveBlock::RemoveExtPave

Author: msv
Date: Tue Aug 23 12:25:26 2016 +0300

    Increase margin added to computed tolerance in the method IntTools_Tools::ComputeTolerance up to 0.001%.

Author: msv
Date: Tue Aug 23 16:12:53 2016 +0300

    Correct test case bugs/modalg_6/bug25880 to suppress wrong bfuse commands.

Author: msv
Date: Tue Aug 23 10:51:05 2016 +0300

    Update test case bugs/modalg_4/pro19653 to make it stable. See comment insode the script.

Author: msv
Date: Mon Aug 22 18:46:17 2016 +0300

    In BOPAlgo_PaveFiller::MakeBlocks(), filter out paves on intersection curve that were put on the curve accidentally due to wide range of E-F intersection vertex.

Author: msv
Date: Fri Jul 22 18:18:39 2016 +0300

    Update test cases. The following are improvements:
    boolean bcut_complex N9
    boolean gdml_private ZH2 ZI7 ZJ7
    boolean volumemaker A7 B6 C2 C4

Author: msv
Date: Mon Aug 15 11:48:04 2016 +0300

    Correct initialization of pave blocks for degenerated edges.

Author: emv
Date: Fri Jul 22 16:08:40 2016 +0300

    Use fuzzy value for updating common blocks.

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations guarding arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    Test case for the bug has been added.
    
    Update the test boolean/bcut_complex/N9

msv

2016-09-22 13:11

developer   ~0058021

Dear Eugeny, please review the fix.

emv

2016-09-23 12:22

developer   ~0058063

Remarks:
1. BOPDS_DS::Init() - the bounding box of the vertex should be updated with half of aTolAdd instead of theFuzz;
2. BOPAlgo_PaveFiller_4 - there is no need to check the interferences between vertices and face if no V/F were even computed;
3. BOPAlgo_PaveFiller_5 - there is no need to compare myFuzzyValue with Precision::Confusion() if by default it is initialized with this value;
4. IntTools_EdgeEdge, IntTools_FaceFace - myFuzzyValue is initialized with 0 by default, but should be initialized with Precision::Confusion();
5. IntTools_EdgeFace, IntTools_BeanFaceIntersector - it is necessary to add the field myFuzzyValue to these classes to provide consistency
with other intersection algorithms;
6. BOPTools_AlgoTools - in the methods in which fuzzy value is used, it is initialized with 0 by default. It is necessary to make it consistent with IntTools_Context::Compute* methods;
7. BOPTools_AlgoTools::MakeEdge - when using BRep_Builder there is no need to compare the tolerances before updating the vertex;
8. BOPAlgo_PaveFiller::UpdateExistingPaveBlocks - myFuzzyValue is compared with Precision::Confusion();
9. BOPAlgo_PaveFiller_3 - the post treatment of the Edge/Edge intersection vertices is performed incorrectly. Currently, the vertices are considered as interfered if their bounding boxes are interfered. It is necessary to compare additionally the real distance between points with sum of tolerances of these vertices.

git

2016-09-27 11:49

administrator   ~0058190

Branch CR26738_5 has been created by msv.

SHA-1: 3ac0cf1a6d9debce50e9169fc2898b92903400e9


Detailed log of new commits:

Author: msv
Date: Tue Sep 27 11:49:25 2016 +0300

    Considering remarks.
    
    - In the class IntTools_EdgeFace, the methods SetTolE, SetTolF, TolE, TolF have been removed, and the methods SetFuzzyValue, FuzzyValue have been added.

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations safely treating arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    The following changes in API have been made:
    
    - The methods SetFuzzyValue and FuzzyValue have been moved from the classes BOPAlgo_ArgumentAnalyzer, BOPAlgo_Builder, and BOPAlgo_PaveFiller to the base class BOPAlgo_Algo.
    - In BOPTools_AlgoTools, a new argument "theFuzzyValue" has been added in the methods ComputeVV and AreFacesSameDomain.
    - In IntTools_Context, a new argument "theFuzzyValue" has been added in the methods ComputeVE and ComputeVF.
    - The methods SetFuzzyValue and FuzzyValue have been added in the classes IntTools_EdgeEdge, IntTools_FaceFace.
    - The new argument "theTol" has been added in the method IntTools_WLineTool::DecompositionOfWLine.
    
    Some improvements in algorithms have been made during fighting with regressions:
    
    - Correct initialization of pave blocks for degenerated edges.
    - In BOPAlgo_PaveFiller::MakeBlocks(), filter out paves on intersection curve that were put on the curve accidentally due to wide range of E-F intersection vertex.
    - In the method IntTools_Tools::ComputeTolerance the margin added to the computed tolerance has been increased up to 0.001%.
    - The method BOPAlgo_PaveFiller::PutPaveOnCurve has been corrected in order to use the original vertex tolerance instead of the value increased during putting it on other curves.
    - The new method BOPDS_PaveBlock::RemoveExtPave has been added.
    - The vertex tolerance computation in BOPTools_AlgoTools::CorrectCurveOnSurface has been improved, taking into account intersection segments between p-curves (to avoid regression on "bugs modalg_6 bug22794").
    
    Test case for the bug has been added.
    
    The following test case have been updated as improvements:
    boolean gdml_private ZH2 ZI7 ZJ7
    boolean volumemaker C4
    
    The test case bugs/modalg_4/pro19653 has been corrected to make it stable. See comment inside the script for details.
    
    The test case bugs/modalg_6/bug25880 has been corrected to suppress wrong bfuse commands.
    
    The test bugs/modalg_6/bug26954_3 has been corrected to compare the result with more precise reference value.

msv

2016-09-27 11:50

developer   ~0058191

Please review the new version.

git

2016-09-27 12:22

administrator   ~0058192

Branch CR26738_5 has been updated forcibly by msv.

SHA-1: fe5b266efce62184d8f1d75af1509e571419d4f2

emv

2016-09-27 12:23

developer   ~0058193

Reviewed, please test.

apv

2016-09-28 12:26

tester   ~0058240

Dear BugMaster,

Branch CR26738_5 from occt git-repository (and master from products git-repository) was compiled on Linux, MacOS and Windows platforms and tested.
SHA-1: fe5b266efce62184d8f1d75af1509e571419d4f2

Number of compiler warnings:
occt component:
   Linux: 0 (0 on master)
   Windows: 0 (0 on master)
   MasOS: 0 (0 on master)
products component:
   Linux: 64
   Windows: 0
   MacOS: 1153

Regressions/Differences:
http://occt-tests/CR26738_5-master-OCCT/Debian70-64/summary.html
boolean volumemaker A8
bugs modalg_4 bug697_2, bug697_4, bug697_7, bug697_8
boolean gdml_private ZI7, ZJ7

Testing cases:
bugs modalg_6 bug26738 - OK
http://occt-tests/CR26738_5-master-OCCT/Debian70-64/bugs/modalg_6/bug26738.html
http://occt-tests/CR26738_5-master-OCCT/Windows-64-VC10/bugs/modalg_6/bug26738.html

CPU-problematic test case has been detected:
blend simple Q6: 0.7020045 / 0.0936006 [+650.00%]

Testing on Linux:
Total MEMORY difference: 90702970 / 90175592 [+0.58%]
Total CPU difference: 19769.110000000073 / 19208.04999999986 [+2.92%]

Testing on Windows:
Total MEMORY difference: 57172294 / 57221541 [-0.09%]
Total CPU difference: 17843.955983598702 / 18310.78897609872 [-2.55%]

There are differences in images found by testdiff:
http://occt-tests/CR26738_5-master-OCCT/Debian70-64/diff-Debian70-64.html
http://occt-tests/CR26738_5-master-OCCT/Windows-64-VC10/diff-Windows-64-VC10-image.html
boolean gdml_private ZJ7
boolean gdml_private ZH2
boolean gdml_private ZI7
boolean volumemaker A8
bugs modalg_1 bug10232

apv

2016-09-28 12:29

tester   ~0058241

Dear Mikhail,

Branch CR26738_5 has been rejected due to:
- regressions/differences/improvements
- CPU problems
- differences in images

git

2016-10-05 17:34

administrator   ~0058443

Branch CR26738_6 has been created by msv.

SHA-1: 74619505292e23be7d7c4d79e93872b90bc47a15


Detailed log of new commits:

Author: msv
Date: Wed Oct 5 16:41:05 2016 +0300

    - Accept improvements in boolean/gdml_private/ZI7 and ZJ7.
    - Improve IsExistingPaveBlock to make more stable catching of coincidence of common block with section curve (against regression "bugs modalg_4 bug697_2" on Linux).

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations safely treating arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    The following changes in API have been made:
    
    - The methods SetFuzzyValue and FuzzyValue have been moved from the classes BOPAlgo_ArgumentAnalyzer, BOPAlgo_Builder, and BOPAlgo_PaveFiller to the base class BOPAlgo_Algo.
    - In BOPTools_AlgoTools, a new argument "theFuzzyValue" has been added in the methods ComputeVV and AreFacesSameDomain.
    - In IntTools_Context, a new argument "theFuzzyValue" has been added in the methods ComputeVE and ComputeVF.
    - The methods SetFuzzyValue and FuzzyValue have been added in the classes IntTools_EdgeEdge, IntTools_FaceFace.
    - In the class IntTools_EdgeFace, the methods SetTolE, SetTolF, TolE, TolF have been removed, and the methods SetFuzzyValue, FuzzyValue have been added.
    - The new argument "theTol" has been added in the method IntTools_WLineTool::DecompositionOfWLine.
    
    Some improvements in algorithms have been made during fighting with regressions:
    
    - Correct initialization of pave blocks for degenerated edges.
    - In BOPAlgo_PaveFiller::MakeBlocks(), filter out paves on intersection curve that were put on the curve accidentally due to wide range of E-F intersection vertex.
    - In the method IntTools_Tools::ComputeTolerance the margin added to the computed tolerance has been increased up to 0.001%.
    - The method BOPAlgo_PaveFiller::PutPaveOnCurve has been corrected in order to use the original vertex tolerance instead of the value increased during putting it on other curves.
    - The new method BOPDS_PaveBlock::RemoveExtPave has been added.
    - The vertex tolerance computation in BOPTools_AlgoTools::CorrectCurveOnSurface has been improved, taking into account intersection segments between p-curves (to avoid regression on "bugs modalg_6 bug22794").
    
    Test case for the bug has been added.
    
    The following test case have been updated as improvements:
    boolean gdml_private ZH2 ZI7 ZJ7
    boolean volumemaker C4
    
    The test case bugs/modalg_4/pro19653 has been corrected to make it stable. See comment inside the script for details.
    
    The test case bugs/modalg_6/bug25880 has been corrected to suppress wrong bfuse commands.
    
    The test bugs/modalg_6/bug26954_3 has been corrected to compare the result with more precise reference value.

git

2016-10-27 12:01

administrator   ~0059239

Branch CR26738_6 has been updated forcibly by msv.

SHA-1: bdf993cbaa0c524e30c9645966db0076b034a14a

msv

2016-10-27 12:02

developer   ~0059240

Dear Eugeny, please review the last changes.

msv

2016-10-27 12:08

developer   ~0059241

Differences in images
 boolean gdml_private ZJ7
 boolean gdml_private ZH2
 boolean gdml_private ZI7
are improvements.

boolean volumemaker A8
bugs modalg_1 bug10232
These test cases are unstable and change their behavior from fix to fix. It should be fixed in scope of another bug.

git

2016-10-27 12:28

administrator   ~0059242

Branch CR26738_6 has been updated forcibly by msv.

SHA-1: 55d22c01113013accf1f3d146368965a0d5c0854

git

2016-10-27 12:33

administrator   ~0059243

Branch CR26738_7 has been created by msv.

SHA-1: 7b37fd0775772e89c66e5507280610a1251fbcad


Detailed log of new commits:

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations safely treating arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    The following changes in API have been made:
    
    - The methods SetFuzzyValue and FuzzyValue have been moved from the classes BOPAlgo_ArgumentAnalyzer, BOPAlgo_Builder, and BOPAlgo_PaveFiller to the base class BOPAlgo_Algo.
    - The public method BOPDS_DS::VerticesOnIn has been renamed to SubShapesOnIn, and the new output parameter theCommonPB has been added.
    - In BOPTools_AlgoTools, a new argument "theFuzzyValue" has been added in the methods ComputeVV and AreFacesSameDomain.
    - In IntTools_Context, a new argument "theFuzzyValue" has been added in the methods ComputeVE and ComputeVF.
    - The methods SetFuzzyValue and FuzzyValue have been added in the classes IntTools_EdgeEdge, IntTools_FaceFace.
    - In the class IntTools_EdgeFace, the methods SetTolE, SetTolF, TolE, TolF have been removed, and the methods SetFuzzyValue, FuzzyValue have been added.
    - The new argument "theTol" has been added in the method IntTools_WLineTool::DecompositionOfWLine.
    
    Some improvements in algorithms have been made during fighting with regressions:
    
    - Correct initialization of pave blocks for degenerated edges.
    - In BOPAlgo_PaveFiller::MakeBlocks(), filter out paves on intersection curve that were put on the curve accidentally due to wide range of E-F intersection vertex.
    - In the method IntTools_Tools::ComputeTolerance the margin added to the computed tolerance has been increased up to 0.001%.
    - The method BOPAlgo_PaveFiller::PutPaveOnCurve has been corrected in order to use the original vertex tolerance instead of the value increased during putting it on other curves.
    - The new method BOPDS_PaveBlock::RemoveExtPave has been added.
    - The vertex tolerance computation in BOPTools_AlgoTools::CorrectCurveOnSurface has been improved, taking into account intersection segments between p-curves (to avoid regression on "bugs modalg_6 bug22794").
    - Improve IsExistingPaveBlock to make more stable catching of coincidence of common block with section curve (against regression "bugs modalg_4 bug697_2" on Linux).
    
    Test case for the bug has been added.
    
    The following test cases have been updated as improvements:
    boolean gdml_private ZH2 ZI7 ZJ7
    boolean volumemaker C4
    
    The test case bugs/modalg_4/pro19653 has been corrected to make it stable. See comment inside the script for details.
    
    The test case bugs/modalg_6/bug25880 has been corrected to suppress wrong bfuse commands.
    
    The test bugs/modalg_6/bug26954_3 has been corrected to compare the result with more precise reference value.
    
    The "faulty" TODO in boolean/volumemaker/A8 has been made actual for Linux as well.

emv

2016-10-27 12:37

developer   ~0059244

Reviewed.

git

2016-10-28 17:48

administrator   ~0059370

Branch CR26738_7 has been updated forcibly by apv.

SHA-1: 813b49bf938f8030ef7d86291d205d03059674af

apv

2016-10-28 17:49

tester   ~0059371

Branch CR26738_7 has been rebased on the current master

apv

2016-10-31 16:24

tester   ~0059639

Last edited: 2016-10-31 16:25

Dear BugMaster,

Branch CR26738_7 from occt git-repository (and master from products git-repository) was compiled on Linux, MacOS and Windows platforms and tested.
SHA-1: 813b49bf938f8030ef7d86291d205d03059674af

Number of compiler warnings:
occt component:
   Linux: 0 (0 on master)
   Windows: 0 (0 on master)
   MasOS: 0 (0 on master)
products component:
   Linux: 63
   Windows: 0
   MacOS: 1137

Regressions/Differences:
http://occt-tests/CR26738_7-master-OCCT/Debian70-64/summary.html
http://occt-tests/CR26738_7-master-OCCT/Windows-64-VC10/summary.html
bugs modalg_5 bug25319_1, bug25319_2

Testing cases:
bugs modalg_6 bug26738 - OK
http://occt-tests/CR26738_7-master-OCCT/Debian70-64/bugs/modalg_6/bug26738.html
http://occt-tests/CR26738_7-master-OCCT/Windows-64-VC10/bugs/modalg_6/bug26738.html

Testing on Linux:
Total MEMORY difference: 90922433 / 90714368 [+0.23%]
Total CPU difference: 19412.469999999914 / 19289.569999999887 [+0.64%]

Testing on Windows:
Total MEMORY difference: 57268610 / 57321116 [-0.09%]
Total CPU difference: 18012.51506409871 / 18220.18359529866 [-1.14%]

There are differences in images found by testdiff:
http://occt-tests/CR26738_7-master-OCCT/Debian70-64/diff-Debian70-64.html
http://occt-tests/CR26738_7-master-OCCT/Windows-64-VC10/diff-Windows-64-VC10-image.html
boolean gdml_private ZJ7 (approved)
boolean gdml_private ZH2 (approved)
boolean gdml_private ZI7 (approved)
boolean volumemaker A8 (approved)
bugs modalg_1 bug10232 (approved)

apv

2016-10-31 16:27

tester   ~0059640

Dear Mikhail,

Branch CR26738_7 has been rejected due to:
- regressions/differences/improvements

git

2016-11-01 19:01

administrator   ~0059722

Branch CR26738_8 has been created by msv.

SHA-1: c4951260ec0e100062f8d61fd7ee8b0eac6d261a


Detailed log of new commits:

Author: emv
Date: Thu Sep 3 10:31:31 2015 +0300

    0026738: Make Boolean operations safely treating arguments when running with fuzzy option
    
    When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.
    
    The following changes in API have been made:
    
    - The methods SetFuzzyValue and FuzzyValue have been moved from the classes BOPAlgo_ArgumentAnalyzer, BOPAlgo_Builder, and BOPAlgo_PaveFiller to the base class BOPAlgo_Algo.
    - The public method BOPDS_DS::VerticesOnIn has been renamed to SubShapesOnIn, and the new output parameter theCommonPB has been added.
    - In BOPTools_AlgoTools, a new argument "theFuzzyValue" has been added in the methods ComputeVV and AreFacesSameDomain.
    - In IntTools_Context, a new argument "theFuzzyValue" has been added in the methods ComputeVE and ComputeVF.
    - The methods SetFuzzyValue and FuzzyValue have been added in the classes IntTools_EdgeEdge, IntTools_FaceFace.
    - In the class IntTools_EdgeFace, the methods SetTolE, SetTolF, TolE, TolF have been removed, and the methods SetFuzzyValue, FuzzyValue have been added.
    - The new argument "theTol" has been added in the method IntTools_WLineTool::DecompositionOfWLine.
    
    Some improvements in algorithms have been made during fighting with regressions:
    
    - Correct initialization of pave blocks for degenerated edges.
    - In BOPAlgo_PaveFiller::MakeBlocks(), filter out paves on intersection curve that were put on the curve accidentally due to wide range of E-F intersection vertex.
    - In the method IntTools_Tools::ComputeTolerance the margin added to the computed tolerance has been increased up to 0.001%.
    - The method BOPAlgo_PaveFiller::PutPaveOnCurve has been corrected in order to use the original vertex tolerance instead of the value increased during putting it on other curves.
    - The new method BOPDS_PaveBlock::RemoveExtPave has been added.
    - The vertex tolerance computation in BOPTools_AlgoTools::CorrectCurveOnSurface has been improved, taking into account intersection segments between p-curves (to avoid regression on "bugs modalg_6 bug22794").
    - Improve IsExistingPaveBlock to make more stable catching of coincidence of common block with section curve (against regression "bugs modalg_4 bug697_2" on Linux).
    
    Test case for the bug has been added.
    
    The following test cases have been updated as improvements:
    boolean gdml_private ZH2 ZI7 ZJ7
    boolean volumemaker C4
    
    The test case bugs/modalg_4/pro19653 has been corrected to make it stable. See comment inside the script for details.
    
    The test case bugs/modalg_6/bug25880 has been corrected to suppress wrong bfuse commands.
    
    The test bugs/modalg_6/bug26954_3 has been corrected to compare the result with more precise reference value.
    
    The "faulty" TODO in boolean/volumemaker/A8 has been made actual for Linux as well.

git

2016-11-01 19:07

administrator   ~0059723

Branch CR26738_8 has been updated forcibly by msv.

SHA-1: 0ffe5b5936c1d152088bf8c2db136198aa1fa091

msv

2016-11-01 19:10

developer   ~0059724

The failed cases "bugs modalg_5 bug25319_1, bug25319_2" have the same nature of failure as in the tested branch CR27431_5. Therefore I have re-based the fix on top of that branch.
Please test the branch CR26738_8 together with CR27431_prod.

git

2016-11-02 17:17

administrator   ~0059796

Branch CR26738_8 has been updated forcibly by apv.

SHA-1: 3e612566efffa73bba08008c693290c8f01bc385

apv

2016-11-02 17:17

tester   ~0059797

Branch CR26738_8 has been rebased on the IR-2016-11-02

apv

2016-11-03 16:01

tester   ~0059858

Dear BugMaster,

Branch CR26738_8 from occt git-repository (and IR-2016-11-02 from products git-repository) was compiled on Linux, MacOS and Windows platforms and tested.
SHA-1: 3e612566efffa73bba08008c693290c8f01bc385

Number of compiler warnings:
occt component:
   Linux: 0 (0 on master)
   Windows: 0 (0 on master)
   MasOS: 0 (0 on master)
products component:
   Linux: 63
   Windows: 0
   MacOS: 1129

Regressions/Differences:
Not detected

Testing cases:
bugs modalg_6 bug26738 - OK
http://occt-tests/CR26738_8-IR-2016-11-02-OCCT/Debian70-64/bugs/modalg_6/bug26738.html
http://occt-tests/CR26738_8-IR-2016-11-02-OCCT/Windows-64-VC10/bugs/modalg_6/bug26738.html

Testing on Linux:
Total MEMORY difference: 91267436 / 91199950 [+0.07%]
Total CPU difference: 19497.47000000005 / 19491.160000000036 [+0.03%]

Testing on Windows:
Total MEMORY difference: 57412590 / 57451773 [-0.07%]
Total CPU difference: 17894.95271049863 / 17672.82288659874 [+1.26%]

apn

2016-11-08 12:33

administrator   ~0059990

Dear Mikhail,

During compilation IR which includes 26738_8 compile errors appeared on Debian60-64 and CentOS64-64:
...
/dn54/builds/IR-2016-11-07_IR-2016-11-07/CentOS64-64-opt/OCCT/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx: In member function 'void BOPAlgo_PaveFiller::FilterPavesOnCurves(const BOPDS_VectorOfCurve&, Standard_Real)':
/dn54/builds/IR-2016-11-07_IR-2016-11-07/CentOS64-64-opt/OCCT/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx:1539: error: template argument for 'template<class TheItemType> class NCollection_List' uses local type 'BOPAlgo_PaveFiller::FilterPavesOnCurves(const BOPDS_VectorOfCurve&, Standard_Real)::PaveBlockDist'
/dn54/builds/IR-2016-11-07_IR-2016-11-07/CentOS64-64-opt/OCCT/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx:1539: error: trying to instantiate 'template<class TheItemType> class NCollection_List'
/dn54/builds/IR-2016-11-07_IR-2016-11-07/CentOS64-64-opt/OCCT/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx:1539: error: template argument 2 is invalid
/dn54/builds/IR-2016-11-07_IR-2016-11-07/CentOS64-64-opt/OCCT/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx:1539: error: invalid type in declaration before ';' token
...

git

2016-11-08 14:41

administrator   ~0060018

Branch CR26738_9 has been created by msv.

SHA-1: be17d7e52bf334e79037134bbd6c8a97bf225d8e


Detailed log of new commits:

Author: msv
Date: Tue Nov 8 14:41:37 2016 +0300

    //Eliminate compilation error on Linux.

msv

2016-11-08 14:42

developer   ~0060019

Fixed. Please try again.

msv

2016-11-08 14:42

developer   ~0060020

Use CR26738_9.

git

2016-12-07 11:25

administrator   ~0061179

Branch CR26738 has been deleted by kgv.

SHA-1: 28fc754ae50e1f3e66f7aa519aa9388b15643008

git

2016-12-07 11:25

administrator   ~0061180

Branch CR26738_2 has been deleted by kgv.

SHA-1: 2995e74729848863b030322ead7e9a711b600cf5

git

2016-12-07 11:25

administrator   ~0061181

Branch CR26738_3 has been deleted by kgv.

SHA-1: ed6a71641d58350328c3cb6e97000261ec995ecb

git

2016-12-07 11:25

administrator   ~0061182

Branch CR26738_4 has been deleted by kgv.

SHA-1: 85a7502e8b47dc638e2f81bdc9f2c9f2dc2921b8

git

2016-12-07 11:25

administrator   ~0061183

Branch CR26738_5 has been deleted by kgv.

SHA-1: fe5b266efce62184d8f1d75af1509e571419d4f2

git

2016-12-07 11:25

administrator   ~0061184

Branch CR26738_6 has been deleted by kgv.

SHA-1: 55d22c01113013accf1f3d146368965a0d5c0854

git

2016-12-07 11:25

administrator   ~0061185

Branch CR26738_7 has been deleted by kgv.

SHA-1: 813b49bf938f8030ef7d86291d205d03059674af

git

2016-12-07 11:25

administrator   ~0061186

Branch CR26738_8 has been deleted by kgv.

SHA-1: 3e612566efffa73bba08008c693290c8f01bc385

git

2016-12-07 11:30

administrator   ~0061236

Branch CR26738_9 has been deleted by kgv.

SHA-1: be17d7e52bf334e79037134bbd6c8a97bf225d8e

Related Changesets

occt: master 0d0481c7

2016-11-08 12:20:42

msv


Committer: apn Details Diff
0026738: Make Boolean operations safely treating arguments when running with fuzzy option

When fuzzy option is in force prevent increasing tolerance of input shapes. Instead pass increased by fuzzy value the tolerances of sub-shapes everywhere where it is needed by intersection algorithms.

The following changes in API have been made:

- The methods SetFuzzyValue and FuzzyValue have been moved from the classes BOPAlgo_ArgumentAnalyzer, BOPAlgo_Builder, and BOPAlgo_PaveFiller to the base class BOPAlgo_Algo.
- The public method BOPDS_DS::VerticesOnIn has been renamed to SubShapesOnIn, and the new output parameter theCommonPB has been added.
- In BOPTools_AlgoTools, a new argument "theFuzzyValue" has been added in the methods ComputeVV and AreFacesSameDomain.
- In IntTools_Context, a new argument "theFuzzyValue" has been added in the methods ComputeVE and ComputeVF.
- The methods SetFuzzyValue and FuzzyValue have been added in the classes IntTools_EdgeEdge, IntTools_FaceFace.
- In the class IntTools_EdgeFace, the methods SetTolE, SetTolF, TolE, TolF have been removed, and the methods SetFuzzyValue, FuzzyValue have been added.
- The new argument "theTol" has been added in the method IntTools_WLineTool::DecompositionOfWLine.

Some improvements in algorithms have been made during fighting with regressions:

- Correct initialization of pave blocks for degenerated edges.
- In BOPAlgo_PaveFiller::MakeBlocks(), filter out paves on intersection curve that were put on the curve accidentally due to wide range of E-F intersection vertex.
- In the method IntTools_Tools::ComputeTolerance the margin added to the computed tolerance has been increased up to 0.001%.
- The method BOPAlgo_PaveFiller::PutPaveOnCurve has been corrected in order to use the original vertex tolerance instead of the value increased during putting it on other curves.
- The new method BOPDS_PaveBlock::RemoveExtPave has been added.
- The vertex tolerance computation in BOPTools_AlgoTools::CorrectCurveOnSurface has been improved, taking into account intersection segments between p-curves (to avoid regression on "bugs modalg_6 bug22794").
- Improve IsExistingPaveBlock to make more stable catching of coincidence of common block with section curve (against regression "bugs modalg_4 bug697_2" on Linux).

Test case for the bug has been added.

The following test cases have been updated as improvements:
boolean gdml_private ZH2 ZI7 ZJ7
boolean volumemaker C4

The test case bugs/modalg_4/pro19653 has been corrected to make it stable. See comment inside the script for details.

The test case bugs/modalg_6/bug25880 has been corrected to suppress wrong bfuse commands.

The test bugs/modalg_6/bug26954_3 has been corrected to compare the result with more precise reference value.

The "faulty" TODO in boolean/volumemaker/A8 has been made actual for Linux as well.

//Eliminate compilation error on Linux.
Affected Issues
0026738
mod - src/BOPAlgo/BOPAlgo_Algo.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_Algo.hxx Diff File
mod - src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.hxx Diff File
mod - src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.lxx Diff File
mod - src/BOPAlgo/BOPAlgo_BOP.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_Builder.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_Builder.hxx Diff File
mod - src/BOPAlgo/BOPAlgo_Builder_2.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_CheckerSI.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller.hxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_1.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_2.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_3.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_4.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_8.cxx Diff File
mod - src/BOPAlgo/BOPAlgo_PaveFiller_9.cxx Diff File
mod - src/BOPDS/BOPDS_DS.cxx Diff File
mod - src/BOPDS/BOPDS_DS.hxx Diff File
mod - src/BOPDS/BOPDS_DS.lxx Diff File
mod - src/BOPDS/BOPDS_PaveBlock.cxx Diff File
mod - src/BOPDS/BOPDS_PaveBlock.hxx Diff File
mod - src/BOPTools/BOPTools_AlgoTools.cxx Diff File
mod - src/BOPTools/BOPTools_AlgoTools.hxx Diff File
mod - src/BOPTools/BOPTools_AlgoTools_1.cxx Diff File
mod - src/IntTools/IntTools_BeanFaceIntersector.cxx Diff File
mod - src/IntTools/IntTools_Context.cxx Diff File
mod - src/IntTools/IntTools_Context.hxx Diff File
mod - src/IntTools/IntTools_EdgeEdge.cxx Diff File
mod - src/IntTools/IntTools_EdgeEdge.hxx Diff File
mod - src/IntTools/IntTools_EdgeEdge.lxx Diff File
mod - src/IntTools/IntTools_EdgeFace.cxx Diff File
mod - src/IntTools/IntTools_EdgeFace.hxx Diff File
mod - src/IntTools/IntTools_FaceFace.cxx Diff File
mod - src/IntTools/IntTools_FaceFace.hxx Diff File
mod - src/IntTools/IntTools_Tools.cxx Diff File
mod - src/IntTools/IntTools_WLineTool.cxx Diff File
mod - src/IntTools/IntTools_WLineTool.hxx Diff File
mod - tests/boolean/gdml_private/ZH2 Diff File
mod - tests/boolean/gdml_private/ZI7 Diff File
mod - tests/boolean/gdml_private/ZJ7 Diff File
mod - tests/boolean/volumemaker/A8 Diff File
mod - tests/boolean/volumemaker/C4 Diff File
mod - tests/bugs/modalg_4/pro19653 Diff File
mod - tests/bugs/modalg_6/bug25880 Diff File
add - tests/bugs/modalg_6/bug26738 Diff File
mod - tests/bugs/modalg_6/bug26954_3 Diff File

Issue History

Date Modified Username Field Change
2015-10-01 12:44 msv New Issue
2015-10-01 12:44 msv Assigned To => msv
2015-10-23 09:26 emv Relationship added related to 0026796
2015-12-29 11:30 msv Status new => assigned
2015-12-30 14:44 git Note Added: 0049684
2015-12-31 13:04 msv Summary Make Boolean operations non-destructive when running with fuzzy option => Make Boolean operations guarding arguments when running with fuzzy option
2016-01-14 21:34 git Note Added: 0049875
2016-01-19 18:27 msv Relationship added parent of 0027090
2016-01-25 15:49 git Note Added: 0050101
2016-02-16 17:54 msv Relationship added child of 0027166
2016-04-25 12:04 git Note Added: 0053543
2016-04-25 15:30 git Note Added: 0053555
2016-06-28 09:55 msv Summary Make Boolean operations guarding arguments when running with fuzzy option => Make Boolean operations safely treating arguments when running with fuzzy option
2016-06-28 09:59 msv Relationship added related to 0027049
2016-07-22 16:08 git Note Added: 0056185
2016-09-22 13:10 git Note Added: 0058020
2016-09-22 13:11 msv Note Added: 0058021
2016-09-22 13:11 msv Assigned To msv => emv
2016-09-22 13:11 msv Status assigned => resolved
2016-09-22 13:11 msv Steps to Reproduce Updated
2016-09-23 12:22 emv Note Added: 0058063
2016-09-23 12:22 emv Assigned To emv => msv
2016-09-23 12:22 emv Status resolved => assigned
2016-09-27 11:49 git Note Added: 0058190
2016-09-27 11:50 msv Note Added: 0058191
2016-09-27 11:50 msv Assigned To msv => emv
2016-09-27 11:50 msv Status assigned => resolved
2016-09-27 12:22 git Note Added: 0058192
2016-09-27 12:23 emv Note Added: 0058193
2016-09-27 12:23 emv Assigned To emv => bugmaster
2016-09-27 12:23 emv Status resolved => reviewed
2016-09-27 12:27 mkv Assigned To bugmaster => apv
2016-09-28 10:44 apv Test case number => bugs modalg_6 bug26738
2016-09-28 12:26 apv Note Added: 0058240
2016-09-28 12:26 apv Assigned To apv => msv
2016-09-28 12:26 apv Status reviewed => assigned
2016-09-28 12:29 apv Note Added: 0058241
2016-10-05 17:34 git Note Added: 0058443
2016-10-27 12:01 git Note Added: 0059239
2016-10-27 12:02 msv Note Added: 0059240
2016-10-27 12:02 msv Assigned To msv => emv
2016-10-27 12:02 msv Status assigned => resolved
2016-10-27 12:08 msv Note Added: 0059241
2016-10-27 12:28 git Note Added: 0059242
2016-10-27 12:33 git Note Added: 0059243
2016-10-27 12:37 emv Note Added: 0059244
2016-10-27 12:37 emv Assigned To emv => bugmaster
2016-10-27 12:37 emv Priority normal => high
2016-10-27 12:37 emv Status resolved => reviewed
2016-10-27 13:56 apv Assigned To bugmaster => apv
2016-10-28 17:48 git Note Added: 0059370
2016-10-28 17:49 apv Note Added: 0059371
2016-10-31 16:24 apv Note Added: 0059639
2016-10-31 16:24 apv Assigned To apv => msv
2016-10-31 16:24 apv Status reviewed => assigned
2016-10-31 16:25 apv Note Edited: 0059639
2016-10-31 16:27 apv Note Added: 0059640
2016-11-01 19:01 git Note Added: 0059722
2016-11-01 19:07 git Note Added: 0059723
2016-11-01 19:10 msv Note Added: 0059724
2016-11-01 19:10 msv Status assigned => resolved
2016-11-01 19:10 msv Assigned To msv => bugmaster
2016-11-01 19:10 msv Status resolved => reviewed
2016-11-02 14:54 apv Assigned To bugmaster => apv
2016-11-02 17:17 git Note Added: 0059796
2016-11-02 17:17 apv Note Added: 0059797
2016-11-03 16:01 apv Note Added: 0059858
2016-11-03 16:01 apv Assigned To apv => bugmaster
2016-11-03 16:01 apv Status reviewed => tested
2016-11-08 12:33 apn Note Added: 0059990
2016-11-08 12:33 apn Assigned To bugmaster => msv
2016-11-08 12:33 apn Status tested => assigned
2016-11-08 14:41 git Note Added: 0060018
2016-11-08 14:42 msv Note Added: 0060019
2016-11-08 14:42 msv Assigned To msv => apn
2016-11-08 14:42 msv Status assigned => resolved
2016-11-08 14:42 msv Note Added: 0060020
2016-11-08 14:43 msv Status resolved => reviewed
2016-11-08 16:15 apn Assigned To apn => bugmaster
2016-11-08 16:15 apn Status reviewed => tested
2016-11-09 17:43 apn Changeset attached => occt master 0d0481c7
2016-11-09 17:43 apn Assigned To bugmaster => apn
2016-11-09 17:43 apn Status tested => verified
2016-11-09 17:43 apn Resolution open => fixed
2016-12-07 11:25 git Note Added: 0061179
2016-12-07 11:25 git Note Added: 0061180
2016-12-07 11:25 git Note Added: 0061181
2016-12-07 11:25 git Note Added: 0061182
2016-12-07 11:25 git Note Added: 0061183
2016-12-07 11:25 git Note Added: 0061184
2016-12-07 11:25 git Note Added: 0061185
2016-12-07 11:25 git Note Added: 0061186
2016-12-07 11:30 git Note Added: 0061236
2016-12-09 16:30 aiv Status verified => closed
2016-12-09 16:39 aiv Fixed in Version => 7.1.0