Archived issue #0027024
Invalid result of fuse in test case bugs modalg_1 buc60462_2
Description
The result of fuse contains 2 solids but must contain 1 solid.
Steps to reproduce
test bugs modalg_1 buc60462_2
Public activity
3 archived notes
Participants are labeled by their role within this record.
After integration the fix for issue #26132, test case bugs modalg_1 buc60462_2 changed its behavior. Now it throws an exception.
The main reason of the exception is creation not same-ranged edge by Boolean operation.
The algorithm cannot find interference between the seam-edge of one face and the edge of another face. Try the following script for clarifying:
Draw[]> restore [locate_data_file buc60462c.brep] a
Draw[]> restore [locate_data_file buc60462d.brep] b
Draw[]> explode a f
Draw[]> explode b e
Draw[]> ax
Draw[]> donly a_9 b_46
Draw[]> toler b_46
#0.0044857456383894396
Draw[]> distmini dd a_9 b_46
#0.00167963807727123 ==> b_46 "intersects" the seam of a_9
Draw[]> bclearobj
Draw[]> bcleartool
Draw[]> baddobj a
Draw[]> baddtool b
Draw[]> bfillds
Draw[]> bopds
Draw[]> bopindex b_46
# Index: 158
Draw[]> bopsp
#Edge 158: z158_158 ==> b_46 were not split.
Later, 2D-curve (on a_9 face) with range [0, 0.0336066450154111] will be added in z158. At that, 3D-curve of z158 already has range [0, 1]. As result, z158 will become invalid.
In short, edge b_46 is coincided with face a_9. Therefore, in IntTools_EdgeFace::Perform() method, full range of b_46 edge is used as common-block between b_46 and a_9 (range is [0, 1]). And edge b_46 is not split. Before fix (on the current MASTER) b_46 edge was split by the point found by IntTools_BeanFaceIntersector and result seamed to be valid.
The good idea of the fix is that the reason of failing Edge-Edge intersection (between b_46 and seam of a_9) algorithm must be clarified. If edge-edge intersection find intersection point then myRange in IntTools_EdgeFace::Perform() method will contain correct range for checking coincidence.
The main reason of the exception is creation not same-ranged edge by Boolean operation.
The algorithm cannot find interference between the seam-edge of one face and the edge of another face. Try the following script for clarifying:
Draw[]> restore [locate_data_file buc60462c.brep] a
Draw[]> restore [locate_data_file buc60462d.brep] b
Draw[]> explode a f
Draw[]> explode b e
Draw[]> ax
Draw[]> donly a_9 b_46
Draw[]> toler b_46
#0.0044857456383894396
Draw[]> distmini dd a_9 b_46
#0.00167963807727123 ==> b_46 "intersects" the seam of a_9
Draw[]> bclearobj
Draw[]> bcleartool
Draw[]> baddobj a
Draw[]> baddtool b
Draw[]> bfillds
Draw[]> bopds
Draw[]> bopindex b_46
# Index: 158
Draw[]> bopsp
#Edge 158: z158_158 ==> b_46 were not split.
Later, 2D-curve (on a_9 face) with range [0, 0.0336066450154111] will be added in z158. At that, 3D-curve of z158 already has range [0, 1]. As result, z158 will become invalid.
In short, edge b_46 is coincided with face a_9. Therefore, in IntTools_EdgeFace::Perform() method, full range of b_46 edge is used as common-block between b_46 and a_9 (range is [0, 1]). And edge b_46 is not split. Before fix (on the current MASTER) b_46 edge was split by the point found by IntTools_BeanFaceIntersector and result seamed to be valid.
The good idea of the fix is that the reason of failing Edge-Edge intersection (between b_46 and seam of a_9) algorithm must be clarified. If edge-edge intersection find intersection point then myRange in IntTools_EdgeFace::Perform() method will contain correct range for checking coincidence.
In the current version there is no exception. The test buc60462_1 is OK. The test buc60462_2 reports error condition that the result of fuse contains 2 solids instead of 1.
This test case always generated bad result.
So, the current state of the test result cannot be considered as regression.
Removing word 'regression' from the title.
This test case always generated bad result.
So, the current state of the test result cannot be considered as regression.
Removing word 'regression' from the title.
I propose to close this bug.