/** * $Id$ * * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. The Blender * Foundation also sells licenses for use in proprietary software under * the Blender License. See http://www.blender.org/BL/ for information * about this. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): none yet. * * ***** END GPL/BL DUAL LICENSE BLOCK ***** * Constraint DNA data */ #ifndef DNA_CONSTRAINT_TYPES_H #define DNA_CONSTRAINT_TYPES_H #include "DNA_ID.h" #include "DNA_ipo_types.h" #include "DNA_object_types.h" struct Action; /* channels reside in Object or Action (ListBase) constraintChannels */ typedef struct bConstraintChannel{ struct bConstraintChannel *next, *prev; Ipo *ipo; short flag; char name[30]; } bConstraintChannel; typedef struct bConstraint{ struct bConstraint *next, *prev; void *data; /* Constraint data (a valid constraint type) */ short type; /* Constraint type */ short flag; /* Flag */ short reserved1; char name[30]; /* Constraint name */ float enforce; } bConstraint; /* Single-target subobject constraints */ typedef struct bKinematicConstraint{ Object *tar; short iterations; /* Maximum number of iterations to try */ short flag; /* Like CONSTRAINT_IK_TIP */ int rootbone; /* index to rootbone, if zero go all the way to mother bone */ char subtarget[32]; /* String to specify sub-object target */ float weight; /* Weight of goal in IK tree */ float orientweight; /* Amount of rotation a target applies on chain */ float grabtarget[3]; /* for target-less IK */ int pad; } bKinematicConstraint; typedef struct bTrackToConstraint{ Object *tar; 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*/ int reserved2; int flags; int pad; char subtarget[32]; } bTrackToConstraint; typedef struct bRotateLikeConstraint{ Object *tar; int flag; int reserved1; char subtarget[32]; } bRotateLikeConstraint; typedef struct bLocateLikeConstraint{ Object *tar; int flag; int reserved1; char subtarget[32]; } bLocateLikeConstraint; typedef struct bMinMaxConstraint{ Object *tar; int minmaxflag; float offset; int flag; short sticky, stuck, pad1, pad2; /* for backward compatability */ float cache[3]; char subtarget[32]; } bMinMaxConstraint; typedef struct bSizeLikeConstraint{ Object *tar; int flag; int reserved1; char subtarget[32]; } bSizeLikeConstraint; typedef struct bActionConstraint{ Object *tar; short type; short local; int start; int end; float min; float max; int pad; struct bAction *act; char subtarget[32]; } bActionConstraint; /* Locked Axis Tracking constraint */ typedef struct bLockTrackConstraint{ Object *tar; int trackflag; int lockflag; char subtarget[32]; } bLockTrackConstraint; /* Follow Path constraints */ typedef struct bFollowPathConstraint{ Object *tar; /* Must be path object */ float offset; /* Offset in time on the path (in frame) */ int followflag; int trackflag; int upflag; } bFollowPathConstraint; /* Distance Limiting constraints */ typedef struct bDistanceLimitConstraint{ Object *tar; char subtarget[32]; float pad1; float pad2; float distance; float offset[3]; } bDistanceLimitConstraint; /* Zero-target constraints */ typedef struct bRotationConstraint{ float xmin, xmax; float ymin, ymax; float zmin, zmax; } bRotationConstraint; /* Stretch to constraint */ typedef struct bStretchToConstraint{ Object *tar; int volmode; int plane; float orglength; float bulge; char subtarget[32]; } bStretchToConstraint; /* transform limiting constraints - zero target */ typedef struct bLocLimitConstraint{ float xmin, xmax; float ymin, ymax; float zmin, zmax; short flag; short flag2; } bLocLimitConstraint; typedef struct bRotLimitConstraint{ float xmin, xmax; float ymin, ymax; float zmin, zmax; short flag; short pad1; } bRotLimitConstraint; typedef struct bSizeLimitConstraint{ float xmin, xmax; float ymin, ymax; float zmin, zmax; short flag; short pad1; } bSizeLimitConstraint; /* Rigid Body constraint */ typedef struct bRigidBodyJointConstraint{ Object *tar; Object *child; int type; float pivX; float pivY; float pivZ; float axX; float axY; float axZ; float minLimit[6]; float maxLimit[6]; float extraFz; short flag; short pad; short pad1; short pad2; } bRigidBodyJointConstraint; /* ClampTo Constraint */ typedef struct bClampToConstraint { Object *tar; /* 'target' must be a curve */ int flag; /* which plane to find object on */ int pad; } bClampToConstraint; /* bConstraint.type */ #define CONSTRAINT_TYPE_NULL 0 #define CONSTRAINT_TYPE_CHILDOF 1 /* Unimplemented */ #define CONSTRAINT_TYPE_TRACKTO 2 #define CONSTRAINT_TYPE_KINEMATIC 3 #define CONSTRAINT_TYPE_FOLLOWPATH 4 #define CONSTRAINT_TYPE_ROTLIMIT 5 /* Unimplemented no longer :) - Aligorith */ #define CONSTRAINT_TYPE_LOCLIMIT 6 /* Unimplemented no longer :) - Aligorith */ #define CONSTRAINT_TYPE_SIZELIMIT 7 /* Unimplemented no longer :) - Aligorith */ #define CONSTRAINT_TYPE_ROTLIKE 8 #define CONSTRAINT_TYPE_LOCLIKE 9 #define CONSTRAINT_TYPE_SIZELIKE 10 #define CONSTRAINT_TYPE_PYTHON 11 /* Unimplemented */ #define CONSTRAINT_TYPE_ACTION 12 #define CONSTRAINT_TYPE_LOCKTRACK 13 /* New Tracking constraint that locks an axis in place - theeth */ #define CONSTRAINT_TYPE_DISTANCELIMIT 14 #define CONSTRAINT_TYPE_STRETCHTO 15 /* claiming this to be mine :) is in tuhopuu bjornmose */ #define CONSTRAINT_TYPE_MINMAX 16 /* floor constraint */ #define CONSTRAINT_TYPE_RIGIDBODYJOINT 17 /* rigidbody constraint */ #define CONSTRAINT_TYPE_CLAMPTO 18 /* clampto constraint */ /* bConstraint.flag */ /* expand for UI */ #define CONSTRAINT_EXPAND 0x01 /* pre-check for illegal object name or bone name */ #define CONSTRAINT_DISABLE 0x04 /* flags 0x2 and 0x8 were used in past, skip this */ /* to indicate which Ipo should be shown, maybe for 3d access later too */ #define CONSTRAINT_ACTIVE 0x10 /* only for Pose, evaluates constraints in posechannel local space */ #define CONSTRAINT_LOCAL 0x20 /* bConstraintChannel.flag */ #define CONSTRAINT_CHANNEL_SELECT 0x01 #define CONSTRAINT_CHANNEL_PROTECTED 0x02 /** * The flags for ROTLIKE, LOCLIKE and SIZELIKE should be kept identical * (that is, same effect, different name). It simplifies the Python API access a lot. */ /* bRotateLikeConstraint.flag */ #define ROTLIKE_X 0x01 #define ROTLIKE_Y 0x02 #define ROTLIKE_Z 0x04 #define ROTLIKE_X_INVERT 0x10 #define ROTLIKE_Y_INVERT 0x20 #define ROTLIKE_Z_INVERT 0x40 #define ROTLIKE_OFFSET 0x80 /* bLocateLikeConstraint.flag */ #define LOCLIKE_X 0x01 #define LOCLIKE_Y 0x02 #define LOCLIKE_Z 0x04 #define LOCLIKE_TIP 0x08 #define LOCLIKE_X_INVERT 0x10 #define LOCLIKE_Y_INVERT 0x20 #define LOCLIKE_Z_INVERT 0x40 #define LOCLIKE_OFFSET 0x80 /* bSizeLikeConstraint.flag */ #define SIZELIKE_X 0x01 #define SIZELIKE_Y 0x02 #define SIZELIKE_Z 0x04 #define SIZELIKE_OFFSET 0x80 /* Axis flags */ #define LOCK_X 0x00 #define LOCK_Y 0x01 #define LOCK_Z 0x02 #define UP_X 0x00 #define UP_Y 0x01 #define UP_Z 0x02 #define TRACK_X 0x00 #define TRACK_Y 0x01 #define TRACK_Z 0x02 #define TRACK_nX 0x03 #define TRACK_nY 0x04 #define TRACK_nZ 0x05 /* bTrackToConstraint->flags */ #define TARGET_Z_UP 0x01 #define VOLUME_XZ 0x00 #define VOLUME_X 0x01 #define VOLUME_Z 0x02 #define NO_VOLUME 0x03 #define PLANE_X 0x00 #define PLANE_Y 0x01 #define PLANE_Z 0x02 #define CLAMPTO_AUTO 0 #define CLAMPTO_X 1 #define CLAMPTO_Y 2 #define CLAMPTO_Z 3 /* bKinematicConstraint->flag */ #define CONSTRAINT_IK_TIP 1 #define CONSTRAINT_IK_ROT 2 #define CONSTRAINT_IK_AUTO 4 #define CONSTRAINT_IK_TEMP 8 #define CONSTRAINT_IK_STRETCH 16 #define CONSTRAINT_IK_POS 32 /* MinMax (floor) flags */ #define MINMAX_STICKY 0x01 #define MINMAX_STUCK 0x02 #define MINMAX_USEROT 0x04 /* transform limiting constraints -> flag */ #define LIMIT_XMIN 0x01 #define LIMIT_XMAX 0x02 #define LIMIT_YMIN 0x04 #define LIMIT_YMAX 0x08 #define LIMIT_ZMIN 0x10 #define LIMIT_ZMAX 0x20 #define LIMIT_XROT 0x01 #define LIMIT_YROT 0x02 #define LIMIT_ZROT 0x04 #define LIMIT_NOPARENT 0x01 #define CONSTRAINT_DRAW_PIVOT 0x40 /* important: these defines need to match up with PHY_DynamicTypes headerfile */ #define CONSTRAINT_RB_BALL 1 #define CONSTRAINT_RB_HINGE 2 #define CONSTRAINT_RB_VEHICLE 11 #define CONSTRAINT_RB_GENERIC6DOF 12 #endif