NLA SoC: Merge from 2.5
[blender-staging.git] / source / blender / makesdna / DNA_constraint_types.h
index bf512c3faf81e6bf7f2409eed85fca68a92e9dc2..79f032d0d21040334c471bfb1198d514d138bc88 100644 (file)
@@ -1,15 +1,12 @@
 /**
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL 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.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -27,7 +24,7 @@
  *
  * Contributor(s): 2007, Joshua Leung, major recode
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  * Constraint DNA data
  */
 
@@ -41,6 +38,7 @@
 
 struct Action;
 struct Text;
+struct Ipo;
 
 /* channels reside in Object or Action (ListBase) constraintChannels */
 typedef struct bConstraintChannel {
@@ -66,6 +64,7 @@ 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 */
 } bConstraint;
 
 
@@ -124,7 +123,8 @@ 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 */
+       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 */
@@ -292,7 +292,7 @@ typedef struct bRotLimitConstraint {
        float           ymin, ymax;
        float           zmin, zmax;
        short           flag;
-       short           pad1;
+       short           flag2;
 } bRotLimitConstraint;
 
 /* Limit Scaling Constraint */
@@ -301,9 +301,31 @@ typedef struct bSizeLimitConstraint {
        float           ymin, ymax;
        float           zmin, zmax;
        short           flag;
-       short           pad1;
+       short           flag2;
 } bSizeLimitConstraint;
 
+/* Limit Distance Constraint */
+typedef struct bDistLimitConstraint {
+       Object          *tar;
+       char            subtarget[32];
+       
+       float           dist;                   /* distance (radius of clamping sphere) from target */
+       float           soft;                   /* distance from clamping-sphere to start applying 'fade' */
+       
+       short           flag;                   /* settings */
+       short           mode;                   /* how to limit in relation to clamping sphere */
+       int             pad;
+} bDistLimitConstraint;
+
+typedef struct bShrinkwrapConstraint {
+       Object          *target;
+       float           dist;                   /* distance to kept from target */
+       short           shrinkType;             /* shrink type (look on MOD shrinkwrap for values) */
+       char            projAxis;               /* axis to project over UP_X, UP_Y, UP_Z */
+       char            pad[9];
+} bShrinkwrapConstraint;
+
+
 /* ------------------------------------------ */
 
 /* bConstraint->type 
@@ -325,15 +347,17 @@ typedef enum B_CONSTAINT_TYPES {
        CONSTRAINT_TYPE_PYTHON,                         /* Unimplemented no longer :) - Aligorith. Scripts */
        CONSTRAINT_TYPE_ACTION,
        CONSTRAINT_TYPE_LOCKTRACK,                      /* New Tracking constraint that locks an axis in place - theeth */
-       CONSTRAINT_TYPE_DISTANCELIMIT,          /* was never properly coded - removed! */
+       CONSTRAINT_TYPE_DISTLIMIT,                      /* limit distance */
        CONSTRAINT_TYPE_STRETCHTO,                      /* claiming this to be mine :) is in tuhopuu bjornmose */ 
        CONSTRAINT_TYPE_MINMAX,                         /* floor constraint */
        CONSTRAINT_TYPE_RIGIDBODYJOINT,         /* rigidbody constraint */
        CONSTRAINT_TYPE_CLAMPTO,                        /* clampto constraint */        
        CONSTRAINT_TYPE_TRANSFORM,                      /* transformation (loc/rot/size -> loc/rot/size) constraint */  
+       CONSTRAINT_TYPE_SHRINKWRAP,                     /* shrinkwrap (loc/rot) constraint */
+       
        
        /* NOTE: everytime a new constraint is added, update this */
-       NUM_CONSTRAINT_TYPES= CONSTRAINT_TYPE_TRANSFORM
+       NUM_CONSTRAINT_TYPES= CONSTRAINT_TYPE_SHRINKWRAP
 } B_CONSTRAINT_TYPES; 
 
 /* bConstraint->flag */
@@ -347,7 +371,11 @@ typedef enum B_CONSTRAINT_FLAG {
                /* to indicate which Ipo should be shown, maybe for 3d access later too */      
        CONSTRAINT_ACTIVE =     (1<<4), 
                /* to indicate that the owner's space should only be changed into ownspace, but not out of it */
-       CONSTRAINT_SPACEONCE =  (1<<6)  
+       CONSTRAINT_SPACEONCE =  (1<<6),
+               /* 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)
 } B_CONSTRAINT_FLAG;
 
 /* bConstraint->ownspace/tarspace */
@@ -357,11 +385,13 @@ typedef enum B_CONSTRAINT_SPACETYPES {
                /* for objects (relative to parent/without parent influence), 
                 * for bones (along normals of bone, without parent/restpositions) 
                 */
-       CONSTRAINT_SPACE_LOCAL,
+       CONSTRAINT_SPACE_LOCAL, /* = 1 */
                /* for posechannels - pose space  */
-       CONSTRAINT_SPACE_POSE,
-               /* for posechannels - local with parent  */
-       CONSTRAINT_SPACE_PARLOCAL,
+       CONSTRAINT_SPACE_POSE, /* = 2 */
+               /* for posechannels - local with parent  */
+       CONSTRAINT_SPACE_PARLOCAL, /* = 3 */
+               /* for files from between 2.43-2.46 (should have been parlocal) */
+       CONSTRAINT_SPACE_INVALID, /* = 4. do not exchange for anything! */
 } B_CONSTRAINT_SPACETYPES;
 
 /* bConstraintChannel.flag */
@@ -443,7 +473,9 @@ typedef enum B_CONSTRAINTCHANNEL_FLAG {
 /* bKinematicConstraint->flag */
 #define CONSTRAINT_IK_TIP              1
 #define CONSTRAINT_IK_ROT              2
+       /* targetless */
 #define CONSTRAINT_IK_AUTO             4
+       /* autoik */
 #define CONSTRAINT_IK_TEMP             8
 #define CONSTRAINT_IK_STRETCH  16
 #define CONSTRAINT_IK_POS              32
@@ -467,9 +499,20 @@ typedef enum B_CONSTRAINTCHANNEL_FLAG {
 #define LIMIT_YROT 0x02
 #define LIMIT_ZROT 0x04
 
-/* not used anymore - for older Limit Location constraints only */
+       /* not used anymore - for older Limit Location constraints only */
 #define LIMIT_NOPARENT 0x01
+       /* for all Limit constraints - allow to be used during transform? */
+#define LIMIT_TRANSFORM 0x02
 
+/* distance limit constraint */
+       /* bDistLimitConstraint->flag */
+#define LIMITDIST_USESOFT              (1<<0)
+
+       /* bDistLimitConstraint->mode */
+#define LIMITDIST_INSIDE               0
+#define LIMITDIST_OUTSIDE              1
+#define LIMITDIST_ONSURFACE            2
+       
 /* python constraint -> flag */
 #define PYCON_USETARGETS       0x01
 #define PYCON_SCRIPTERROR      0x02
@@ -487,6 +530,7 @@ typedef enum B_CONSTRAINTCHANNEL_FLAG {
 
 /* Rigid-Body Constraint */
 #define CONSTRAINT_DRAW_PIVOT 0x40
+#define CONSTRAINT_DISABLE_LINKED_COLLISION 0x80
 
 /* important: these defines need to match up with PHY_DynamicTypes headerfile */
 #define CONSTRAINT_RB_BALL             1