Archived issue #0026740
Modeling Algorithms - Incorrect result of blend operation in "blend simple X4" test case
Description
Theoretically, curve l must tangent line AB in point C (see Attachment 1 (PNG) attached picture). Therefore, it is necessary for resulting shape to have a vertex in point C in order to be valid. This vertex is absence.
More over, if we insert this vertex in the place C then the part of the current result from A to C must be absence (i.e. the filet must be made for red highlighted edge in Attachment 2 (PNG) file only).
More over, if we insert this vertex in the place C then the part of the current result from A to C must be absence (i.e. the filet must be made for red highlighted edge in Attachment 2 (PNG) file only).
Steps to reproduce
test blend simple X4
Public activity
3 archived notes
Participants are labeled by their role within this record.
A few words about validity the result in terms of BRepCheck algorithm.
Draw[]> explode result f
Draw[]> explode result_3 e
Draw[]> xdistef result_3_5 result_3
#Max distance = 0.0025028007416767954
Edge rr_3_5 is not valid in terms of same-parameter (it is valid in terms of BRepCheck algorithm because it has big tolerance). I.e. its 2D- and 3D-curve are not matched each other. As result, 2D-curve of result_3_5 does not tangent rr_3_2 edge (despite it must do it).
Consequently, the validity of the result is pure chance.
I tried to make more precise filet-edge with change some parameters of IntWalk_PWalking algorithm (function ChFi3d_ComputeCurves(...), line "IntWalk_PWalking IntKK(S1,S2,tol3d,tol3d,fleche,Step)"). As result, I obtained an edge with maximal distance between 2D- and 3D-curve approximately 1.0e-13. After that, BRepCheck algorithm returns "BRepCheck_SelfIntersectingWire". The main reason is the vertex is absence (see bug description).
Draw[]> explode result f
Draw[]> explode result_3 e
Draw[]> xdistef result_3_5 result_3
#Max distance = 0.0025028007416767954
Edge rr_3_5 is not valid in terms of same-parameter (it is valid in terms of BRepCheck algorithm because it has big tolerance). I.e. its 2D- and 3D-curve are not matched each other. As result, 2D-curve of result_3_5 does not tangent rr_3_2 edge (despite it must do it).
Consequently, the validity of the result is pure chance.
I tried to make more precise filet-edge with change some parameters of IntWalk_PWalking algorithm (function ChFi3d_ComputeCurves(...), line "IntWalk_PWalking IntKK(S1,S2,tol3d,tol3d,fleche,Step)"). As result, I obtained an edge with maximal distance between 2D- and 3D-curve approximately 1.0e-13. After that, BRepCheck algorithm returns "BRepCheck_SelfIntersectingWire". The main reason is the vertex is absence (see bug description).
Other remarks.
1. Firstly, the intersection edge (result_3_5 in previous message) is found as result of GeomInt_IntSS algorithm between two cylinders. It returns two intersection line, which are connected in point C. However, ChFi3d_Builder does not apply it to make fillet. Therefore, it rebuilds intersection line with IntWalk_PWalking algorithm and obtains single line as result.
2. If we insert this vertex in the place C then we will obtain filleted face between C and B only (see Attachment 1 (PNG) and bug description). For obtaining result shown in the picture Attachment 1 (PNG) we should add another edge to the arguments of "blend" DRAW-command. On the current MASTER this operation leads to exception.
1. Firstly, the intersection edge (result_3_5 in previous message) is found as result of GeomInt_IntSS algorithm between two cylinders. It returns two intersection line, which are connected in point C. However, ChFi3d_Builder does not apply it to make fillet. Therefore, it rebuilds intersection line with IntWalk_PWalking algorithm and obtains single line as result.
2. If we insert this vertex in the place C then we will obtain filleted face between C and B only (see Attachment 1 (PNG) and bug description). For obtaining result shown in the picture Attachment 1 (PNG) we should add another edge to the arguments of "blend" DRAW-command. On the current MASTER this operation leads to exception.
I have checked described situation on OCCT 6.7.0 and have obtained as same as result.
Related records
- #0026675 · related to · closedEliminate normalization of coordinates in ApproxInt package
- #0026907 · related to · assignedChFi3d_Builder algorithm uses old Boolean operations: wrong processing of shapes with seam and degenerated edges
- #0028575 · related to · assignedRemoval of the old Boolean Operations algorithm - BRepAlgo_BooleanOperation
- #0026655 · related to · newChFi3d_Builder algorithm fails to build fillets if some input edges connect with seam edges