16 return dMassCheck(&_mass);
25 set_parameters(dReal themass,
26 dReal cgx, dReal cgy, dReal cgz,
27 dReal I11, dReal I22, dReal I33,
28 dReal I12, dReal I13, dReal I23) {
29 _mass.setParameters(themass,
36 set_parameters(dReal themass,
37 const LVecBase3f ¢er,
39 set_parameters(themass,
40 center[0], center[1], center[2],
41 i(0, 0), i(1, 1), i(2, 2),
42 i(0, 1), i(0, 2), i(1, 2));
46 set_sphere(dReal density, dReal radius) {
47 _mass.setSphere(density, radius);
51 set_sphere_total(dReal total_mass, dReal radius) {
52 dMassSetSphereTotal(&_mass, total_mass, radius);
56 set_capsule(dReal density,
int direction,
57 dReal radius, dReal length) {
58 _mass.setCapsule(density, direction,
63 set_capsule_total(dReal total_mass,
int direction,
64 dReal radius, dReal length) {
65 dMassSetCapsuleTotal(&_mass,
66 total_mass, direction,
71 set_cylinder(dReal density,
int direction,
72 dReal radius, dReal length) {
73 dMassSetCylinder(&_mass,
79 set_cylinder_total(dReal total_mass,
int direction,
80 dReal radius, dReal length) {
81 dMassSetCylinderTotal(&_mass, total_mass, direction,
86 set_box(dReal density,
87 dReal lx, dReal ly, dReal lz) {
93 set_box(dReal density,
94 const LVecBase3f &size) {
96 size[0], size[1], size[2]);
100 set_box_total(dReal total_mass,
101 const LVecBase3f &size) {
102 dMassSetBoxTotal(&_mass,
104 size[0], size[1], size[2]);
107 INLINE
void OdeMass::
108 set_box_total(dReal total_mass,
109 dReal lx, dReal ly, dReal lz) {
110 dMassSetBoxTotal(&_mass,
115 INLINE
void OdeMass::
116 adjust(dReal newmass) {
117 _mass.adjust(newmass);
120 INLINE
void OdeMass::
121 translate(dReal x, dReal y, dReal z) {
122 _mass.translate(x, y, z);
125 INLINE
void OdeMass::
126 translate(
const LVecBase3f &pos) {
127 translate(pos[0], pos[1], pos[2]);
130 INLINE
void OdeMass::
131 rotate(
const LMatrix3f &r) {
132 dMatrix3 rot = { r(0, 0), r(0, 1), r(0, 2), 0,
133 r(1, 0), r(1, 1), r(1, 2), 0,
134 r(2, 0), r(2, 1), r(2, 2), 0 };
138 INLINE
void OdeMass::
140 _mass.add(other.get_mass_ptr());
143 INLINE dReal OdeMass::
144 get_magnitude()
const {
148 INLINE LPoint3f OdeMass::
150 return LPoint3f(_mass.c[0], _mass.c[1], _mass.c[2]);
153 INLINE LMatrix3f OdeMass::
154 get_inertial_tensor()
const {
155 return LMatrix3f(_mass.I[0], _mass.I[1], _mass.I[2] ,
156 _mass.I[4], _mass.I[5], _mass.I[6] ,
157 _mass.I[8], _mass.I[9], _mass.I[10]);