00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _ODE_MASS_H_
00024 #define _ODE_MASS_H_
00025
00026 #include <ode/common.h>
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 struct dMass;
00033 typedef struct dMass dMass;
00034
00043 ODE_API int dMassCheck(const dMass *m);
00044
00045 ODE_API void dMassSetZero (dMass *);
00046
00047 ODE_API void dMassSetParameters (dMass *, dReal themass,
00048 dReal cgx, dReal cgy, dReal cgz,
00049 dReal I11, dReal I22, dReal I33,
00050 dReal I12, dReal I13, dReal I23);
00051
00052 ODE_API void dMassSetSphere (dMass *, dReal density, dReal radius);
00053 ODE_API void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius);
00054
00055 ODE_API void dMassSetCapsule (dMass *, dReal density, int direction,
00056 dReal radius, dReal length);
00057 ODE_API void dMassSetCapsuleTotal (dMass *, dReal total_mass, int direction,
00058 dReal radius, dReal length);
00059
00060 ODE_API void dMassSetCylinder (dMass *, dReal density, int direction,
00061 dReal radius, dReal length);
00062 ODE_API void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction,
00063 dReal radius, dReal length);
00064
00065 ODE_API void dMassSetBox (dMass *, dReal density,
00066 dReal lx, dReal ly, dReal lz);
00067 ODE_API void dMassSetBoxTotal (dMass *, dReal total_mass,
00068 dReal lx, dReal ly, dReal lz);
00069
00070 ODE_API void dMassSetTrimesh (dMass *, dReal density, dGeomID g);
00071
00072 ODE_API void dMassSetTrimeshTotal (dMass *m, dReal total_mass, dGeomID g);
00073
00074 ODE_API void dMassAdjust (dMass *, dReal newmass);
00075
00076 ODE_API void dMassTranslate (dMass *, dReal x, dReal y, dReal z);
00077
00078 ODE_API void dMassRotate (dMass *, const dMatrix3 R);
00079
00080 ODE_API void dMassAdd (dMass *a, const dMass *b);
00081
00082
00083 #define dMassSetCappedCylinder dMassSetCapsule
00084 #define dMassSetCappedCylinderTotal dMassSetCapsuleTotal
00085
00086
00087 struct dMass {
00088 dReal mass;
00089 dVector4 c;
00090 dMatrix3 I;
00091
00092 #ifdef __cplusplus
00093 dMass()
00094 { dMassSetZero (this); }
00095 void setZero()
00096 { dMassSetZero (this); }
00097 void setParameters (dReal themass, dReal cgx, dReal cgy, dReal cgz,
00098 dReal I11, dReal I22, dReal I33,
00099 dReal I12, dReal I13, dReal I23)
00100 { dMassSetParameters (this,themass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23); }
00101 void setSphere (dReal density, dReal radius)
00102 { dMassSetSphere (this,density,radius); }
00103 void setCapsule (dReal density, int direction, dReal a, dReal b)
00104 { dMassSetCappedCylinder (this,density,direction,a,b); }
00105 void setCappedCylinder (dReal density, int direction, dReal a, dReal b)
00106 { setCapsule(density, direction, a, b); }
00107 void setBox (dReal density, dReal lx, dReal ly, dReal lz)
00108 { dMassSetBox (this,density,lx,ly,lz); }
00109 void adjust (dReal newmass)
00110 { dMassAdjust (this,newmass); }
00111 void translate (dReal x, dReal y, dReal z)
00112 { dMassTranslate (this,x,y,z); }
00113 void rotate (const dMatrix3 R)
00114 { dMassRotate (this,R); }
00115 void add (const dMass *b)
00116 { dMassAdd (this,b); }
00117 #endif
00118 };
00119
00120
00121 #ifdef __cplusplus
00122 }
00123 #endif
00124
00125 #endif