00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _CIvfSpline3d_h_
00026 #define _CIvfSpline3d_h_
00027
00028 #include <ivf/ivfconfig.h>
00029
00030 #include <ivfmath/IvfMathBase.h>
00031 #include <ivfmath/IvfSplineSegment3d.h>
00032
00033 IvfSmartPointer(CIvfSpline3d);
00034
00043 class IVFMATH_API CIvfSpline3d : public CIvfMathBase {
00044 private:
00045 int m_size;
00046 std::vector<CIvfSplineSegment3d*> m_segments;
00047 std::vector<CIvfVec3d*> m_points;
00048
00049 std::vector<double> m_tau;
00050 std::vector<double> m_gamma;
00051 std::vector<double> m_beta;
00052
00053 CIvfVec3d* m_start;
00054 CIvfVec3d* m_end;
00055
00056 void initSpline();
00057 void updateSpline();
00058 public:
00060 CIvfSpline3d();
00061
00063 virtual ~CIvfSpline3d();
00064
00065 IvfClassInfo("CIvfSpline3d",CIvfMathBase);
00066
00068 void clear();
00069
00071 int getSize();
00072
00078 void setSize(int size);
00079
00081 CIvfVec3d* getPoint(int idx);
00082
00088 CIvfVec3d& getPosition(double t);
00089
00091 void update();
00092
00094 void setTangentWeight(int idx, double value);
00095
00097 void setContinuity(int idx, double value);
00098
00100 void setTension(int idx, double value);
00101
00107 double getSpeed(double t);
00108
00114 CIvfVec3d& getTangent(double t);
00115 };
00116
00117 #endif