1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

0028493: [Regression vs 7.0.0] Intersection algorithm produces curve with loop

1. New testgrid "lowalgos/intss" has been created. It will contain all test cases on geometrical intersection of two surfaces ("intersect" DRAW-command) and two faces ("bopcurves" DRAW-command).

2. New test case for the issue  has been created because the problem is not reproduced on MASTER.

3. Test case (lowalgos/intss/bug24472) for the issue  has been modified in order to check loops of the resulting intersection curves.
This commit is contained in:
nbv 2018-10-26 14:06:28 +03:00 committed by bugmaster
parent 100be67aa4
commit a6ebe9fc7c
198 changed files with 74 additions and 1 deletions

@ -2,4 +2,5 @@
002 bnd
003 extcs
004 extcc
005 2dgcc
005 2dgcc
006 intss

@ -0,0 +1,30 @@
# Checks whether theCurve has a loop/bend
# Use: CheckLoops curve CosMaxAngle [theNbPoints]}
# theNbPoints sets the interval of discretization;
# theCosMaxAngle sets the maximal rotation angle between two adjacent segments. This value must be equal to the cosine of this angle.
help CheckLoops {curve CosMaxAngle theNbPoints }
proc CheckLoops {theCurve theCosMaxAngle {theNbPoints 1000.0}} {
upvar #0 $theCurve aCurve
bounds aCurve U1 U2
set delta [dval (U2-U1)/$theNbPoints]
cvalue aCurve [dval U1] xp yp zp dx1 dy1 dz1
for {set p [dval U1]} {$p <= [dval U2]} {set p [expr $p + $delta]} {
cvalue aCurve $p xp yp zp dx2 dy2 dz2
#Check if the angle between the vectors {dx1 dy1 dz1} and {dx2 dy2 dz2} is less than 30deg.
set nv1 [ dval dx1*dx1+dy1*dy1+dz1*dz1 ]
set nv2 [ dval dx2*dx2+dy2*dy2+dz2*dz2 ]
set dp [ dval dx1*dx2+dy2*dy2+dz1*dz2 ]
if {$dp < [ expr $theCosMaxAngle * sqrt($nv1 * $nv2) ] } {
puts "Error: The curve aCurve is possible to have a bend at parameter $p. Please check carefully"
}
dset dx1 dx2
dset dy1 dy2
dset dz1 dz2
}
}

@ -32,6 +32,9 @@ foreach c [directory ii12*] {
puts "Error: Wrong curve's range!"
}
# cos(~75.5deg)
CheckLoops $c 0.25
xdistcs $c s1 U1 U2 10 $MaxToler
xdistcs $c s2 U1 U2 10 $MaxToler
}
@ -58,6 +61,9 @@ foreach c [directory ii13*] {
puts "Error: Wrong curve's range!"
}
# cos(~75.5deg)
CheckLoops $c 0.25
xdistcs $c s1 U1 U2 10 $MaxToler
xdistcs $c s2 U1 U2 10 $MaxToler
}

Some files were not shown because too many files have changed in this diff Show More