00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __KIN_Bone__
00021 #define __KIN_Bone__
00022
00023 #include "KIN_API.h"
00024 #include <string.h>
00025 #include <UT/UT_Matrix4.h>
00026 #include "KIN_AngleConstraint.h"
00027
00028 class KIN_API KIN_Bone
00029 {
00030 public:
00031 KIN_Bone()
00032 {
00033 myRot[0] = myRot[1] = myRot[2] = 0.0f;
00034 myLength = 0.0f;
00035 myDampening = 0.0f;
00036 myExtraXform.identity();
00037 myData = 0;
00038 }
00039 ~KIN_Bone()
00040 {
00041 }
00042
00043 float getRotate( int axis ) const { return myRot[axis]; }
00044 void getRotates( float *r ) const
00045 { memcpy( r, myRot, sizeof(myRot) ); }
00046 const UT_Matrix4 &getExtraXform() const { return myExtraXform; }
00047
00048 float getLength() const { return myLength; }
00049 float getDampening() const { return myDampening; }
00050 const void *getData() const { return myData; }
00051 float constrain(int axis, float angle, float step) const
00052 { return myConstraint.constrain(axis, angle, step); }
00053
00054 void setRotate( int axis, float r )
00055 { myRot[axis] = r; }
00056 void setRotates( const float *r )
00057 { memcpy( myRot, r, sizeof(myRot) ); }
00058 void setExtraXform(const UT_Matrix4 &xform)
00059 { myExtraXform = xform; }
00060
00061 void setLength( float l ) { myLength = l; }
00062 void setDampening( float d ){ myDampening = d; }
00063 void setData( const void *d ){ myData = d; }
00064 void setConstraint( float rest[3], float xrange[2],
00065 float yrange[2], float zrange[2],
00066 float damp[3], float roll[3] )
00067 {
00068 myConstraint.setConstraint(rest, xrange, yrange,
00069 zrange, damp, roll);
00070 }
00071
00072 void operator=(const KIN_Bone &src)
00073 {
00074 memcpy( myRot, src.myRot, sizeof(myRot) );
00075 myLength = src.myLength;
00076 myDampening = src.myDampening;
00077 myExtraXform = src.myExtraXform;
00078 myData = src.myData;
00079 myConstraint = src.myConstraint;
00080 }
00081
00082 private:
00083 float myRot[3];
00084 float myLength;
00085 float myDampening;
00086 UT_Matrix4 myExtraXform;
00087 const void *myData;
00088 KIN_AngleConstraint myConstraint;
00089 };
00090
00091 #endif
00092