Archived issue #0027221
Regression vs. 6.7.0: bcut fails without notice
Description
The problem is reported on http://dev.opencascade.org/index.php?q=node/1150
OCCT 6.7.1 and later (including current master) fails to make a cut of two solids without giving any error message (produced result is geometrically equivalent to original solid).
OCCT 6.7.1 and later (including current master) fails to make a cut of two solids without giving any error message (produced result is geometrically equivalent to original solid).
Steps to reproduce
Test case for this issue has been created in frame of the fix for issue #0027252.
pload MODELING
restore [locate_data_file Attachment 1 (BREP)] a
explode a
mkplane f a_2
prism p f -25 0 0
bcut result a_1 p
donly result a_2
checkprops result -v 56860.2 -s 72076
pload MODELING
restore [locate_data_file Attachment 1 (BREP)] a
explode a
mkplane f a_2
prism p f -25 0 0
bcut result a_1 p
donly result a_2
checkprops result -v 56860.2 -s 72076
Public activity
8 archived notes
Participants are labeled by their role within this record.
The newer versions of OCCT do not find intersection curve between a pair of faces (see script below). Without this intersection Boolean operation cannot work right.
restore Attachment 1 (BREP) a
explode a
mkplane f a_2
prism p f -25 0 0
explode a_1 f
explode p f
don a_1_7 p_3
bopcurves a_1_7 p_3
restore Attachment 1 (BREP) a
explode a
mkplane f a_2
prism p f -25 0 0
explode a_1 f
explode p f
don a_1_7 p_3
bopcurves a_1_7 p_3
Intersection curve is found. It is an ellipse (cylinder-plane intersection) and seems to be valid.
However, it is rejected by post-processing of Boolean algorithm in GeomInt_LineConstructor::TreatCircle(...) method.
Most likely, the reason is in putting incorrect vertexes (IntPatch_Points) to the intersection curve.
In OCCT 6.7.0 version the result seems to be valid. In OCCT 6.7.1 and higher (including current MASTER) result of "bopcurves" command is empty.
However, it is rejected by post-processing of Boolean algorithm in GeomInt_LineConstructor::TreatCircle(...) method.
Most likely, the reason is in putting incorrect vertexes (IntPatch_Points) to the intersection curve.
In OCCT 6.7.0 version the result seems to be valid. In OCCT 6.7.1 and higher (including current MASTER) result of "bopcurves" command is empty.
IntPatch_Points are found in IntPatch_ImpImpIntersection::Perform(...) (solrst.Perform(...)) as intersection point between surface (in this case, cylinder) domain and quadric (plane).
In fact, domain is 2d-representation of surface boundaries.
In other words, there are some points in surface boundary, which are in quadric with given tolerance (3.0e-7). However, the distance between it and intersection line (ellipse) is greater than tolerance. Therefore, this point is rejected.
Possible reason is that the distance between the point and the curve computes wrong (with big error - see issue #0027252). If it is not other reasons of described behavior are possible.
In fact, domain is 2d-representation of surface boundaries.
In other words, there are some points in surface boundary, which are in quadric with given tolerance (3.0e-7). However, the distance between it and intersection line (ellipse) is greater than tolerance. Therefore, this point is rejected.
Possible reason is that the distance between the point and the curve computes wrong (with big error - see issue #0027252). If it is not other reasons of described behavior are possible.
Dear Mikhail,
Fix in branch CR27252 solves this problem completely. Please review.
Fix in branch CR27252 solves this problem completely. Please review.
Dear Commenter 1, please check and close this bug after resolving #0027252.
Testing cases:
http://occt-tests/CR27252_4-CR27252prod-OCCT/Debian70-64/bugs/modalg_6/bug27221.html
http://occt-tests/CR27252_4-CR27252prod-OCCT/Windows-64-VC10/bugs/modalg_6/bug27221.html
bugs modalg_6 bug27221: OK
http://occt-tests/CR27252_4-CR27252prod-OCCT/Debian70-64/bugs/modalg_6/bug27221.html
http://occt-tests/CR27252_4-CR27252prod-OCCT/Windows-64-VC10/bugs/modalg_6/bug27221.html
bugs modalg_6 bug27221: OK
TESTED.
Related records