Merge of itasc branch. Project files, scons and cmake should be working. Makefile...
[blender.git] / source / blender / makesdna / DNA_constraint_types.h
index 79f032d..fccec7a 100644 (file)
@@ -64,7 +64,11 @@ typedef struct bConstraint {
        float           enforce;        /*      Amount of influence exherted by constraint (0.0-1.0) */
        float           headtail;       /*      Point along subtarget bone where the actual target is. 0=head (default for all), 1=tail*/
        int                     pad;
-       struct Ipo *ipo;                /* local influence ipo or driver */
+       
+       struct Ipo *ipo;                /* local influence ipo or driver */ // XXX depreceated for 2.5... old animation system hack
+       /* below are readonly fields that are set at runtime by the solver for use in the GE (only IK atm) */
+       float       lin_error;          /* residual error on constraint expressed in blender unit*/
+       float       rot_error;          /* residual error on constraint expressed in radiant */
 } bConstraint;
 
 
@@ -85,7 +89,7 @@ typedef struct bConstraintTarget {
        short space;                    /* space that target should be evaluated in (overrides bConstraint->tarspace) */
        short flag;                             /* runtime settings (for editor, etc.) */
        short type;                             /* type of target (B_CONSTRAINT_OB_TYPE) */
-       short pad;
+       short rotOrder;                 /* rotation order for target (as defined in BLI_arithb.h) */
 } bConstraintTarget;
 
 /* bConstraintTarget -> flag */
@@ -118,24 +122,34 @@ typedef struct bPythonConstraint {
 } bPythonConstraint;
 
 
-/* Inverse-Kinematics (IK) constraint */
+/* inverse-Kinematics (IK) constraint
+   This constraint supports a variety of mode determine by the type field 
+   according to B_CONSTRAINT_IK_TYPE.
+   Some fields are used by all types, some are specific to some types
+   This is indicated in the comments for each field
+ */
 typedef struct bKinematicConstraint {
-       Object          *tar;
-       short           iterations;             /* Maximum number of iterations to try */
-       short           flag;                   /* Like CONSTRAINT_IK_TIP */
-       short           rootbone;               /* index to rootbone, if zero go all the way to mother bone */
-       short           max_rootbone;   /* for auto-ik, maximum length of chain */
-       char            subtarget[32];  /* String to specify sub-object target */
-
-       Object          *poletar;                       /* Pole vector target */
-       char            polesubtarget[32];      /* Pole vector sub-object target */
-       float           poleangle;                      /* Pole vector rest angle */
-
-       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 */
+       Object          *tar;                   /* All: target object in case constraint needs a target */
+       short           iterations;             /* All: Maximum number of iterations to try */
+       short           flag;                   /* All & CopyPose: some options Like CONSTRAINT_IK_TIP */
+       short           rootbone;               /* All: index to rootbone, if zero go all the way to mother bone */
+       short           max_rootbone;   /* CopyPose: for auto-ik, maximum length of chain */
+       char            subtarget[32];  /* All: String to specify sub-object target */
+       Object          *poletar;                       /* All: Pole vector target */
+       char            polesubtarget[32];      /* All: Pole vector sub-object target */
+       float           poleangle;                      /* All: Pole vector rest angle */
+       float           weight;                 /* All: Weight of constraint in IK tree */
+       float           orientweight;   /* CopyPose: Amount of rotation a target applies on chain */
+       float           grabtarget[3];  /* CopyPose: for target-less IK */
+       short           type;                   /* subtype of IK constraint: B_CONSTRAINT_IK_TYPE */
+       short           mode;                   /* Distance: how to limit in relation to clamping sphere: LIMITDIST_.. */
+       float           dist;                   /* Distance: distance (radius of clamping sphere) from target */
 } bKinematicConstraint;
 
+typedef enum B_CONSTRAINT_IK_TYPE {
+       CONSTRAINT_IK_COPYPOSE = 0,             /* 'standard' IK constraint: match position and/or orientation of target */
+       CONSTRAINT_IK_DISTANCE                  /* maintain distance with target */
+} B_CONSTRAINT_IK_TYPE;
 
 /* Single-target subobject constraints ---------------------  */
 /* Track To Constraint */
@@ -375,7 +389,9 @@ typedef enum B_CONSTRAINT_FLAG {
                /* influence ipo is on constraint itself, not in action channel */
        CONSTRAINT_OWN_IPO      = (1<<7),
                /* indicates that constraint was added locally (i.e.  didn't come from the proxy-lib) */
-       CONSTRAINT_PROXY_LOCAL = (1<<8)
+       CONSTRAINT_PROXY_LOCAL = (1<<8),
+               /* indicates that constraint is temporarily disabled (only used in GE) */
+       CONSTRAINT_OFF = (1<<9)
 } B_CONSTRAINT_FLAG;
 
 /* bConstraint->ownspace/tarspace */
@@ -449,6 +465,11 @@ typedef enum B_CONSTRAINTCHANNEL_FLAG {
 #define TRACK_nY       0x04
 #define TRACK_nZ       0x05
 
+/* FollowPath flags */
+#define FOLLOWPATH_FOLLOW      0x01
+#define FOLLOWPATH_STATIC      0x02
+#define FOLLOWPATH_RADIUS      0x04
+
 /* bTrackToConstraint->flags */
 #define TARGET_Z_UP 0x01