4 * ***** BEGIN GPL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21 * All rights reserved.
23 * The Original Code is: all of this file.
25 * Contributor(s): 2007, Joshua Leung, major recode
27 * ***** END GPL LICENSE BLOCK *****
31 #ifndef DNA_CONSTRAINT_TYPES_H
32 #define DNA_CONSTRAINT_TYPES_H
35 #include "DNA_listBase.h"
41 /* channels reside in Object or Action (ListBase) constraintChannels */
42 // XXX depreceated... old AnimSys
43 typedef struct bConstraintChannel {
44 struct bConstraintChannel *next, *prev;
51 typedef struct bConstraint {
52 struct bConstraint *next, *prev;
54 void *data; /* Constraint data (a valid constraint type) */
55 short type; /* Constraint type */
56 short flag; /* Flag - General Settings */
58 char ownspace; /* Space that owner should be evaluated in */
59 char tarspace; /* Space that target should be evaluated in (only used if 1 target) */
61 char name[30]; /* Constraint name */
63 float enforce; /* Amount of influence exherted by constraint (0.0-1.0) */
64 float headtail; /* Point along subtarget bone where the actual target is. 0=head (default for all), 1=tail*/
67 struct Ipo *ipo; /* local influence ipo or driver */ // XXX depreceated for 2.5... old animation system hack
69 /* below are readonly fields that are set at runtime by the solver for use in the GE (only IK atm) */
70 float lin_error; /* residual error on constraint expressed in blender unit*/
71 float rot_error; /* residual error on constraint expressed in radiant */
75 /* Multiple-target constraints --------------------- */
77 /* This struct defines a constraint target.
78 * It is used during constraint solving regardless of how many targets the
81 typedef struct bConstraintTarget {
82 struct bConstraintTarget *next, *prev;
84 struct Object *tar; /* object to use as target */
85 char subtarget[32]; /* subtarget - pchan or vgroup name */
87 float matrix[4][4]; /* matrix used during constraint solving - should be cleared before each use */
89 short space; /* space that target should be evaluated in (overrides bConstraint->tarspace) */
90 short flag; /* runtime settings (for editor, etc.) */
91 short type; /* type of target (B_CONSTRAINT_OB_TYPE) */
92 short rotOrder; /* rotation order for target (as defined in BLI_math.h) */
95 /* bConstraintTarget -> flag */
96 typedef enum B_CONSTRAINT_TARGET_FLAG {
97 CONSTRAINT_TAR_TEMP = (1<<0), /* temporary target-struct that needs to be freed after use */
98 } B_CONSTRAINT_TARGET_FLAG;
100 /* bConstraintTarget/bConstraintOb -> type */
101 typedef enum B_CONSTRAINT_OB_TYPE {
102 CONSTRAINT_OBTYPE_OBJECT = 1, /* string is "" */
103 CONSTRAINT_OBTYPE_BONE, /* string is bone-name */
104 CONSTRAINT_OBTYPE_VERT, /* string is vertex-group name */
105 CONSTRAINT_OBTYPE_CV /* string is vertex-group name - is not available until curves get vgroups */
106 } B_CONSTRAINT_OB_TYPE;
110 /* Python Script Constraint */
111 typedef struct bPythonConstraint {
112 struct Text *text; /* text-buffer (containing script) to execute */
113 IDProperty *prop; /* 'id-properties' used to store custom properties for constraint */
115 int flag; /* general settings/state indicators accessed by bitmapping */
116 int tarnum; /* number of targets - usually only 1-3 are needed */
118 ListBase targets; /* a list of targets that this constraint has (bConstraintTarget-s) */
120 struct Object *tar; /* target from previous implementation (version-patch sets this to NULL on file-load) */
121 char subtarget[32]; /* subtarger from previous implentation (version-patch sets this to "" on file-load) */
125 /* Inverse-Kinematics (IK) constraint
126 This constraint supports a variety of mode determine by the type field
127 according to B_CONSTRAINT_IK_TYPE.
128 Some fields are used by all types, some are specific to some types
129 This is indicated in the comments for each field
131 typedef struct bKinematicConstraint {
132 struct Object *tar; /* All: target object in case constraint needs a target */
133 short iterations; /* All: Maximum number of iterations to try */
134 short flag; /* All & CopyPose: some options Like CONSTRAINT_IK_TIP */
135 short rootbone; /* All: index to rootbone, if zero go all the way to mother bone */
136 short max_rootbone; /* CopyPose: for auto-ik, maximum length of chain */
137 char subtarget[32]; /* All: String to specify sub-object target */
138 struct Object *poletar; /* All: Pole vector target */
139 char polesubtarget[32]; /* All: Pole vector sub-object target */
140 float poleangle; /* All: Pole vector rest angle */
141 float weight; /* All: Weight of constraint in IK tree */
142 float orientweight; /* CopyPose: Amount of rotation a target applies on chain */
143 float grabtarget[3]; /* CopyPose: for target-less IK */
144 short type; /* subtype of IK constraint: B_CONSTRAINT_IK_TYPE */
145 short mode; /* Distance: how to limit in relation to clamping sphere: LIMITDIST_.. */
146 float dist; /* Distance: distance (radius of clamping sphere) from target */
147 } bKinematicConstraint;
149 typedef enum B_CONSTRAINT_IK_TYPE {
150 CONSTRAINT_IK_COPYPOSE = 0, /* 'standard' IK constraint: match position and/or orientation of target */
151 CONSTRAINT_IK_DISTANCE /* maintain distance with target */
152 } B_CONSTRAINT_IK_TYPE;
155 /* Spline IK Constraint
156 * Aligns 'n' bones to the curvature defined by the curve,
157 * with the chain ending on the bone that owns this constraint,
158 * and starting on the nth parent.
160 typedef struct bSplineIKConstraint {
162 struct Object *tar; /* curve object (with follow path enabled) which drives the bone chain */
164 /* binding details */
165 float *points; /* array of numpoints items, denoting parametric positions along curve that joints should follow */
166 short numpoints; /* number of points to bound in points array */
167 short chainlen; /* number of bones ('n') that are in the chain */
170 short flag; /* general settings for constraint */
171 short xzScaleMode; /* method used for determining the x & z scaling of the bones */
172 } bSplineIKConstraint;
175 /* Single-target subobject constraints --------------------- */
177 /* Track To Constraint */
178 typedef struct bTrackToConstraint {
180 int reserved1; /* I'll be using reserved1 and reserved2 as Track and Up flags, not sure if that's what they were intented for anyway. Not sure either if it would create backward incompatibility if I were to rename them. - theeth*/
185 } bTrackToConstraint;
187 /* Copy Rotation Constraint */
188 typedef struct bRotateLikeConstraint {
193 } bRotateLikeConstraint;
195 /* Copy Location Constraint */
196 typedef struct bLocateLikeConstraint {
201 } bLocateLikeConstraint;
203 /* Copy Scale Constraint */
204 typedef struct bSizeLikeConstraint {
209 } bSizeLikeConstraint;
211 /* Maintain Volume Constraint */
212 typedef struct bSameVolumeConstraint {
215 } bSameVolumeConstraint;
217 /* Copy Transform Constraint */
218 typedef struct bTransLikeConstraint {
221 } bTransLikeConstraint;
223 /* Floor Constraint */
224 typedef struct bMinMaxConstraint {
229 short sticky, stuck, pad1, pad2; /* for backward compatability */
234 /* Action Constraint */
235 typedef struct bActionConstraint {
237 short type; /* what transform 'channel' drives the result */
238 short local; /* was used in versions prior to the Constraints recode */
248 /* Locked Axis Tracking constraint */
249 typedef struct bLockTrackConstraint {
254 } bLockTrackConstraint;
256 /* Damped Tracking constraint */
257 typedef struct bDampTrackConstraint {
262 } bDampTrackConstraint;
264 /* Follow Path constraints */
265 typedef struct bFollowPathConstraint {
266 struct Object *tar; /* Must be path object */
268 float offset; /* Offset in time on the path (in frames), when NOT using 'fixed position' */
269 float offset_fac; /* Parametric offset factor defining position along path, when using 'fixed position' */
275 } bFollowPathConstraint;
277 /* Stretch to constraint */
278 typedef struct bStretchToConstraint {
285 } bStretchToConstraint;
287 /* Rigid Body constraint */
288 typedef struct bRigidBodyJointConstraint {
290 struct Object *child;
305 } bRigidBodyJointConstraint;
307 /* Clamp-To Constraint */
308 typedef struct bClampToConstraint {
309 struct Object *tar; /* 'target' must be a curve */
310 int flag; /* which axis/plane to compare owner's location on */
311 int flag2; /* for legacy reasons, this is flag2. used for any extra settings */
312 } bClampToConstraint;
314 /* Child Of Constraint */
315 typedef struct bChildOfConstraint {
316 struct Object *tar; /* object which will act as parent (or target comes from) */
317 int flag; /* settings */
319 float invmat[4][4]; /* parent-inverse matrix to use */
320 char subtarget[32]; /* string to specify a subobject target */
321 } bChildOfConstraint;
323 /* Generic Transform->Transform Constraint */
324 typedef struct bTransformConstraint {
325 struct Object *tar; /* target (i.e. 'driver' object/bone) */
328 short from, to; /* can be loc(0) , rot(1), or size(2) */
329 char map[3]; /* defines which target-axis deform is copied by each owner-axis */
330 char expo; /* extrapolate motion? if 0, confine to ranges */
332 float from_min[3]; /* from_min/max defines range of target transform */
333 float from_max[3]; /* to map on to to_min/max range. */
335 float to_min[3]; /* range of motion on owner caused by target */
337 } bTransformConstraint;
339 /* Pivot Constraint */
340 typedef struct bPivotConstraint {
342 * Either target object + offset, or just offset is used
344 struct Object *tar; /* target object (optional) */
345 char subtarget[32]; /* subtarget name (optional) */
346 float offset[3]; /* offset from the target to use, regardless of whether it exists */
348 /* Rotation-driven activation:
349 * This option provides easier one-stop setups for footrolls
351 short rotAxis; /* rotation axes to consider for this (ePivotConstraint_Axis) */
354 short flag; /* ePivotConstraint_Flag */
357 /* transform limiting constraints - zero target ---------------------------- */
358 /* Limit Location Constraint */
359 typedef struct bLocLimitConstraint {
365 } bLocLimitConstraint;
367 /* Limit Rotation Constraint */
368 typedef struct bRotLimitConstraint {
374 } bRotLimitConstraint;
376 /* Limit Scaling Constraint */
377 typedef struct bSizeLimitConstraint {
383 } bSizeLimitConstraint;
385 /* Limit Distance Constraint */
386 typedef struct bDistLimitConstraint {
390 float dist; /* distance (radius of clamping sphere) from target */
391 float soft; /* distance from clamping-sphere to start applying 'fade' */
393 short flag; /* settings */
394 short mode; /* how to limit in relation to clamping sphere */
396 } bDistLimitConstraint;
398 /* ShrinkWrap Constraint */
399 typedef struct bShrinkwrapConstraint {
400 struct Object *target;
401 float dist; /* distance to kept from target */
402 short shrinkType; /* shrink type (look on MOD shrinkwrap for values) */
403 char projAxis; /* axis to project over UP_X, UP_Y, UP_Z */
405 } bShrinkwrapConstraint;
408 /* ------------------------------------------ */
411 * - Do not ever change the order of these, or else files could get
412 * broken as their correct value cannot be resolved
414 typedef enum eBConstraint_Types {
415 CONSTRAINT_TYPE_NULL = 0, /* Invalid/legacy constraint */
416 CONSTRAINT_TYPE_CHILDOF, /* Unimplemented non longer :) - during constraints recode, Aligorith */
417 CONSTRAINT_TYPE_TRACKTO,
418 CONSTRAINT_TYPE_KINEMATIC,
419 CONSTRAINT_TYPE_FOLLOWPATH,
420 CONSTRAINT_TYPE_ROTLIMIT, /* Unimplemented no longer :) - Aligorith */
421 CONSTRAINT_TYPE_LOCLIMIT, /* Unimplemented no longer :) - Aligorith */
422 CONSTRAINT_TYPE_SIZELIMIT, /* Unimplemented no longer :) - Aligorith */
423 CONSTRAINT_TYPE_ROTLIKE,
424 CONSTRAINT_TYPE_LOCLIKE,
425 CONSTRAINT_TYPE_SIZELIKE,
426 CONSTRAINT_TYPE_PYTHON, /* Unimplemented no longer :) - Aligorith. Scripts */
427 CONSTRAINT_TYPE_ACTION,
428 CONSTRAINT_TYPE_LOCKTRACK, /* New Tracking constraint that locks an axis in place - theeth */
429 CONSTRAINT_TYPE_DISTLIMIT, /* limit distance */
430 CONSTRAINT_TYPE_STRETCHTO, /* claiming this to be mine :) is in tuhopuu bjornmose */
431 CONSTRAINT_TYPE_MINMAX, /* floor constraint */
432 CONSTRAINT_TYPE_RIGIDBODYJOINT, /* rigidbody constraint */
433 CONSTRAINT_TYPE_CLAMPTO, /* clampto constraint */
434 CONSTRAINT_TYPE_TRANSFORM, /* transformation (loc/rot/size -> loc/rot/size) constraint */
435 CONSTRAINT_TYPE_SHRINKWRAP, /* shrinkwrap (loc/rot) constraint */
436 CONSTRAINT_TYPE_DAMPTRACK, /* New Tracking constraint that minimises twisting */
437 CONSTRAINT_TYPE_SPLINEIK, /* Spline-IK - Align 'n' bones to a curve */
438 CONSTRAINT_TYPE_TRANSLIKE, /* Copy transform matrix */
439 CONSTRAINT_TYPE_SAMEVOL, /* Maintain volume during scaling */
440 CONSTRAINT_TYPE_PIVOT, /* Pivot Constraint */
442 /* NOTE: no constraints are allowed to be added after this */
444 } eBConstraint_Types;
446 /* bConstraint->flag */
447 /* flags 0x2 (1<<1) and 0x8 (1<<3) were used in past */
448 /* flag 0x20 (1<<5) was used to indicate that a constraint was evaluated using a 'local' hack for posebones only */
449 typedef enum eBConstraint_Flags {
451 CONSTRAINT_EXPAND = (1<<0),
452 /* pre-check for illegal object name or bone name */
453 CONSTRAINT_DISABLE = (1<<2),
454 /* to indicate which Ipo should be shown, maybe for 3d access later too */
455 CONSTRAINT_ACTIVE = (1<<4),
456 /* to indicate that the owner's space should only be changed into ownspace, but not out of it */
457 CONSTRAINT_SPACEONCE = (1<<6),
458 /* influence ipo is on constraint itself, not in action channel */
459 CONSTRAINT_OWN_IPO = (1<<7),
460 /* indicates that constraint was added locally (i.e. didn't come from the proxy-lib) */
461 CONSTRAINT_PROXY_LOCAL = (1<<8),
462 /* indicates that constraint is temporarily disabled (only used in GE) */
463 CONSTRAINT_OFF = (1<<9)
464 } eBConstraint_Flags;
466 /* bConstraint->ownspace/tarspace */
467 typedef enum eBConstraint_SpaceTypes {
468 /* default for all - worldspace */
469 CONSTRAINT_SPACE_WORLD = 0,
470 /* for objects (relative to parent/without parent influence),
471 * for bones (along normals of bone, without parent/restpositions)
473 CONSTRAINT_SPACE_LOCAL, /* = 1 */
474 /* for posechannels - pose space */
475 CONSTRAINT_SPACE_POSE, /* = 2 */
476 /* for posechannels - local with parent */
477 CONSTRAINT_SPACE_PARLOCAL, /* = 3 */
478 /* for files from between 2.43-2.46 (should have been parlocal) */
479 CONSTRAINT_SPACE_INVALID, /* = 4. do not exchange for anything! */
480 } eBConstraint_SpaceTypes;
482 /* bConstraintChannel.flag */
483 // XXX depreceated... old AnimSys
484 typedef enum eConstraintChannel_Flags {
485 CONSTRAINT_CHANNEL_SELECT = (1<<0),
486 CONSTRAINT_CHANNEL_PROTECTED = (1<<1)
487 } eConstraintChannel_Flags;
489 /* -------------------------------------- */
491 /* bRotateLikeConstraint.flag */
492 typedef enum eCopyRotation_Flags {
496 ROTLIKE_X_INVERT = (1<<4),
497 ROTLIKE_Y_INVERT = (1<<5),
498 ROTLIKE_Z_INVERT = (1<<6),
499 ROTLIKE_OFFSET = (1<<7),
500 } eCopyRotation_Flags;
502 /* bLocateLikeConstraint.flag */
503 typedef enum eCopyLocation_Flags {
507 /* LOCLIKE_TIP is a depreceated option... use headtail=1.0f instead */
508 LOCLIKE_TIP = (1<<3),
509 LOCLIKE_X_INVERT = (1<<4),
510 LOCLIKE_Y_INVERT = (1<<5),
511 LOCLIKE_Z_INVERT = (1<<6),
512 LOCLIKE_OFFSET = (1<<7),
513 } eCopyLocation_Flags;
515 /* bSizeLikeConstraint.flag */
516 typedef enum eCopyScale_Flags {
520 SIZELIKE_OFFSET = (1<<3),
523 /* bSameVolumeConstraint.flag */
524 typedef enum eSameVolume_Modes {
530 /* Locked-Axis Values (Locked Track) */
531 typedef enum eLockAxis_Modes {
537 /* Up-Axis Values (TrackTo and Locked Track) */
538 typedef enum eUpAxis_Modes {
544 /* Tracking axis (TrackTo, Locked Track, Damped Track) */
545 typedef enum eTrackToAxis_Modes {
552 } eTrackToAxis_Modes;
554 /* FollowPath flags */
555 typedef enum eFollowPath_Flags {
556 FOLLOWPATH_FOLLOW = (1<<0),
557 FOLLOWPATH_STATIC = (1<<1),
558 FOLLOWPATH_RADIUS = (1<<2),
561 /* bTrackToConstraint->flags */
562 typedef enum eTrackTo_Flags {
563 TARGET_Z_UP = (1<<0),
566 /* Strech To Constraint -> volmode */
567 typedef enum eStretchTo_VolMode {
572 } eStretchTo_VolMode;
574 /* Stretch To Constraint -> plane mode */
575 typedef enum eStretchTo_PlaneMode {
579 } eStretchTo_PlaneMode;
581 /* Clamp-To Constraint ->flag */
582 typedef enum eClampTo_Modes {
589 /* ClampTo Constraint ->flag2 */
590 typedef enum eClampTo_Flags {
591 CLAMPTO_CYCLIC = (1<<0),
594 /* bKinematicConstraint->flag */
595 typedef enum eKinematic_Flags {
596 CONSTRAINT_IK_TIP = (1<<0),
597 CONSTRAINT_IK_ROT = (1<<1),
599 CONSTRAINT_IK_AUTO = (1<<2),
601 CONSTRAINT_IK_TEMP = (1<<3),
602 CONSTRAINT_IK_STRETCH = (1<<4),
603 CONSTRAINT_IK_POS = (1<<5),
604 CONSTRAINT_IK_SETANGLE = (1<<6),
605 CONSTRAINT_IK_GETANGLE = (1<<7),
607 CONSTRAINT_IK_NO_POS_X = (1<<8),
608 CONSTRAINT_IK_NO_POS_Y = (1<<9),
609 CONSTRAINT_IK_NO_POS_Z = (1<<10),
610 CONSTRAINT_IK_NO_ROT_X = (1<<11),
611 CONSTRAINT_IK_NO_ROT_Y = (1<<12),
612 CONSTRAINT_IK_NO_ROT_Z = (1<<13),
613 /* axis relative to target */
614 CONSTRAINT_IK_TARGETAXIS = (1<<14),
617 /* bSplineIKConstraint->flag */
618 typedef enum eSplineIK_Flags {
619 /* chain has been attached to spline */
620 CONSTRAINT_SPLINEIK_BOUND = (1<<0),
621 /* root of chain is not influenced by the constraint */
622 CONSTRAINT_SPLINEIK_NO_ROOT = (1<<1),
623 /* bones in the chain should not scale to fit the curve */
624 CONSTRAINT_SPLINEIK_SCALE_LIMITED = (1<<2),
625 /* evenly distribute the bones along the path regardless of length */
626 CONSTRAINT_SPLINEIK_EVENSPLITS = (1<<3),
627 /* don't adjust the x and z scaling of the bones by the curve radius */
628 CONSTRAINT_SPLINEIK_NO_CURVERAD = (1<<4),
631 /* bSplineIKConstraint->xzScaleMode */
632 typedef enum eSplineIK_XZScaleModes {
634 CONSTRAINT_SPLINEIK_XZS_NONE = 0,
635 /* bones in the chain should take their x/z scales from the original scaling */
636 CONSTRAINT_SPLINEIK_XZS_ORIGINAL,
637 /* x/z scales are the inverse of the y-scale */
638 CONSTRAINT_SPLINEIK_XZS_VOLUMETRIC,
639 } eSplineIK_XZScaleModes;
641 /* MinMax (floor) flags */
642 typedef enum eFloor_Flags {
643 MINMAX_STICKY = (1<<0),
644 MINMAX_STUCK = (1<<1),
645 MINMAX_USEROT = (1<<2),
648 /* transform limiting constraints -> flag2 */
649 typedef enum eTransformLimits_Flags2 {
650 /* not used anymore - for older Limit Location constraints only */
651 LIMIT_NOPARENT = (1<<0),
652 /* for all Limit constraints - allow to be used during transform? */
653 LIMIT_TRANSFORM = (1<<1),
654 } eTransformLimits_Flags2;
656 /* transform limiting constraints -> flag (own flags) */
657 typedef enum eTransformLimits_Flags {
664 } eTransformLimits_Flags;
666 /* limit rotation constraint -> flag (own flags) */
667 typedef enum eRotLimit_Flags {
673 /* distance limit constraint */
674 /* bDistLimitConstraint->flag */
675 typedef enum eDistLimit_Flag {
676 LIMITDIST_USESOFT = (1<<0),
679 /* bDistLimitConstraint->mode */
680 typedef enum eDistLimit_Modes {
681 LIMITDIST_INSIDE = 0,
686 /* python constraint -> flag */
687 typedef enum ePyConstraint_Flags {
688 PYCON_USETARGETS = (1<<0),
689 PYCON_SCRIPTERROR = (1<<1),
690 } ePyConstraint_Flags;
692 /* ChildOf Constraint -> flag */
693 typedef enum eChildOf_Flags {
694 CHILDOF_LOCX = (1<<0),
695 CHILDOF_LOCY = (1<<1),
696 CHILDOF_LOCZ = (1<<2),
697 CHILDOF_ROTX = (1<<3),
698 CHILDOF_ROTY = (1<<4),
699 CHILDOF_ROTZ = (1<<5),
700 CHILDOF_SIZEX = (1<<6),
701 CHILDOF_SIZEY = (1<<7),
702 CHILDOF_SIZEZ = (1<<8),
705 /* Pivot Constraint */
706 /* Restrictions for Pivot Constraint axis to consider for enabling constraint */
707 typedef enum ePivotConstraint_Axis {
708 /* do not consider this activity-clamping */
709 PIVOTCON_AXIS_NONE = -1,
711 /* consider -ve x-axis rotations */
713 /* consider -ve y-axis rotations */
715 /* consider -ve z-axis rotations */
718 /* consider +ve x-axis rotations */
720 /* consider +ve y-axis rotations */
722 /* consider +ve z-axis rotations */
724 } ePivotConstraint_Axis;
726 /* settings for Pivot Constraint in general */
727 typedef enum ePivotConstraint_Flag {
728 /* offset is to be interpreted as being a fixed-point in space */
729 PIVOTCON_FLAG_OFFSET_ABS = (1<<0),
730 /* rotation-based activation uses negative rotation to drive result */
731 PIVOTCON_FLAG_ROTACT_NEG = (1<<1),
732 } ePivotConstraint_Flag;
734 /* Rigid-Body Constraint */
735 #define CONSTRAINT_DRAW_PIVOT 0x40
736 #define CONSTRAINT_DISABLE_LINKED_COLLISION 0x80
738 /* important: these defines need to match up with PHY_DynamicTypes headerfile */
739 #define CONSTRAINT_RB_BALL 1
740 #define CONSTRAINT_RB_HINGE 2
741 #define CONSTRAINT_RB_CONETWIST 4
742 #define CONSTRAINT_RB_VEHICLE 11
743 #define CONSTRAINT_RB_GENERIC6DOF 12