mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +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:
@@ -679,20 +679,25 @@ void IntCurve_IntPolyPolyGen::Perform( const TheCurve& C1
|
||||
aPoly1 = new IntCurve_ThePolygon2d(C1,nbsamplesOnC1,D1,Tol),
|
||||
aPoly2 = new IntCurve_ThePolygon2d(C2,nbsamplesOnC2,D2,Tol);
|
||||
|
||||
if( (aPoly1->DeflectionOverEstimation() > TolConf) ||
|
||||
if( (aPoly1->DeflectionOverEstimation() > TolConf) &&
|
||||
(aPoly2->DeflectionOverEstimation() > TolConf))
|
||||
{
|
||||
const Standard_Real aDeflectionSum =
|
||||
Max(aPoly1->DeflectionOverEstimation(), TolConf) +
|
||||
Max(aPoly2->DeflectionOverEstimation(), TolConf);
|
||||
|
||||
aPoly2->SetDeflectionOverEstimation(aDeflectionSum);
|
||||
aPoly1->SetDeflectionOverEstimation(aDeflectionSum);
|
||||
|
||||
const Bnd_Box2d aB1 = aPoly1->Bounding(), aB2 = aPoly2->Bounding();
|
||||
|
||||
aPoly1->ComputeWithBox(C1, aB2);
|
||||
aPoly2->ComputeWithBox(C2, aB1);
|
||||
if (nbsamplesOnC2 > nbsamplesOnC1)
|
||||
{
|
||||
aPoly2->ComputeWithBox(C2, aPoly1->Bounding());
|
||||
aPoly1->SetDeflectionOverEstimation(aDeflectionSum);
|
||||
aPoly1->ComputeWithBox(C1, aPoly2->Bounding());
|
||||
}
|
||||
else
|
||||
{
|
||||
aPoly1->ComputeWithBox(C1, aPoly2->Bounding());
|
||||
aPoly2->SetDeflectionOverEstimation(aDeflectionSum);
|
||||
aPoly2->ComputeWithBox(C2, aPoly1->Bounding());
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user