aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ode-0.9/ode/src/objects.h
diff options
context:
space:
mode:
authordan miller2007-10-19 05:24:38 +0000
committerdan miller2007-10-19 05:24:38 +0000
commitf205de7847da7ae1c10212d82e7042d0100b4ce0 (patch)
tree9acc9608a6880502aaeda43af52c33e278e95b9c /libraries/ode-0.9/ode/src/objects.h
parenttrying to fix my screwup part deux (diff)
downloadopensim-SC_OLD-f205de7847da7ae1c10212d82e7042d0100b4ce0.zip
opensim-SC_OLD-f205de7847da7ae1c10212d82e7042d0100b4ce0.tar.gz
opensim-SC_OLD-f205de7847da7ae1c10212d82e7042d0100b4ce0.tar.bz2
opensim-SC_OLD-f205de7847da7ae1c10212d82e7042d0100b4ce0.tar.xz
from the start... checking in ode-0.9
Diffstat (limited to 'libraries/ode-0.9/ode/src/objects.h')
-rw-r--r--libraries/ode-0.9/ode/src/objects.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/libraries/ode-0.9/ode/src/objects.h b/libraries/ode-0.9/ode/src/objects.h
new file mode 100644
index 0000000..f286e2d
--- /dev/null
+++ b/libraries/ode-0.9/ode/src/objects.h
@@ -0,0 +1,138 @@
1/*************************************************************************
2 * *
3 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
4 * All rights reserved. Email: russ@q12.org Web: www.q12.org *
5 * *
6 * This library is free software; you can redistribute it and/or *
7 * modify it under the terms of EITHER: *
8 * (1) The GNU Lesser General Public License as published by the Free *
9 * Software Foundation; either version 2.1 of the License, or (at *
10 * your option) any later version. The text of the GNU Lesser *
11 * General Public License is included with this library in the *
12 * file LICENSE.TXT. *
13 * (2) The BSD-style license that is included with this library in *
14 * the file LICENSE-BSD.TXT. *
15 * *
16 * This library is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
19 * LICENSE.TXT and LICENSE-BSD.TXT for more details. *
20 * *
21 *************************************************************************/
22
23// object, body, and world structs.
24
25
26#ifndef _ODE_OBJECT_H_
27#define _ODE_OBJECT_H_
28
29#include <ode/common.h>
30#include <ode/memory.h>
31#include <ode/mass.h>
32#include "array.h"
33
34
35// some body flags
36
37enum {
38 dxBodyFlagFiniteRotation = 1, // use finite rotations
39 dxBodyFlagFiniteRotationAxis = 2, // use finite rotations only along axis
40 dxBodyDisabled = 4, // body is disabled
41 dxBodyNoGravity = 8, // body is not influenced by gravity
42 dxBodyAutoDisable = 16 // enable auto-disable on body
43};
44
45
46// base class that does correct object allocation / deallocation
47
48struct dBase {
49 void *operator new (size_t size) { return dAlloc (size); }
50 void operator delete (void *ptr, size_t size) { dFree (ptr,size); }
51 void *operator new[] (size_t size) { return dAlloc (size); }
52 void operator delete[] (void *ptr, size_t size) { dFree (ptr,size); }
53};
54
55
56// base class for bodies and joints
57
58struct dObject : public dBase {
59 dxWorld *world; // world this object is in
60 dObject *next; // next object of this type in list
61 dObject **tome; // pointer to previous object's next ptr
62 void *userdata; // user settable data
63 int tag; // used by dynamics algorithms
64};
65
66
67// auto disable parameters
68struct dxAutoDisable {
69 dReal idle_time; // time the body needs to be idle to auto-disable it
70 int idle_steps; // steps the body needs to be idle to auto-disable it
71 dReal linear_average_threshold; // linear (squared) average velocity threshold
72 dReal angular_average_threshold; // angular (squared) average velocity threshold
73 unsigned int average_samples; // size of the average_lvel and average_avel buffers
74};
75
76
77// quick-step parameters
78struct dxQuickStepParameters {
79 int num_iterations; // number of SOR iterations to perform
80 dReal w; // the SOR over-relaxation parameter
81};
82
83
84// contact generation parameters
85struct dxContactParameters {
86 dReal max_vel; // maximum correcting velocity
87 dReal min_depth; // thickness of 'surface layer'
88};
89
90
91
92// position vector and rotation matrix for geometry objects that are not
93// connected to bodies.
94
95struct dxPosR {
96 dVector3 pos;
97 dMatrix3 R;
98};
99
100struct dxBody : public dObject {
101 dxJointNode *firstjoint; // list of attached joints
102 int flags; // some dxBodyFlagXXX flags
103 dGeomID geom; // first collision geom associated with body
104 dMass mass; // mass parameters about POR
105 dMatrix3 invI; // inverse of mass.I
106 dReal invMass; // 1 / mass.mass
107 dxPosR posr; // position and orientation of point of reference
108 dQuaternion q; // orientation quaternion
109 dVector3 lvel,avel; // linear and angular velocity of POR
110 dVector3 facc,tacc; // force and torque accumulators
111 dVector3 finite_rot_axis; // finite rotation axis, unit length or 0=none
112
113 // auto-disable information
114 dxAutoDisable adis; // auto-disable parameters
115 dReal adis_timeleft; // time left to be idle
116 int adis_stepsleft; // steps left to be idle
117 dVector3* average_lvel_buffer; // buffer for the linear average velocity calculation
118 dVector3* average_avel_buffer; // buffer for the angular average velocity calculation
119 unsigned int average_counter; // counter/index to fill the average-buffers
120 int average_ready; // indicates ( with = 1 ), if the Body's buffers are ready for average-calculations
121};
122
123
124struct dxWorld : public dBase {
125 dxBody *firstbody; // body linked list
126 dxJoint *firstjoint; // joint linked list
127 int nb,nj; // number of bodies and joints in lists
128 dVector3 gravity; // gravity vector (m/s/s)
129 dReal global_erp; // global error reduction parameter
130 dReal global_cfm; // global costraint force mixing parameter
131 dxAutoDisable adis; // auto-disable parameters
132 int adis_flag; // auto-disable flag for new bodies
133 dxQuickStepParameters qs;
134 dxContactParameters contactp;
135};
136
137
138#endif