merge with trunk at r27259 and commit of a patch by anthony jones to fix msvc (though...
[blender-staging.git] / source / blender / makesdna / DNA_object_types.h
index a89f8e1fb2ecd7fa7e44871358af11be18b0074e..3be057959b68ccdaba40b80146e9bf8e793acccb 100644 (file)
@@ -19,7 +19,7 @@
  *
  * 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.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
 
 #include "DNA_listBase.h"
 #include "DNA_ID.h"
+#include "DNA_action_types.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
-
-struct bPose;  
+       
 struct Object;
 struct AnimData;
 struct Ipo;
@@ -115,6 +115,9 @@ typedef struct Object {
        
        struct bGPdata *gpd;    /* Grease Pencil data */
        
+       bAnimVizSettings avs;   /* settings for visualisation of object-transform animation */
+       bMotionPath *mpath;             /* motion path cache for this object */
+       
        ListBase constraintChannels; // XXX depreceated... old animation system
        ListBase effect;
        ListBase disp;
@@ -126,19 +129,21 @@ typedef struct Object {
 
        /* materials */
        struct Material **mat;  /* material slots */
-       char *matbits;                  /* 1 if material linked to object */
+       char *matbits;  /* a bitfield, with each bit 1 if corrusponding material linked to object */
        int totcol;                             /* copy of mesh or curve or meta */
        int actcol;                             /* currently selected material in the UI */
        
        /* rot en drot have to be together! (transform('r' en 's')) */
        float loc[3], dloc[3], orig[3];
-       float size[3], dsize[3];
-       float rot[3], drot[3];
-       /* float quat[4], dquat[4]; (not used yet) */
-       float obmat[4][4];
+       float size[3], dsize[3];        /* scale and delta scale */
+       float rot[3], drot[3];          /* euler rotation */
+       float quat[4], dquat[4];        /* quaternion rotation */
+       float rotAxis[3], drotAxis[3];  /* axis angle rotation - axis part */
+       float rotAngle, drotAngle;      /* axis angle rotation - angle part */
+       float obmat[4][4];              /* final worldspace matrix with constraints & animsys applied */
        float parentinv[4][4]; /* inverse result of parent, so that object doesn't 'stick' to parent */
        float constinv[4][4]; /* inverse result of constraints. doesn't include effect of parent or object local transform */
-       float imat[4][4];       /* for during render, old game engine, temporally: ipokeys of transform  */
+       float imat[4][4];       /* inverse matrix of 'obmat' for during render, old game engine, temporally: ipokeys of transform  */
        
        unsigned int lay;                               /* copy of Base */
        
@@ -176,9 +181,11 @@ typedef struct Object {
        float max_vel; /* clamp the maximum velocity 0.0 is disabled */
        float min_vel; /* clamp the maximum velocity 0.0 is disabled */
        float m_contactProcessingThreshold;
-
+       
+       short rotmode;          /* rotation mode - uses defines set out in DNA_action_types.h for PoseChannel rotations... */
+       
        char dt, dtx;
-       char empty_drawtype, pad1[5];
+       char empty_drawtype, pad1[3];
        float empty_drawsize;
        float dupfacesca;       /* dupliface scale */
        
@@ -189,7 +196,7 @@ typedef struct Object {
     
        float bbsize[3];
        short index;                    /* custom index, for renderpasses */
-       unsigned short actdef;  /* current deformation group */
+       unsigned short actdef;  /* current deformation group, note: index starts at 1 */
        float col[4];                   /* object color, adjusted via IPO's only */
        /**
         * Settings for game objects
@@ -243,6 +250,7 @@ typedef struct Object {
 
        ListBase gpulamp;               /* runtime, for lamps only */
        ListBase pc_ids;
+       ListBase *duplilist;    /* for temporary dupli list storage, only for use by RNA API */
 } Object;
 
 /* Warning, this is not used anymore because hooks are now modifiers */
@@ -263,6 +271,14 @@ typedef struct ObHook {
        float force;
 } ObHook;
 
+typedef struct DupliObject {
+       struct DupliObject *next, *prev;
+       struct Object *ob;
+       unsigned int origlay;
+       int index, no_draw, type, animated;
+       float mat[4][4], omat[4][4];
+       float orco[3], uv[2];
+} DupliObject;
 
 /* this work object is defined in object.c */
 extern Object workob;
@@ -304,6 +320,7 @@ extern Object workob;
 
 /* (short) transflag */
 #define OB_OFFS_LOCAL          1
+       // XXX OB_QUAT was never used, but is now depreceated in favour of standard rotation handling...
 #define OB_QUAT                                2
 #define OB_NEG_SCALE           4
 #define OB_DUPLI                       (8+16+256+512+2048)
@@ -317,6 +334,7 @@ extern Object workob;
 #define OB_DUPLIFACES_SCALE    1024
 #define OB_DUPLIPARTS          2048
 #define OB_RENDER_DUPLI                4096
+#define OB_NO_CONSTRAINTS      8192 /* runtime constraints disable */
 
 /* (short) ipoflag */
        // XXX depreceated - old animation system crap
@@ -393,11 +411,13 @@ extern Object workob;
 #define BA_HAS_RECALC_OB       4
 #define BA_HAS_RECALC_DATA     8
 
+       // XXX DEPRECEATED SETTING...
 #define BA_DO_IPO                      32
 
 #define BA_FROMSET                     128
 
 #define BA_TRANSFORM_CHILD     256 /* child of a transformed object */
+#define BA_TRANSFORM_PARENT    8192 /* parent of a transformed object */
 
 /* an initial attempt as making selection more specific! */
 #define BA_DESELECT    0
@@ -406,7 +426,7 @@ extern Object workob;
 
 #define OB_FROMDUPLI           512
 #define OB_DONE                                1024
-#define OB_RADIO                       2048
+// #define OB_RADIO                    2048    /* deprecated */
 #define OB_FROMGROUP           4096
 
 /* ob->recalc (flag bits!) */
@@ -484,7 +504,8 @@ extern Object workob;
 
 /* ob->shapeflag */
 #define OB_SHAPE_LOCK          1
-#define OB_SHAPE_TEMPLOCK      2
+#define OB_SHAPE_TEMPLOCK      2               // deprecated
+#define OB_SHAPE_EDIT_MODE     4
 
 /* ob->nlaflag */
        // XXX depreceated - old animation system