Use precision depending on radii of participating circles.
const Bnd_Range aRange(theUt21, theUt22);
Bnd_Range aProjRng1;
+ // Precision of the calculation depends on circles radii
+ const Standard_Real aPrecision = Max(Epsilon(myC[0]->Circle().Radius()), Epsilon(myC[1]->Circle().Radius()));
+
// Project arc of the 1st circle between points theUt11 and theUt12 to the
// 2nd circle. It is necessary to chose correct arc from two possible ones.
aMinSqD = Min(aMinSqD, ExtPCir.SquareDistance(anExtID));
}
- if (aMinSqD <= aMinSquareDist + (1. + aMinSqD) * Epsilon(1. + aMinSqD))
+ if (aMinSqD <= aMinSquareDist + (1. + aMinSqD) * aPrecision)
{
ClearSolutions();
mySqDist.Append(aMinSqD);
imin = k;
}
}
- if (aDmin <= aMinSquareDist + (1. + aDmin) * Epsilon(1. + aDmin))
+ if (aDmin <= aMinSquareDist + (1. + aDmin) * aPrecision)
{
if (imin == 0)
{
+++ /dev/null
-puts "================================================="
-puts "0032874: IsParallel() method of Extrema_ExtCC does not give same results in OCC 7.6.0 vs OCC 7.5.0"
-puts "================================================="
-puts ""
-
-set distExpected 10
-circle c1 0 0 0 100
-circle c2 0 0 0 100+$distExpected
-
-set nbSteps 72
-for {set i 1} {$i < $nbSteps} {incr i} {
- trim cc1 c1 0 2.*pi/$nbSteps*$i
- trim cc2 c2 0 2.*pi/$nbSteps*$i
-
- set extr [extrema cc1 cc2]
- if {[regexp {Infinite number of extremas, distance = ([-0-9.+eE]+)} $extr full dist]} {
- if {[expr abs($dist - $distExpected)] < 1.e-7} {
- puts "OK"
- } else {
- puts "Error: wrong distance $dist instead of $distExpected expected"
- }
- } else {
- puts "Error: non-parallel curves"
- }
-}
--- /dev/null
+puts "================================================="
+puts "0032874: IsParallel() method of Extrema_ExtCC does not give same results in OCC 7.6.0 vs OCC 7.5.0"
+puts "================================================="
+puts ""
+
+set distExpected 10
+circle c1 0 0 0 100
+circle c2 0 0 0 100+$distExpected
+
+set nbSteps 72
+for {set i 1} {$i < $nbSteps} {incr i} {
+ trim cc1 c1 0 2.*pi/$nbSteps*$i
+ trim cc2 c2 0 2.*pi/$nbSteps*$i
+
+ set extr [extrema cc1 cc2]
+ if {[regexp {Infinite number of extremas, distance = ([-0-9.+eE]+)} $extr full dist]} {
+ if {[expr abs($dist - $distExpected)] < 1.e-7} {
+ puts "OK"
+ } else {
+ puts "Error: wrong distance $dist instead of $distExpected expected"
+ }
+ } else {
+ puts "Error: non-parallel curves"
+ }
+}
--- /dev/null
+puts "================================================="
+puts "0032874: IsParallel() method of Extrema_ExtCC does not give same results in OCC 7.6.0 vs OCC 7.5.0"
+puts "================================================="
+puts ""
+
+set distExpected 3.5
+circle c1 0 0 0 100
+circle c2 0 0 0 100+$distExpected
+
+set start {0.0 0.5*pi pi 1.5*pi 2.0*pi}
+set delta {pi/4.0 pi/3.0 pi/2.0 0.55*pi 0.99*pi pi 1.1*pi}
+
+foreach f $start {
+ foreach d $delta {
+ trim cc1 c1 $f $f+$d
+ trim cc2 c2 $f $f+$d
+
+ set extr [extrema cc1 cc2]
+ if {[regexp {Infinite number of extremas, distance = ([-0-9.+eE]+)} $extr full dist]} {
+ if {[expr abs($dist - $distExpected)] < 1.e-7} {
+ puts "OK"
+ } else {
+ puts "Error: wrong distance $dist instead of $distExpected expected"
+ }
+ } else {
+ puts "Error: non-parallel curves"
+ }
+ }
+}
--- /dev/null
+puts "================================================="
+puts "0032874: IsParallel() method of Extrema_ExtCC does not give same results in OCC 7.6.0 vs OCC 7.5.0"
+puts "================================================="
+puts ""
+
+set radius 0.001
+set distExpected 0.00001
+circle c1 0 0 0 $radius
+circle c2 0 0 0 $radius+$distExpected
+
+set start {0.0 0.5*pi pi 1.5*pi 2.0*pi}
+set delta {pi/4.0 pi/3.0 pi/2.0 0.55*pi 0.99*pi pi 1.1*pi}
+
+foreach f $start {
+ foreach d $delta {
+ trim cc1 c1 $f $f+$d
+ trim cc2 c2 $f $f+$d
+
+ set extr [extrema cc1 cc2]
+ if {[regexp {Infinite number of extremas, distance = ([-0-9.+eE]+)} $extr full dist]} {
+ if {[expr abs($dist - $distExpected)] < 1.e-7} {
+ puts "OK"
+ } else {
+ puts "Error: wrong distance $dist instead of $distExpected expected"
+ }
+ } else {
+ puts "Error: non-parallel curves"
+ }
+ }
+}
--- /dev/null
+puts "================================================="
+puts "0032874: IsParallel() method of Extrema_ExtCC does not give same results in OCC 7.6.0 vs OCC 7.5.0"
+puts "================================================="
+puts ""
+
+set radius 0.001
+set distExpected 1000.0
+circle c1 0 0 0 $radius
+circle c2 0 0 0 $radius+$distExpected
+
+set start {0.0 0.5*pi pi 1.5*pi 2.0*pi}
+set delta {pi/4.0 pi/3.0 pi/2.0 0.55*pi 0.99*pi pi 1.1*pi}
+
+foreach f $start {
+ foreach d $delta {
+ trim cc1 c1 $f $f+$d
+ trim cc2 c2 $f $f+$d
+
+ set extr [extrema cc1 cc2]
+ if {[regexp {Infinite number of extremas, distance = ([-0-9.+eE]+)} $extr full dist]} {
+ if {[expr abs($dist - $distExpected)] < 1.e-7} {
+ puts "OK"
+ } else {
+ puts "Error: wrong distance $dist instead of $distExpected expected"
+ }
+ } else {
+ puts "Error: non-parallel curves"
+ }
+ }
+}
--- /dev/null
+puts "================================================="
+puts "0032874: IsParallel() method of Extrema_ExtCC does not give same results in OCC 7.6.0 vs OCC 7.5.0"
+puts "================================================="
+puts ""
+
+set radius 1000.0
+set distExpected 1.e-5
+circle c1 0 0 0 $radius
+circle c2 0 0 0 $radius-$distExpected
+
+set start {0.0 0.5*pi pi 1.5*pi 2.0*pi}
+set delta {pi/4.0 pi/3.0 pi/2.0 0.55*pi 0.99*pi pi 1.1*pi}
+
+foreach f $start {
+ foreach d $delta {
+ trim cc1 c1 $f $f+$d
+ trim cc2 c2 $f $f+$d
+
+ set extr [extrema cc1 cc2]
+ if {[regexp {Infinite number of extremas, distance = ([-0-9.+eE]+)} $extr full dist]} {
+ if {[expr abs($dist - $distExpected)] < 1.e-7} {
+ puts "OK"
+ } else {
+ puts "Error: wrong distance $dist instead of $distExpected expected"
+ }
+ } else {
+ puts "Error: non-parallel curves"
+ }
+ }
+}