View Issue Details

IDProjectCategoryView StatusLast Update
0027117Open CASCADEOCCT:Modeling Algorithmspublic2016-12-09 16:37
ReporterisnAssigned Tobugmaster  
PriorityhighSeverityfeature 
Status closedResolutionfixed 
Target Version7.1.0Fixed in Version7.1.0 
Summary0027117: BRepClass3d_SolidClassifier doesn't take into account vertex/edge/face tolerances
DescriptionThe current implementation of BRepClass3d_SolidClassifier ignores vertex/edge/face tolerances, so the result of classification of a point relative to a solid may be wrong.
It's proposed to add an additional checks to properly verify ON and IN/OUT states of the point and also modify an existing code according to this checks.
Steps To ReproduceN/A
TagsNo tags attached.
Test case numberbugs modalg_6 bug27117

Attached Files

  • FaultyFace.png (42,319 bytes)
  • bug27117.brep (28,089 bytes)

Activities

git

2016-03-10 12:29

administrator   ~0051503

Branch CR27117 has been created by isn.

SHA-1: c8f1bd843ffee91f555ee690b7a43d98cb80f5fb


Detailed log of new commits:

Author: isn
Date: Sat Feb 20 16:43:58 2016 +0300

    27117: BRepClass3d_SolidClassifier doesn't take into account vertex/edge/face tolerances

git

2016-03-10 16:42

administrator   ~0051527

Branch CR27117 has been updated forcibly by isn.

SHA-1: 75cc874be59509b2f4074a387b4c74395abb0290

msv

2016-03-10 19:50

developer   ~0051534

src\BRepClass3d\BRepClass3d_SolidExplorer.cxx

- in line 1013, insert a new line before '{'

src\IntCurvesFace\IntCurvesFace_Intersector.cxx

This change of behavior is very dangerous for a number of using it projects. It is better to activate new behavior with a special optional flag set by a separate method (UseBoundaryTolerance).

src\BRepClass3d\BRepClass3d_SClassifier.cxx

- Remove garbage in the line 81.
- Move copy constructor and operator = (line 84) into the private section.
- The method ReInit (line 215) is dangerous and indeed not used, so remove it.
- Correct misprint "uutput" in 256-257.
- The treatment of mode of work overloads the method Accept with additional if/else. The method Accept must be as simple as possible for effective work of the tree selection. I propose to implement 2 separate selector classes, one for selecting by point and another for selecting by line.
- In the method Accept, the operation myMapOfShape(theObj) is performed 3 times. Create a reference to the shape instead.
- The edge 'E' is better to declare a reference to avoid copying (109).
- In lines 121, 142, 186, avoid call to sqrt, instead compare with a square of EdgeT computed in advance.
- In the logic of method Accept, remove statements "return Standard_False;" in each if/else, because the same statement exists in the most end.
- The adaptor 'LC' is created in each call to Accept. It is better to store it as a class field to avoid creation of the same object dozen of times.
- In line 170, it is better to use SquareDistance (to avoid calling sqrt inside) and compare with the square of tolerance.
- Ignoring of internal edge/vertex should be done in point mode too. The best way is to ignore them while filling in the tree in the line 459. Degenerated edges are to be ignored too.
- Line 183: the object L is extra, the line bounds can be defined directly using the constant Precision::Infinite().
- Line 600: if we cannot get transition due to a failure getting face normal, shouldn't we set NearFaultPar to this place?
- Line 858: comparing of angles between two vectors with PI/2 is more effectively done using comparing of scalar product with 0. The same can be applied to lines 849, 872-873.
- Line 859: avoid comparing for equality, instead compare the difference with angular precision.
- The formula in line 870 can be changed in this way, so as to avoid normalization of N:
projL = N.XYZ() ^ LDir.XYZ() ^ N.XYZ()
- Line 880: this returning false is to be treated in different way to the other lines returning false, as in this way the intersection with the edge can be ignored, while the others should lead to line faulty.

git

2016-03-11 21:30

administrator   ~0051568

Branch CR27117 has been updated by isn.

SHA-1: 528ce7d87487193a7a72ee4632ec7c25874e6747


Detailed log of new commits:

Author: isn
Date: Fri Mar 11 17:29:24 2016 +0300

    corrections

msv

2016-03-14 11:44

developer   ~0051584

New remarks:

src\IntCurvesFace\IntCurvesFace_Intersector.hxx

- Please document new methods with doxygen comments.

src\IntCurvesFace\IntCurvesFace_Intersector.cxx

- myUseBoundTol is not initialized in constructor.
- The usage of myUseBoundTol is incorrect (inverse meaning) (lines 149-150).

src\BRepClass3d\BRepClass3d_SClassifier.cxx

- The comment in line 70 is irrelevant to the code.
- In line 598, Tst is assign Boolean result, but later it is treated as integer.
- In 605, add 'else' before 'if'.
- Line 845: why LDir is declared as gp_Vec but not gp_Dir? It will cause implicit construction of gp_Dir in all places where LDir is used in the context of gp_Dir.
- 847: LDir.Dot(nf1) is written twice, and nf2 is not checked.
- 859: we checked already that abs(angD) is not less than angular tolerance, so here it is not needed to compare with angular tolerance, it is better to compare with 0.
- 867: ProjL will be needed as normalized direction, so it is better to declare it gp_Dir instead of gp_Vec. Also, it is better to perform operation '^' over gp_XYZ entities instead of gp_Dir, otherwise after each intermediate crossing the result will be normalized. So, use XYZ() method as I wrote in the sample line in my previous remarks.

git

2016-03-15 12:32

administrator   ~0051625

Branch CR27117 has been updated by isn.

SHA-1: bcbad6a9014026bde631db24d4f9b9bf8fde4590


Detailed log of new commits:

Author: isn
Date: Tue Mar 15 12:30:33 2016 +0300

    corrections

git

2016-03-15 15:05

administrator   ~0051641

Branch CR27117 has been updated by isn.

SHA-1: 7505f8b9602648a95dbdea318f75ef9eb50db499


Detailed log of new commits:

Author: isn
Date: Tue Mar 15 15:00:47 2016 +0300

    corrections

git

2016-03-15 15:58

administrator   ~0051649

Branch CR27117 has been updated forcibly by isn.

SHA-1: 1f0f0bb67108a43aebe16d4957cf280cc5000813

git

2016-03-15 16:20

administrator   ~0051652

Branch CR27117 has been updated forcibly by isn.

SHA-1: 3769f10e5a4d115055b881739c9433920748c0f5

git

2016-03-15 16:38

administrator   ~0051656

Branch CR27117_1 has been created by isn.

SHA-1: aa0e1e8f664ad663a2edacecf97f91a4c4da323b


Detailed log of new commits:

Author: isn
Date: Tue Mar 15 16:38:11 2016 +0300

    27117: BRepClass3d_SolidClassifier doesn't take into account vertex/edge/face tolerances
    
    3D-claasifier now takes into the account the vertex/edges tolerances. If the given point lays inside the tolerance area of vertex or edge of the solid it's classified as TopAbs_ON.
    The behavior of IntCurvesFace_Intersector::Perform was changed. Now it may use optional null-tolerance to classify 2d-point relatively to the given face.
    UBTreeFiller is used to speedup intersection process between edges/vertices and the point.
    The test case 'boolean gdml_private ZH2' extensively uses the SolidClassifier. After this fix it returns the correct classification statuses, which leads to incorrect result shape (reported by checkshape). Yet the result shape without this fix also seems to be incorrect (one of the isolines goes out of boundary of the face). Thats why it's marked with 'TODO'.

msv

2016-03-15 16:42

developer   ~0051657

Reviewed.

apv

2016-03-16 15:42

tester   ~0051709

Dear BugMaster,

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

Number of compiler warnings:
occt component:
   Linux: 0 (0 on master)
   Windows: 0 (0 on master)
   MacOS: 0 (0 on master)
products component:
   Linux: 68
   Windows: 0
   MacOS: 1143

Regressions/Differences:
http://occt-tests/CR27117_1-master-OCCT/Debian70-64/summary.html
http://occt-tests/CR27117_1-master-OCCT/Windows-64-VC10/summary.html
boolean gdml_private ZI7 (Linux only), ZJ7 (Linux only)
bugs modalg_6 bug26567
http://occt-tests/CR27117_1-master-Products/Debian70-64/summary.html
http://occt-tests/CR27117_1-master-Products/Windows-64-VC10/summary.html
sat read E2

Testing on Linux:
Total MEMORY difference: 89897319 / 89154516 [+0.83%]
Total CPU difference: 21068.420000000042 / 18613.140000000003 [+13.19%]

Testing on Windows:
Total MEMORY difference: 56722680 / 57307615 [-1.02%]
Total CPU difference: 19897.86514959878 / 17380.352211798836 [+14.48%]

There are differences in images found by testdiff:
http://occt-tests/CR27117_1-master-OCCT/Debian70-64/diff-Debian70-64.html
http://occt-tests/CR27117_1-master-OCCT/Windows-64-VC10/diff-Windows-64-VC10.html
boolean volumemaker C4
bugs modalg_2 bug472_3

apv

2016-03-16 15:43

tester   ~0051710

Dear isn,

Branch CR27117_1 has been rejected due to:
- regressions/differences/improvements
- differences in images

msv

2016-03-17 13:07

developer   ~0051731

Dear apv, I have noticed that in addition to regressions and differences in images, there are a lot of performance degradation. I expected that you had reported this too.

Dear aml, please take care about further processing of this bug: analyze regressions and find bottlenecks, removing of which will allow leaving the algorithm on the same performance level.

git

2016-03-18 14:44

administrator   ~0051785

Branch CR27117_1 has been updated by aml.

SHA-1: 754c514e51579312a716c3a62878530e49128fcd


Detailed log of new commits:

Author: aml
Date: Fri Mar 18 14:27:57 2016 +0300

    Refactoring and initial improvements.

git

2016-03-18 14:54

administrator   ~0051786

Branch CR27117_1 has been updated forcibly by aml.

SHA-1: 8c627b33dfe8d37aacf98b58fc54716a745c9540

git

2016-03-20 11:21

administrator   ~0051798

Branch CR27117_1 has been updated by aml.

SHA-1: a278026f0dc8520de02b460f58866f844832cc6d


Detailed log of new commits:

Author: aml
Date: Sun Mar 20 11:20:19 2016 +0300

    Data caching and optimal distribution.

git

2016-03-21 08:15

administrator   ~0051799

Branch CR27117_1 has been updated by aml.

SHA-1: 64d49cb067d65d16e1a2130cc15a8f5e985006dc


Detailed log of new commits:

Author: aml
Date: Mon Mar 21 08:14:30 2016 +0300

    Correction of a parameters order.

git

2016-03-21 09:04

administrator   ~0051800

Branch CR27117_1 has been updated by aml.

SHA-1: cd269d142ae28be8a2428cbb196125d7178823cf


Detailed log of new commits:

Author: aml
Date: Mon Mar 21 09:04:33 2016 +0300

    Bad line criteria is changed.
    Misprint in auto-replace is corrected.

git

2016-03-21 12:47

administrator   ~0051807

Branch CR27117_1 has been updated by aml.

SHA-1: d9e2672d473ef02e908ef13cba06170b3b932763


Detailed log of new commits:

Author: aml
Date: Mon Mar 21 11:45:58 2016 +0300

    Commentaries were added to improve readability.

git

2016-03-21 21:22

administrator   ~0051836

Branch CR27117_1 has been updated by aml.

SHA-1: ba8cb2fd100ee60cba8f06ff5e900405c75d5b42


Detailed log of new commits:

Author: aml
Date: Mon Mar 21 21:09:21 2016 +0300

    UB-tree calculation is cashed to improve point-solid classification.

git

2016-03-23 07:07

administrator   ~0051862

Branch CR27117_1 has been updated by aml.

SHA-1: 570a8c6a240b643a09497b0bf97dff7751d06568


Detailed log of new commits:

Author: aml
Date: Wed Mar 23 07:07:18 2016 +0300

    Fix for infinite fault parameter and for missed logic in fault parameter detection.

git

2016-03-23 07:55

administrator   ~0051863

Branch CR27117_1 has been updated by aml.

SHA-1: eb9fd8eb3b775b5c0ec9a54844cb8fd62a75f159


Detailed log of new commits:

Author: aml
Date: Wed Mar 23 07:38:36 2016 +0300

    Test case is corrected.

git

2016-03-23 08:01

administrator   ~0051864

Branch CR27117_1 has been updated forcibly by aml.

SHA-1: eecc2c3f5f1b87eea09d00bbbbd17a6deeb54e7f

git

2016-03-23 08:11

administrator   ~0051865

Branch CR27117_2 has been created by aml.

SHA-1: a4db69f6543230e9a00140c2c06d3127875d5754


Detailed log of new commits:

Author: aml
Date: Wed Mar 23 08:10:57 2016 +0300

    Various improvements in point-solid classifier:
    
    1) Refactoring.
    2) UB-tree calculation is cashed to improve point-solid classification speed.
    3) Ray / curve intersection improved by trimmed parameters and correct order.
    4) Fixes in logic.
    5) Calculation caching at the classifier level.

Author: isn
Date: Tue Mar 15 16:38:11 2016 +0300

    27117: BRepClass3d_SolidClassifier doesn't take into account vertex/edge/face tolerances
    
    3D-claasifier now takes into the account the vertex/edges tolerances. If the given point lays inside the tolerance area of vertex or edge of the solid it's classified as TopAbs_ON.
    The behavior of IntCurvesFace_Intersector::Perform was changed. Now it may use optional null-tolerance to classify 2d-point relatively to the given face.
    UBTreeFiller is used to speedup intersection process between edges/vertices and the point.
    The test case 'boolean gdml_private ZH2' extensively uses the SolidClassifier. After this fix it returns the correct classification statuses, which leads to incorrect result shape (reported by checkshape). Yet the result shape without this fix also seems to be incorrect (one of the isolines goes out of boundary of the face). Thats why it's marked with 'TODO'.

git

2016-03-23 11:35

administrator   ~0051869

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: cc96dff57ec45c3c58eb07478fa8cbc2ab638a3a

git

2016-03-24 07:30

administrator   ~0051922

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: 8312ba9f2d76a0266c553d6af6c1b07dea3be40a

aml

2016-03-24 07:51

developer   ~0051923

Dear msv,
Please check current state of the branch CR27117_2.

msv

2016-03-28 11:00

developer   ~0052049

Remarks:

src\BRepClass3d\BRepClass3d_BndBoxTree.hxx

- English grammar:
// Class which is represents tree selector for point object. =>
// Class representing tree selector for point object.

// Class which is represents tree selector for line object. =>
// Class representing tree selector for line object.

- change 'double' to 'Standard_Real', and wrap long lines.
- myMapOfShape is used only in const context, so change its declaration from non-const to const reference.

src\BRepClass3d\BRepClass3d_BndBoxTree.cxx

- Declare 'V' as "const &" in Lines 58, 117:
    TopoDS_Vertex V = TopoDS::Vertex(shp);
- Line 111 is indented so as it seems to belong to the scope of 'for' loop, but it is not so. It is better to use braces to make the scope of 'for' distinct.

src\BRepClass3d\BRepClass3d_SolidExplorer.hxx

- Make short description of the new methods GetTree and GetMapEV.
- The methods GetTree and GetMapEV do not need to return non-const regerences, as the returned values are used only in const context.
- Include the header of TopTools_IndexedMapOfShape.

src\BRepClass3d\BRepClass3d_SolidExplorer.cxx

- Clear the fields myMapEV and myTree in the method InitShape.

src\BRepClass3d\BRepClass3d_SClassifier.cxx

- Line 207: use variable aMapEV.

git

2016-03-28 11:20

administrator   ~0052053

Branch CR27117_2 has been updated by aml.

SHA-1: 76db04f40bc630f3ea65504bf112b1990c2f1537


Detailed log of new commits:

Author: aml
Date: Mon Mar 28 11:19:56 2016 +0300

    Minor corrections.

aml

2016-03-28 11:20

developer   ~0052054

Dear msv,
Please check updated branch CR27117_2.

git

2016-03-28 11:22

administrator   ~0052055

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: 38f9e7b2a3ba341d70e4364b57587c0d69786709

git

2016-03-28 11:37

administrator   ~0052058

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: 6c09983acea0e2ddde40f81629fa2b9e9f7ee864

git

2016-03-28 11:54

administrator   ~0052060

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: 0d46632bac79658bbd304413e1b5b3878c9666c0

git

2016-03-28 11:58

administrator   ~0052061

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: c0833bfdd96de1d3b01c5154623424a3bb68c4ed

git

2016-03-28 12:12

administrator   ~0052062

Branch CR27117_2 has been updated forcibly by aml.

SHA-1: 4599f9c95e9e0aa9113b80031af3d8ac453e6712

msv

2016-03-28 12:13

developer   ~0052063

Reviewed.

git

2016-03-28 15:28

administrator   ~0052073

Branch CR27117_2 has been updated forcibly by apv.

SHA-1: bbf5469e70b841d7dc44a2120cfab663b64c3751

apv

2016-03-28 15:29

tester   ~0052074

Branch CR27117_2 has been rebased on the IR-2016-03-26

apv

2016-03-29 12:03

tester   ~0052101

Last edited: 2016-03-29 12:23

Dear BugMaster,

Branch CR27117_2 from occt git-repository (and IR-2016-03-26 from products git-repository) was compiled on Linux, MacOS and Windows platforms and tested.
SHA-1: bbf5469e70b841d7dc44a2120cfab663b64c3751

Number of compiler warnings:
occt component:
   Linux: 3 (0 on master)
   Windows: 0 (0 on master)
   MacOS: 0 (0 on master)
products component:
   Linux: 68
   Windows: 0
   MacOS: 1136
New additional warnings have been detected on Linux:
1. BRepClass3d_BndBoxTree.hxx:104, GNU C Compiler 4 (gcc), Priority: Normal
parameter 'outLParam' set but not used [-Wunused-but-set-parameter]
2. BRepClass3d_BndBoxTree.hxx:104, GNU C Compiler 4 (gcc), Priority: Normal
parameter 'theOutParam' set but not used [-Wunused-but-set-parameter]
3. BRepClass3d_BndBoxTree.hxx:113, GNU C Compiler 4 (gcc), Priority: Normal
parameter 'outLParam' set but not used [-Wunused-but-set-parameter]

Regressions/Differences:
http://occt-tests/CR27117_2-IR-2016-03-26-OCCT/Debian70-64/summary.html
http://occt-tests/CR27117_2-IR-2016-03-26-OCCT/Windows-64-VC10/summary.html
boolean gdml_private ZI7 (Linux only), ZJ7 (Linux only)
boolean volumemaker B7, C9, H4
bugs modalg_5 bug24244, bug24558
bugs modalg_6 bug26098, bug27002_1, bug27010
de step_1 ZZ9
de step_4 G9, I3
de step_5 B4
http://occt-tests/CR27117_2-IR-2016-03-26-Products/Debian70-64/summary.html
http://occt-tests/CR27117_2-IR-2016-03-26-Products/Windows-64-VC10/summary.html
sat read E2

Testing on Linux:
Total MEMORY difference: 90270890 / 88958395 [+1.48%]
Total CPU difference: 19455.49000000015 / 19371.69999999998 [+0.43%]

Testing on Windows:
Total MEMORY difference: 57682788 / 57518937 [+0.28%]
Total CPU difference: 18276.655957298797 / 18034.339603998826 [+1.34%]

There are differences in images found by testdiff:
http://occt-tests/CR27117_2-IR-2016-03-26-OCCT/Debian70-64/diff-Debian70-64.html
http://occt-tests/CR27117_2-IR-2016-03-26-OCCT/Windows-64-VC10/diff-Windows-64-VC10.html
boolean volumemaker C4
bugs modalg_2 bug472_3

apv

2016-03-29 12:04

tester   ~0052102

Last edited: 2016-03-29 12:23

Dear aml,

Branch CR27117_2 has been rejected due to:
- additional warnings
- regressions/differences/improvements
- differences in images

git

2016-03-30 09:55

administrator   ~0052151

Branch CR27117_3 has been created by aml.

SHA-1: d33cdd3a8d1c03e16520f9f040f6cf1d161e6671


Detailed log of new commits:

Author: aml
Date: Wed Mar 23 08:10:57 2016 +0300

    Various improvements in point-solid classifier:
    
    1) Refactoring.
    2) BndBoxTree is extracted into separate class.
    3) UB-tree calculation is cashed to improve point-solid classification speed.
    4) Ray / curve intersection improved by trimmed parameters and correct order.
    5) Fixes in logic.
    6) Calculation caching at the classifier level.

Author: isn
Date: Tue Mar 15 16:38:11 2016 +0300

    27117: BRepClass3d_SolidClassifier doesn't take into account vertex/edge/face tolerances
    
    3D-claasifier now takes into the account the vertex/edges tolerances. If the given point lays inside the tolerance area of vertex or edge of the solid it's classified as TopAbs_ON.
    The behavior of IntCurvesFace_Intersector::Perform was changed. Now it may use optional null-tolerance to classify 2d-point relatively to the given face.
    UBTreeFiller is used to speedup intersection process between edges/vertices and the point.
    The test case 'boolean gdml_private ZH2' extensively uses the SolidClassifier. After this fix it returns the correct classification statuses, which leads to incorrect result shape (reported by checkshape). Yet the result shape without this fix also seems to be incorrect (one of the isolines goes out of boundary of the face). Thats why it's marked with 'TODO'.

aml

2016-03-30 11:24

developer   ~0052159

Dear apv,

Misprint was corrected. Could you please perform testing again?

msv

2016-03-30 12:04

developer   ~0052166

I would like to precise that now CR27117_3 is an actual branch.

aml

2016-03-30 12:14

developer   ~0052169

Last edited: 2016-03-30 14:45

I've rebased CR27117_2 on the current master, corrected misprint and pushed result into CR7117_3 branch. Please test CR27117_3 branch.

apv

2016-03-31 16:02

tester   ~0052243

Dear BugMaster,

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

Number of compiler warnings:
occt component:
   Linux: 0 (0 on master)
   Windows: 0 (0 on master)
   MacOS: 0 (0 on master)
products component:
   Linux: 68
   Windows: 0
   MacOS: 1115

Regressions/Differences:
http://occt-tests/CR27117_3-master-OCCT/Debian70-64/summary.html
http://occt-tests/CR27117_3-master-OCCT/Windows-64-VC10/summary.html
boolean gdml_private ZI7 (Linux only), ZJ7 (Linux only)
boolean volumemaker C9

Testing on Linux:
Total MEMORY difference: 89458413 / 90119411 [-0.73%]
Total CPU difference: 19455.710000000152 / 19402.500000000106 [+0.27%]

Testing on Windows:
Total MEMORY difference: 57706014 / 57537936 [+0.29%]
Total CPU difference: 18006.13462319886 / 18042.685657498812 [-0.20%]

There are differences in images found by testdiff:
http://occt-tests/CR27117_3-master-OCCT/Debian70-64/diff-Debian70-64.html
http://occt-tests/CR27117_3-master-OCCT/Windows-64-VC10/diff-Windows-64-VC10.html
boolean volumemaker C4
bugs modalg_2 bug472_3

apv

2016-03-31 16:03

tester   ~0052244

Dear aml,

Branch CR27117_3 has been rejected due to:
- regressions/differences/improvements
- differences in images

git

2016-04-01 13:15

administrator   ~0052287

Branch CR27117_3 has been updated forcibly by aml.

SHA-1: 2a1579d5f9bdecf3dfcd41e29b835a482f455979

git

2016-04-01 14:44

administrator   ~0052290

Branch CR27117_3 has been updated forcibly by aml.

SHA-1: 0beb29ae1f48f9725ecda2e43f768850e45651e2

aml

2016-04-01 14:46

developer  

FaultyFace.png (42,319 bytes)

aml

2016-04-01 14:54

developer   ~0052291

Last edited: 2016-04-01 14:55

Dear msv,

1) Please check current state of the branch CR27117_3.

2)
gdml_private ZI7 (Linux only), ZJ7 (Linux only) - TODO changed
boolean volumemaker C9 - improvement.
boolean volumemaker C4 - improvement.

3)The difference in the test case bugs modalg_2 bug472_3 is caused by different handling of the faulty face (in attachments section).

In master branch this face is classified "IN" relatively to the solid.
In CR27117_3 branch this face is classified "ON" relatively to the solid.

(BopTools_AlgoTools.cxx::709).

Input for the classification algorithm is invalid, so I propose to accept changes in image since special issue for this case is exist (0025917)

msv

2016-04-01 19:17

developer   ~0052307

Reviewed.
I agree with aml's remarks.

Dear bugmaster, please test only the following tests:
boolean gdml_private ZI7
boolean gdml_private ZJ7
boolean volumemaker C9

No recompilation is needed.

apv

2016-04-05 14:25

tester   ~0052396

Test cases
boolean gdml_private ZI7
boolean gdml_private ZJ7
boolean volumemaker C9
have been retested. Results are OK:
http://occt-tests/CR27117_3-master-OCCT/Debian70-64/summary.html
http://occt-tests/CR27117_3-master-OCCT/Windows-64-VC10/summary.html

msv

2016-04-06 09:26

developer   ~0052413

Dear aml, please create test case for this issue.

aml

2016-04-06 09:30

developer  

bug27117.brep (28,089 bytes)

git

2016-04-06 09:34

administrator   ~0052414

Branch CR27117_3 has been updated by aml.

SHA-1: 64594917faf9e89c8c29a78eb4359d4d17ac8d9f


Detailed log of new commits:

Author: aml
Date: Wed Apr 6 09:32:47 2016 +0300

    Test case is added.

aml

2016-04-06 09:35

developer   ~0052415

Test case is added.

git

2016-04-06 09:46

administrator   ~0052416

Branch CR27117_3 has been updated forcibly by aml.

SHA-1: 56aced4a4b0f224e0de9d7e2608a8cca890e7bc3

msv

2016-04-06 09:50

developer   ~0052417

Dear bugmaster, please check the new test case from the last commit to the branch CR27117_3, and consider its integration.

apv

2016-04-06 12:21

tester   ~0052426

Result of testing case bugs modalg_6 bug27117 - OK:
http://occt-tests/CR27117_3-master-OCCT/Debian70-64/bugs/modalg_6/bug27117.html
http://occt-tests/CR27117_3-master-OCCT/Windows-64-VC10/bugs/modalg_6/bug27117.html

git

2016-04-17 13:40

administrator   ~0052898

Branch CR27117_1 has been deleted by kgv.

SHA-1: eecc2c3f5f1b87eea09d00bbbbd17a6deeb54e7f

git

2016-04-20 11:33

administrator   ~0053327

Branch CR27117_3 has been deleted by inv.

SHA-1: 56aced4a4b0f224e0de9d7e2608a8cca890e7bc3

git

2016-04-20 11:34

administrator   ~0053339

Branch CR27117_2 has been deleted by inv.

SHA-1: bbf5469e70b841d7dc44a2120cfab663b64c3751

git

2016-04-20 11:34

administrator   ~0053346

Branch CR27117 has been deleted by inv.

SHA-1: 3769f10e5a4d115055b881739c9433920748c0f5

Related Changesets

occt: master 58e14d59

2016-03-15 13:38:11

isn


Committer: bugmaster Details Diff
0027117: BRepClass3d_SolidClassifier doesn't take into account vertex/edge/face tolerances

Various improvements in point-solid classifier:

1) Refactoring.
2) BndBoxTree is extracted into separate class.
3) UB-tree calculation is cashed to improve point-solid classification speed.
4) Ray / curve intersection improved by trimmed parameters and correct order.
5) Fixes in logic.
6) Calculation caching at the classifier level.

3D-claasifier now takes into the account the vertex/edges tolerances. If the given point lays inside the tolerance area of vertex or edge of the solid it's classified as TopAbs_ON.
The behavior of IntCurvesFace_Intersector::Perform was changed. Now it may use optional null-tolerance to classify 2d-point relatively to the given face.
UBTreeFiller is used to speedup intersection process between edges/vertices and the point.
The test case 'boolean gdml_private ZH2' extensively uses the SolidClassifier. After this fix it returns the correct classification statuses, which leads to incorrect result shape (reported by checkshape). Yet the result shape without this fix also seems to be incorrect (one of the isolines goes out of boundary of the face). Thats why it's marked with 'TODO'.

Corrections in test cases.

Test case is added.
Affected Issues
0027117
add - src/BRepClass3d/BRepClass3d_BndBoxTree.cxx Diff File
add - src/BRepClass3d/BRepClass3d_BndBoxTree.hxx Diff File
mod - src/BRepClass3d/BRepClass3d_SClassifier.cxx Diff File
mod - src/BRepClass3d/BRepClass3d_SClassifier.hxx Diff File
mod - src/BRepClass3d/BRepClass3d_SolidExplorer.cxx Diff File
mod - src/BRepClass3d/BRepClass3d_SolidExplorer.hxx Diff File
mod - src/BRepClass3d/FILES Diff File
mod - src/IntCurvesFace/IntCurvesFace_Intersector.cxx Diff File
mod - src/IntCurvesFace/IntCurvesFace_Intersector.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/C9 Diff File
add - tests/bugs/modalg_6/bug27117 Diff File

Issue History

Date Modified Username Field Change
2016-01-26 12:05 isn New Issue
2016-01-26 12:05 isn Assigned To => isn
2016-03-10 12:29 git Note Added: 0051503
2016-03-10 14:37 isn Assigned To isn => msv
2016-03-10 14:37 isn Status new => feedback
2016-03-10 16:42 git Note Added: 0051527
2016-03-10 19:50 msv Note Added: 0051534
2016-03-10 19:50 msv Assigned To msv => isn
2016-03-10 19:50 msv Status feedback => assigned
2016-03-11 21:30 git Note Added: 0051568
2016-03-11 21:31 isn Assigned To isn => msv
2016-03-11 21:31 isn Status assigned => feedback
2016-03-14 11:44 msv Note Added: 0051584
2016-03-14 11:44 msv Assigned To msv => isn
2016-03-14 11:44 msv Status feedback => assigned
2016-03-15 12:32 git Note Added: 0051625
2016-03-15 13:36 isn Assigned To isn => msv
2016-03-15 13:36 isn Status assigned => feedback
2016-03-15 15:05 git Note Added: 0051641
2016-03-15 15:58 git Note Added: 0051649
2016-03-15 16:20 git Note Added: 0051652
2016-03-15 16:38 git Note Added: 0051656
2016-03-15 16:42 msv Note Added: 0051657
2016-03-15 16:42 msv Assigned To msv => bugmaster
2016-03-15 16:42 msv Status feedback => reviewed
2016-03-15 19:08 apv Assigned To bugmaster => apv
2016-03-16 15:42 apv Note Added: 0051709
2016-03-16 15:42 apv Assigned To apv => isn
2016-03-16 15:42 apv Status reviewed => assigned
2016-03-16 15:43 apv Note Added: 0051710
2016-03-17 13:07 msv Note Added: 0051731
2016-03-17 13:07 msv Assigned To isn => aml
2016-03-18 14:44 git Note Added: 0051785
2016-03-18 14:54 git Note Added: 0051786
2016-03-20 11:21 git Note Added: 0051798
2016-03-21 08:15 git Note Added: 0051799
2016-03-21 09:04 git Note Added: 0051800
2016-03-21 12:47 git Note Added: 0051807
2016-03-21 21:22 git Note Added: 0051836
2016-03-23 07:07 git Note Added: 0051862
2016-03-23 07:55 git Note Added: 0051863
2016-03-23 08:01 git Note Added: 0051864
2016-03-23 08:11 git Note Added: 0051865
2016-03-23 11:35 git Note Added: 0051869
2016-03-24 07:30 git Note Added: 0051922
2016-03-24 07:51 aml Note Added: 0051923
2016-03-24 07:51 aml Assigned To aml => msv
2016-03-24 07:51 aml Status assigned => resolved
2016-03-24 07:51 aml Steps to Reproduce Updated
2016-03-28 11:00 msv Note Added: 0052049
2016-03-28 11:00 msv Assigned To msv => aml
2016-03-28 11:00 msv Status resolved => assigned
2016-03-28 11:20 git Note Added: 0052053
2016-03-28 11:20 aml Note Added: 0052054
2016-03-28 11:20 aml Assigned To aml => msv
2016-03-28 11:20 aml Status assigned => resolved
2016-03-28 11:22 git Note Added: 0052055
2016-03-28 11:37 git Note Added: 0052058
2016-03-28 11:54 git Note Added: 0052060
2016-03-28 11:58 git Note Added: 0052061
2016-03-28 12:12 git Note Added: 0052062
2016-03-28 12:13 msv Note Added: 0052063
2016-03-28 12:13 msv Assigned To msv => bugmaster
2016-03-28 12:13 msv Status resolved => reviewed
2016-03-28 15:04 apv Assigned To bugmaster => apv
2016-03-28 15:28 git Note Added: 0052073
2016-03-28 15:29 apv Note Added: 0052074
2016-03-29 12:03 apv Note Added: 0052101
2016-03-29 12:03 apv Assigned To apv => aml
2016-03-29 12:03 apv Status reviewed => assigned
2016-03-29 12:04 apv Note Added: 0052102
2016-03-29 12:23 apv Note Edited: 0052101
2016-03-29 12:23 apv Note Edited: 0052102
2016-03-30 09:55 git Note Added: 0052151
2016-03-30 11:24 aml Note Added: 0052159
2016-03-30 11:24 aml Assigned To aml => apv
2016-03-30 11:24 aml Status assigned => feedback
2016-03-30 12:04 msv Note Added: 0052166
2016-03-30 12:14 aml Note Added: 0052169
2016-03-30 14:45 aml Note Edited: 0052169
2016-03-30 15:54 msv Status feedback => reviewed
2016-03-31 16:02 apv Note Added: 0052243
2016-03-31 16:02 apv Assigned To apv => aml
2016-03-31 16:02 apv Status reviewed => assigned
2016-03-31 16:03 apv Note Added: 0052244
2016-04-01 13:15 git Note Added: 0052287
2016-04-01 14:44 git Note Added: 0052290
2016-04-01 14:46 aml File Added: FaultyFace.png
2016-04-01 14:54 aml Note Added: 0052291
2016-04-01 14:54 aml Assigned To aml => msv
2016-04-01 14:54 aml Status assigned => resolved
2016-04-01 14:55 aml Note Edited: 0052291
2016-04-01 19:17 msv Note Added: 0052307
2016-04-01 19:17 msv Assigned To msv => bugmaster
2016-04-01 19:17 msv Status resolved => reviewed
2016-04-04 11:27 apv Assigned To bugmaster => apv
2016-04-05 12:27 msv Priority normal => high
2016-04-05 13:28 apv Test case number => Not needed
2016-04-05 14:25 apv Note Added: 0052396
2016-04-05 14:25 apv Assigned To apv => bugmaster
2016-04-05 14:25 apv Status reviewed => tested
2016-04-06 09:26 msv Note Added: 0052413
2016-04-06 09:26 msv Assigned To bugmaster => aml
2016-04-06 09:26 msv Status tested => feedback
2016-04-06 09:30 aml File Added: bug27117.brep
2016-04-06 09:34 git Note Added: 0052414
2016-04-06 09:35 aml Assigned To aml => isn
2016-04-06 09:35 aml Assigned To isn => msv
2016-04-06 09:35 aml Note Added: 0052415
2016-04-06 09:46 git Note Added: 0052416
2016-04-06 09:50 msv Note Added: 0052417
2016-04-06 09:50 msv Assigned To msv => bugmaster
2016-04-06 11:18 bugmaster Assigned To bugmaster => apv
2016-04-06 11:21 apv Test case number Not needed => bugs modalg_6 bug27117
2016-04-06 12:21 apv Note Added: 0052426
2016-04-06 12:21 apv Assigned To apv => bugmaster
2016-04-06 12:21 apv Status feedback => tested
2016-04-08 11:55 bugmaster Changeset attached => occt master 58e14d59
2016-04-08 11:55 bugmaster Status tested => verified
2016-04-08 11:55 bugmaster Resolution open => fixed
2016-04-17 13:40 git Note Added: 0052898
2016-04-20 11:33 git Note Added: 0053327
2016-04-20 11:34 git Note Added: 0053339
2016-04-20 11:34 git Note Added: 0053346
2016-12-09 16:33 aiv Status verified => closed
2016-12-09 16:37 aiv Fixed in Version => 7.1.0