const Standard_Integer NbPoints)
{
for (Standard_Integer i=1; i<=NbPoints; i++) {
- if (Points[i].Value().IsEqual(P, Precision::Confusion())) {
+ if (Points[i-1].Value().IsEqual(P, Precision::Confusion())) {
return Standard_False;
}
}
Dist2 = P.SquareDistance(E);
}
if (IsOriginalPnt(E, myPoint, myNbExt)) {
- myPoint[++myNbExt] = Extrema_POnSurf(U,V,E);
+ myPoint[myNbExt] = Extrema_POnSurf(U,V,E);
mySqDist[myNbExt] = Dist2;
+ myNbExt++;
}
}
}
Dist2 = P.SquareDistance(E);
}
if (IsOriginalPnt(E, myPoint, myNbExt)) {
- myPoint[++myNbExt] = Extrema_POnSurf(U,V,E);
+ myPoint[myNbExt] = Extrema_POnSurf(U,V,E);
mySqDist[myNbExt] = Dist2;
-
+ myNbExt++;
}
}
}
if (!IsDone()) { StdFail_NotDone::Raise(); }
if ((N < 1) || (N > myNbExt)) { Standard_OutOfRange::Raise(); }
if (myIsAnalyticallyComputable)
- return mySqDist[N];
+ return mySqDist[N-1];
else
return myExtPS.SquareDistance(N);
}
if (!IsDone()) { StdFail_NotDone::Raise(); }
if ((N < 1) || (N > myNbExt)) { Standard_OutOfRange::Raise(); }
if (myIsAnalyticallyComputable)
- return myPoint[N];
+ return myPoint[N-1];
else
return myExtPS.Point(N);
}
--- /dev/null
+puts "================"
+puts "CR24081"
+puts "================"
+puts ""
+#######################################################################
+# Memory corruption when projecting point on surface of revolution
+#######################################################################
+
+ellipse e 10 0 0 0 -1 0 0 0 1 5 2
+revsurf s e 0 0 0 0 0 1
+proj s 7.9 0 0
--- /dev/null
+puts "================"
+puts "CR24081"
+puts "================"
+puts ""
+#######################################################################
+# Memory corruption when projecting point on surface of revolution
+#######################################################################
+
+ellipse e 2.1 0 0 0 -1 0 0 0 1 5 2
+revsurf s e 0 0 0 0 0 1
+proj s 0.01 0 0