1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00

0025929: Make Approx_ComputeLine algorithm adaptive

Adaptive partition algorithm of WLine is implemented and used in ApproxInt_Approx.gxx file.
Refactoring of ApproxInt_Approx class.
Test cases are updated to the new behaviour.

Filtering algorithm improved.
This commit is contained in:
aml
2015-11-10 09:57:03 +03:00
committed by bugmaster
parent 600f8c7f47
commit f44aa19760
6 changed files with 1688 additions and 1074 deletions

View File

@@ -21,6 +21,7 @@
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <NCollection_Vector.hxx>
#include <GeomInt_TheComputeLineOfWLApprox.hxx>
#include <GeomInt_TheComputeLineBezierOfWLApprox.hxx>
#include <Approx_MCurvesToBSpCurve.hxx>
@@ -48,6 +49,22 @@ class GeomInt_TheComputeLineBezierOfWLApprox;
class GeomInt_MyGradientOfTheComputeLineBezierOfWLApprox;
class AppParCurves_MultiBSpCurve;
struct Approx_Data
{
Approx_Data()
{
myMinFactorXYZ = 0.0;
myMinFactorUV = 0.0;
}
Standard_Boolean myBezierApprox;
Standard_Real Xo, Ax, Yo, Ay, Zo, Az,
U1o, A1u, V1o, A1v, U2o, A2u, V2o, A2v;
Standard_Boolean ApproxXYZ, ApproxU1V1, ApproxU2V2;
Standard_Integer indicemin, indicemax, nbpntmax;
Approx_ParametrizationType parametrization;
Standard_Real myMinFactorXYZ, myMinFactorUV;
};
class GeomInt_WLApprox
@@ -100,12 +117,31 @@ private:
Standard_EXPORT void UpdateTolReached();
//! Fill data structure for intersection approximation.
Standard_EXPORT void fillData(const Handle(IntPatch_WLine)& theLine,
const Standard_Boolean theApproxXYZ,
const Standard_Boolean theApproxU1V1,
const Standard_Boolean theApproxU2V2);
//! Prepare data structure for further computations.
Standard_EXPORT void prepareDS(const Standard_Boolean theApproxXYZ,
const Standard_Boolean theApproxU1V1,
const Standard_Boolean theApproxU2V2,
const Standard_Integer indicemin,
const Standard_Integer indicemax);
//! Build knot sequence.
Standard_EXPORT void buildKnots(const Handle(IntPatch_WLine)& theline,
const Standard_Address thePtrSVSurf);
//! Build curve.
Standard_EXPORT void buildCurve(const Handle(IntPatch_WLine)& theline,
const Standard_Address thePtrSVSurf);
GeomInt_TheComputeLineOfWLApprox myComputeLine;
GeomInt_TheComputeLineBezierOfWLApprox myComputeLineBezier;
Approx_MCurvesToBSpCurve myBezToBSpl;
Standard_Boolean myTolReached;
Standard_Boolean myApproxBez;
Standard_Boolean myWithTangency;
Standard_Real myTol3d;
Standard_Real myTol2d;
@@ -114,11 +150,11 @@ private:
Standard_Integer myDegMax;
Standard_Integer myNbPntMax;
Standard_Integer myNbIterMax;
Standard_Real myMinFactorXYZ;
Standard_Real myMinFactorUV;
Standard_Real myTolReached3d;
Standard_Real myTolReached2d;
Approx_Data myData;
Standard_Real myUVRes1, myUVRes2;
NCollection_Vector<Standard_Integer> myKnots;
};