1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-03 17:56:21 +03:00
isn 58e14d59e7 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.
2016-04-08 11:50:38 +03:00

49 lines
1.6 KiB
Plaintext

# test script on make volume operation
# cylinder plane unstable
# planar face
plane pln_f1 0 -875 -1.4432899320127035e-014 0 1 1.1102230246251565e-016
erase pln_f1
mkface f1 pln_f1 -1000000 1000000 -1000000 1000000
# planar face
plane pln_f2 1084.71007164 -980 -2128.6796868400002 1.110223024625157e-016 -1 1.1102230246251563e-016
erase pln_f2
mkface f2 pln_f2 -1000000 1000000 -1000000 1000000
# planar face
plane pln_f3 -308.43155740558768 -800 -2407.1041518310276 0.80901699437494767 9.2444637330587307e-033 -0.5877852522924728
erase pln_f3
mkface f3 pln_f3 -1000000 1000000 -1000000 1000000
# planar face
plane pln_f4 -381.4805392043022 -800 -2409.117597419774 -0.15639998811787861 -1.5422229525403152e-032 -0.98769380058635958
erase pln_f4
mkface f4 pln_f4 -1000000 1000000 -1000000 1000000
# cylindrical face
cylinder cyl_f5 0 0 -1.0103029524088925e-013 0 1 1.1102230246251565e-016 2440
erase cyl_f5
mkface f5 cyl_f5 0 6.2831853071795862 -1000000 1000000
# planar face
plane pln_f6 -309.45754782652125 -800 -2369.8806246344966 0.98769380058635958 -4.4408920985006262e-016 -0.15639998811787881
erase pln_f6
mkface f6 pln_f6 -1000000 1000000 -1000000 1000000
# planar face
plane pln_f7 -330.11602392243287 -800 -2299.7847255135234 -0.58778525229247269 -1.6653345369377348e-016 -0.80901699437494767
erase pln_f7
mkface f7 pln_f7 -1000000 1000000 -1000000 1000000
# cylindrical face
cylinder cyl_f8 0 0 -2.0206059048177849e-013 0 -1 1.1102230246251565e-016 2340
erase cyl_f8
mkface f8 cyl_f8 0 6.2831853071795862 -1000000 1000000
# make volume operation
mkvolume result f1 f2 f3 f4 f5 f6 f7 f8
checkprops result -s 4.46244e+007