93 if (time <
Keys[0].Time) {
94 *set_val =
Keys[0].Point;
98 if (time >
Keys[
Keys.Count() - 1].Time) {
99 *set_val =
Keys[
Keys.Count() - 1].Point;
117 float h0 = 2*t3 - 3*t2 + 1;
118 float h1 = -2*t3 + 3*t2;
119 float h2 = t3 - 2*t2 + t;
122 set_val->
X = h0*
Keys[i0].Point.X + h1*
Keys[i1].Point.X +
125 set_val->
Y = h0*
Keys[i0].Point.Y + h1*
Keys[i1].Point.Y +
128 set_val->
Z = h0*
Keys[i0].Point.Z + h1*
Keys[i1].Point.Z +
135 float min_time =
Keys[0].Time;
136 float max_time =
Keys[
Keys.Count() - 1].Time;
137 time =
MAX(time, min_time);
138 time =
MIN(time, max_time);
153 float dh0 = 6*t2 - 6*t;
154 float dh1 = -6*t2 + 6*t;
155 float dh2 = 3*t2 - 4*t + 1;
156 float dh3 = 3*t2 - 2*t;
158 set_val->
X = dh0*
Keys[i0].Point.X + dh1*
Keys[i1].Point.X +
161 set_val->
Y = dh0*
Keys[i0].Point.Y + dh1*
Keys[i1].Point.Y +
164 set_val->
Z = dh0*
Keys[i0].Point.Z + dh1*
Keys[i1].Point.Z +
202 assert(i<
Keys.Count());
210 assert(i<
Keys.Count());
227 for (
int i=0; i<
Tangents.Count(); i++) {
253 for (i=0; i<
Keys.Count(); i++) {
261 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
287 if (
Keys.Count() == 1)
289 *set_val =
Keys[0].Point;
296 if (time <
Keys[0].Time) {
297 *set_val =
Keys[0].Point;
301 if (time >
Keys[
Keys.Count() - 1].Time) {
302 *set_val =
Keys[
Keys.Count() - 1].Point;
321 float h0 = 2*t3 - 3*t2 + 1;
322 float h1 = -2*t3 + 3*t2;
323 float h2 = t3 - 2*t2 + t;
326 *set_val = h0*
Keys[i0].Point + h1*
Keys[i1].Point +
364 assert(i<
Keys.Count());
372 assert(i<
Keys.Count());
393 for (
int i=0; i<
Tangents.Count(); i++) {
419 for (i=0; i<
Keys.Count(); i++) {
428 WWDEBUG_SAY((
"Unhandled Chunk: 0x%X File: %s Line: %d\r\n",__FILE__,__LINE__));
uint32 Read(void *buf, uint32 nbytes)
uint32 Write(const void *buf, uint32 nbytes)
bool Begin_Chunk(uint32 id)
virtual void Clear_Keys(void)
void Find_Interval(float time, int *i0, int *i1, float *t)
virtual bool Load(ChunkLoadClass &cload)
virtual void Set_Key(int i, float point, unsigned int extra=0)
virtual int Add_Key(float point, float t, unsigned int extra=0)
virtual void Remove_Key(int i)
virtual bool Save(ChunkSaveClass &csave)
DynamicVectorClass< KeyClass > Keys
virtual void Set_Looping(bool onoff)
virtual void Remove_Key(int i)
virtual void Clear_Keys(void)
virtual void Set_Key(int i, const Vector3 &point)
void Find_Interval(float time, int *i0, int *i1, float *t)
virtual bool Load(ChunkLoadClass &cload)
Curve3DClass & operator=(const Curve3DClass &that)
virtual void Set_Looping(bool onoff)
virtual bool Save(ChunkSaveClass &csave)
virtual int Add_Key(const Vector3 &point, float t)
DynamicVectorClass< KeyClass > Keys
DynamicVectorClass< TangentsClass > Tangents
virtual void Set_Key(int i, float point, unsigned int extra=0)
virtual int Add_Key(float point, float t, unsigned int extra=0)
virtual void Clear_Keys(void)
virtual const PersistFactoryClass & Get_Factory(void) const
virtual void Set_Looping(bool onoff)
virtual void Evaluate(float time, float *set_val)
virtual void Set_Tangents(int i, float in_tan, float out_tan)
virtual void Get_Tangents(int i, float *set_in, float *set_out)
virtual bool Load(ChunkLoadClass &cload)
virtual void Update_Tangents(void)
virtual bool Save(ChunkSaveClass &csave)
virtual void Remove_Key(int i)
virtual bool Save(ChunkSaveClass &csave)
virtual void Set_Tangents(int i, const Vector3 &in_tan, const Vector3 &out_tan)
virtual void Remove_Key(int i)
virtual const PersistFactoryClass & Get_Factory(void) const
virtual void Evaluate(float time, Vector3 *set_val)
const HermiteSpline3DClass & operator=(const HermiteSpline3DClass &that)
HermiteSpline3DClass(void)
virtual void Set_Key(int i, const Vector3 &point)
virtual void Update_Tangents(void)
virtual void Clear_Keys(void)
virtual bool Load(ChunkLoadClass &cload)
virtual void Evaluate_Derivative(float time, Vector3 *set_val)
DynamicVectorClass< TangentsClass > Tangents
virtual void Get_Tangents(int i, Vector3 *set_in, Vector3 *set_out)
virtual int Add_Key(const Vector3 &point, float t)
virtual void Set_Looping(bool onoff)
WWINLINE void Set(float x, float y, float z)
SimplePersistFactoryClass< HermiteSpline1DClass, WWMATH_CHUNKID_HERMITESPLINE1D > _HermiteSpline1DFactory
@ HERMITE1D_CHUNK_CURVE1D
@ HERMITE3D_CHUNK_TANGENTS
@ HERMITE1D_CHUNK_TANGENTS
@ HERMITE3D_CHUNK_CURVE3D
SimplePersistFactoryClass< HermiteSpline3DClass, WWMATH_CHUNKID_HERMITESPLINE3D > _HermiteSpline3DFactory
#define DECLARE_FORCE_LINK(module)