Newton Dynamics  4.00
dBezierSpline.h
1 /* Copyright (c) <2003-2019> <Newton Game Dynamics>
2 *
3 * This software is provided 'as-is', without any express or implied
4 * warranty. In no event will the authors be held liable for any damages
5 * arising from the use of this software.
6 *
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely
10 */
11 
12 #include "dCoreStdafx.h"
13 #include "dArray.h"
14 #include "dClassAlloc.h"
15 
16 #ifndef __D_BEZIER_SPLINE_H__
17 #define __D_BEZIER_SPLINE_H__
18 
19 class dBezierSpline : public dClassAlloc
20 {
21  public:
22 
23  // empty spline
24  D_CORE_API dBezierSpline ();
25  D_CORE_API dBezierSpline (const dBezierSpline& src);
26 
27  // create from knot vector and control points
28  D_CORE_API virtual ~dBezierSpline ();
29 
30  D_CORE_API dBezierSpline& operator = (const dBezierSpline &copy) ;
31 
32  D_CORE_API dInt32 GetDegree () const;
33 
34  D_CORE_API dBigVector CurvePoint (dFloat64 u) const;
35  D_CORE_API dBigVector CurveDerivative (dFloat64 u, dInt32 index = 1) const;
36  D_CORE_API dInt32 CurveAllDerivatives (dFloat64 u, dBigVector* const defivatives) const;
37 
38  D_CORE_API dFloat64 CalculateLength (dFloat64 tol) const;
39 
40  D_CORE_API void GlobalCubicInterpolation (dInt32 count, const dBigVector* const points, const dBigVector& firstTangent, const dBigVector& lastTangent);
41  D_CORE_API void CreateFromKnotVectorAndControlPoints (dInt32 degree, dInt32 knotCount, const dFloat64* const knotVector, const dBigVector* const controlPoints);
42 
43  D_CORE_API void InsertKnot (dFloat64 u);
44  D_CORE_API bool RemoveKnot (dFloat64 u, dFloat64 tol);
45 
46  D_CORE_API dInt32 GetControlPointCount() const;
47  D_CORE_API dArray<dBigVector>& GetControlPointArray();
48  D_CORE_API const dArray<dBigVector>& GetControlPointArray() const;
49 
50  D_CORE_API dBigVector GetControlPoint(dInt32 i) const;
51  D_CORE_API void SetControlPoint(dInt32 i, const dBigVector& point);
52 
53  D_CORE_API dInt32 GetKnotCount() const;
54  D_CORE_API dArray<dFloat64>& GetKnotArray();
55  D_CORE_API const dArray<dFloat64>& GetKnotArray() const;
56 
57  D_CORE_API dFloat64 GetKnot(dInt32 i) const;
58  D_CORE_API dFloat64 FindClosestKnot (dBigVector& closestPointOnCurve, const dBigVector& point, dInt32 subdivitionSteps = 2) const;
59 
60  private:
61  void Clear();
62  dInt32 GetSpan(dFloat64 u) const;
63 
64  dBigVector CurvePoint (dFloat64 u, dInt32 span) const;
65  void CreateCubicKnotVector(dInt32 count, const dBigVector* const points);
66  void CreateCubicControlPoints(dInt32 count, const dBigVector* const points, const dBigVector& firstTangent, const dBigVector& lastTangent);
67 
68  void BasicsFunctions (dFloat64 u, dInt32 span, dFloat64* const functionOut) const;
69  void BasicsFunctionsDerivatives (dFloat64 u, dInt32 span, dFloat64* const derivatyivesOut) const;
70 
71  dArray<dFloat64> m_knotVector;
72  dArray<dBigVector> m_controlPoints;
73 
74  dInt32 m_degree;
75  dInt32 m_knotsCount;
76  dInt32 m_controlPointsCount;
77 };
78 #endif
79 
dBezierSpline
Definition: dBezierSpline.h:20
dArray< dBigVector >
dClassAlloc
Base class for providing memory allocation for all other engine classes.
Definition: dClassAlloc.h:29
dBigVector
Definition: dVectorArmNeon.h:1521