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 fa594417a174bcec67ddcecd2f86aea835b5357a..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;
@@ -53,7 +53,11 @@ struct SoftBody;
 struct FluidsimSettings;
 struct ParticleSystem;
 struct DerivedMesh;
+struct SculptSession;
+struct bGPdata;
+
 
+/* Vertex Groups - Name Info */
 typedef struct bDeformGroup {
        struct bDeformGroup *next, *prev;
        char name[32];
@@ -91,6 +95,8 @@ typedef struct BoundBox {
 typedef struct Object {
        ID id;
        struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
+
+       struct SculptSession *sculpt;
        
        short type, partype;
        int par1, par2, par3;   /* can be vertexnrs */
@@ -107,12 +113,20 @@ typedef struct Object {
        struct bPose *pose;     
        void *data;
        
+       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;
        ListBase defbase;
        ListBase modifiers; /* list of ModifierData structures */
 
+       int mode;           /* Local object mode */
+       int restore_mode;   /* Keep track of what mode to return to after toggling a mode */
+
        /* materials */
        struct Material **mat;  /* material slots */
        char *matbits;  /* a bitfield, with each bit 1 if corrusponding material linked to object */
@@ -121,13 +135,15 @@ typedef struct Object {
        
        /* 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 */
        
@@ -165,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 */
        
@@ -178,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
@@ -203,7 +221,7 @@ typedef struct Object {
        short recalc;                   /* dependency flag */
        float anisotropicFriction[3];
 
-       ListBase constraints;
+       ListBase constraints;           /* object constraints */
        ListBase nlastrips;                     // XXX depreceated... old animation system
        ListBase hooks;
        ListBase particlesystem;        /* particle systems */
@@ -227,9 +245,12 @@ typedef struct Object {
        int lastDataMask;                       /* the custom data layer mask that was last used to calculate derivedDeform and derivedFinal */
        unsigned int state;                     /* bit masks of game controllers that are active */
        unsigned int init_state;        /* bit masks of initial state as recorded by the users */
+
        int pad2;
 
        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 */
@@ -250,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;
@@ -291,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)
@@ -304,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
@@ -380,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
@@ -393,9 +426,8 @@ extern Object workob;
 
 #define OB_FROMDUPLI           512
 #define OB_DONE                                1024
-#define OB_RADIO                       2048
+// #define OB_RADIO                    2048    /* deprecated */
 #define OB_FROMGROUP           4096
-#define OB_POSEMODE                    8192
 
 /* ob->recalc (flag bits!) */
 #define OB_RECALC_OB           1
@@ -472,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
@@ -503,8 +536,20 @@ extern Object workob;
 #define OB_LOCK_SCALEY 128
 #define OB_LOCK_SCALEZ 256
 #define OB_LOCK_SCALE  448
-
-/* ob->softflag in DNA_object_force.h */
+#define OB_LOCK_ROTW   512
+#define OB_LOCK_ROT4D  1024
+
+/* ob->mode */
+typedef enum ObjectMode {
+       OB_MODE_OBJECT = 0,
+       OB_MODE_EDIT = 1,
+       OB_MODE_SCULPT = 2,
+       OB_MODE_VERTEX_PAINT = 4,
+       OB_MODE_WEIGHT_PAINT = 8,
+       OB_MODE_TEXTURE_PAINT = 16,
+       OB_MODE_PARTICLE_EDIT = 32,
+       OB_MODE_POSE = 64
+} ObjectMode;
 
 #ifdef __cplusplus
 }