mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-09-18 14:27:39 +03:00
0024682: Move out B-spline cache from curves and surfaces to dedicated classes BSplCLib_Cache and BSplSLib_Cache
1. B-spline cache was moved into separated classes: BSplCLib_Cache for 2D and 3D curves and BSplSLib_Cache for surfaces. 2. The cache is used now in corresponding adaptor classes (Geom2dAdaptor_Curve, GeomAdaptor_Curve and GeomAdaptor_Surface) when the curve or surface is a B-spline. 3. Algorithms were changed to use adaptors for B-spline calculations instead of curves or surfaces. 4. Precised calculation of derivatives of surface of revolution is implemented for the points of surface placed on the axis of revolution (Geom_SurfaceOfRevolution.cxx) 5. Small modifications are made to adjust algorithms to new behavior of B-spline calculation. 6. Test cases were modified according to the modern behavior. 7. Changes in BOPAlgo_WireSplitter, BOPTools_AlgoTools, BRepLib_CheckCurveOnSurface and ShapeAnalysis_Wire to use adaptors instead of geometric entities 8. Allow Geom2dAdaptor and GeomAdaptor in case of offset curve to use corresponding adaptor for basis curve Modification of test-cases according to the new behavior.
This commit is contained in:
@@ -146,6 +146,34 @@ void Extrema_GExtPC::Perform(const ThePoint& P)
|
||||
IntExtIsDone = IntExtIsDone || mydone;
|
||||
}
|
||||
mydone = IntExtIsDone;
|
||||
|
||||
// Additional checking if the point is on the first or last point of the curve and does not added yet
|
||||
if (mydist1 < Precision::SquareConfusion() || mydist2 < Precision::SquareConfusion())
|
||||
{
|
||||
Standard_Boolean isFirstAdded = Standard_False;
|
||||
Standard_Boolean isLastAdded = Standard_False;
|
||||
Standard_Integer aNbPoints = mypoint.Length();
|
||||
for (i = 1; i <= aNbPoints; i++)
|
||||
{
|
||||
U = mypoint.Value(i).Parameter();
|
||||
if (Abs(U - myuinf) < mytolu)
|
||||
isFirstAdded = Standard_True;
|
||||
else if (Abs(myusup - U) < mytolu)
|
||||
isLastAdded = Standard_True;
|
||||
}
|
||||
if (!isFirstAdded && mydist1 < Precision::SquareConfusion())
|
||||
{
|
||||
mySqDist.Prepend(mydist1);
|
||||
myismin.Prepend(Standard_True);
|
||||
mypoint.Prepend(ThePOnC(myuinf, Pf));
|
||||
}
|
||||
if (!isLastAdded && mydist2 < Precision::SquareConfusion())
|
||||
{
|
||||
mySqDist.Append(mydist2);
|
||||
myismin.Append(Standard_True);
|
||||
mypoint.Append(ThePOnC(myusup, Pl));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user