Particles
[blender-staging.git] / source / blender / makesdna / DNA_object_types.h
index 4fb5bd6c5c3443ee491765662d250b7fb845f207..5b875780f8b77856cc89c32ca7332890a1443cef 100644 (file)
@@ -51,19 +51,24 @@ struct BoundBox;
 struct Path;
 struct Material;
 struct bConstraintChannel;
+struct PartDeflect;
+struct SoftBody;
+struct FluidsimSettings;
+struct ParticleSystem;
+struct DerivedMesh;
 
 typedef struct bDeformGroup {
        struct bDeformGroup *next, *prev;
        char name[32];
-       void *data;     /* Temporary data, most likely a pointer to the bone - no need to delete */
 } bDeformGroup;
 
-#
-#
 typedef struct BoundBox {
        float vec[8][3];
+       int flag, pad;
 } BoundBox;
 
+/* boundbox flag */
+#define OB_BB_DISABLED 1
 
 typedef struct Object {
        ID id;
@@ -71,8 +76,10 @@ typedef struct Object {
        short type, partype;
        int par1, par2, par3;   /* can be vertexnrs */
        char parsubstr[32];     /* String describing subobject info */
-       void *pardata;
        struct Object *parent, *track;
+       /* if ob->proxy (or proxy_group), this object is proxy for object ob->proxy */
+       /* proxy_from is set in target back to the proxy. */
+       struct Object *proxy, *proxy_group, *proxy_from;
        struct Ipo *ipo;
        struct Path *path;
        struct BoundBox *bb;
@@ -80,13 +87,12 @@ typedef struct Object {
        struct bPose *pose;     
        void *data;
        
-       struct bConstraintChannel *activecon;           
        ListBase constraintChannels;
-
        ListBase effect;
-       ListBase network;
        ListBase disp;
        ListBase defbase;
+       ListBase modifiers; /* list of ModifierData structures */
+       
        struct Material **mat;
        
        /* rot en drot have to be together! (transform('r' en 's')) */
@@ -95,18 +101,22 @@ typedef struct Object {
        float rot[3], drot[3];
        float quat[4], dquat[4];
        float obmat[4][4];
-       float parentinv[4][4];
+       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  */
        
        unsigned int lay;                               /* copy of Base */
+       
        short flag;                     /* copy of Base */
        short colbits;          /* when zero, from obdata */
-       char transflag, ipoflag;
-       char trackflag, upflag;
-       short ipowin, scaflag;  /* ipowin: blocktype last ipowindow */
+       
+       short transflag, ipoflag;       /* transformation and ipo settings */
+       short trackflag, upflag;
+       short nlaflag, protectflag;     /* nlaflag defines NLA override, protectflag is bits to lock transform */
+       short ipowin, scaflag;          /* ipowin: blocktype last ipowindow */
        short scavisflag, boundtype;
        
-       short dupon, dupoff, dupsta, dupend;
+       int dupon, dupoff, dupsta, dupend;
 
        float sf, ctime;
        
@@ -125,12 +135,14 @@ typedef struct Object {
         * For a Sphere, the form factor is by default = 0.4
         */
 
-       float formfactor, dummy_1;      
+       float formfactor;
        float rdamping, sizefac;
        
        char dt, dtx;
        char totcol;    /* copy of mesh or curve or meta */
-       char actcol;
+       char actcol;    /* currently selected material in the user interface */
+       char empty_drawtype, pad1[7];
+       float empty_drawsize;
        
        ScriptLink scriptlink;
        ListBase prop;
@@ -138,12 +150,14 @@ typedef struct Object {
        ListBase controllers;
        ListBase actuators;
 
-    void *sumohandle;
+       /* now used to store cache particles,
+        * should be renamed see effect.c (Campbell) */
+    void *sumohandle;          
     
        float bbsize[3];
-       short dfras;
+       short index;                    /* custom index, for renderpasses */
        unsigned short actdef;  /* current deformation group */
-       float col[4];
+       float col[4];                   /* object color, adjusted via IPO's only */
        /**
         * Settings for game objects
         * bit 0: Object has dynamic behaviour
@@ -153,6 +167,7 @@ typedef struct Object {
         * bit 8: Friction is anisotropic
         * bit 9: Object is a ghost
         * bit 10: Do rigid body dynamics.
+        * bit 11: Use bounding object for physics
         */
        int gameflag;
        /**
@@ -160,27 +175,65 @@ typedef struct Object {
         * bit 15: Always ignore activity culling 
         */
        int gameflag2;
-       int pad;
+       short softflag;                 /* softboday settings */
+       short recalc;                   /* dependency flag */
        float anisotropicFriction[3];
 
        ListBase constraints;
        ListBase nlastrips;
+       ListBase hooks;
+       ListBase particlesystem;        /* particle systems */
+       
+       struct PartDeflect *pd;         /* particle deflector/attractor/collision data */
+       struct SoftBody *soft;          /* if exists, saved in file */
+       struct Group *dup_group;        /* object duplicator for group */
+       
+       short fluidsimFlag;                     /* NT toggle fluidsim participation on/off */
+       
+       short restrictflag;                     /* for restricting view, select, render etc. accessible in outliner */
+
+       short shapenr, shapeflag;       /* current shape key for menu or pinned, flag for pinning */
+       float smoothresh;                       /* smoothresh is phong interpolation ray_shadow correction in render */
+       short recalco, pad4;            /* recalco for temp storage of ob->recalc, bad design warning */
+       
+       struct FluidsimSettings *fluidsimSettings; /* if fluidsim enabled, store additional settings */
+
+       struct DerivedMesh *derivedDeform, *derivedFinal;
+       int lastDataMask;                       /* the custom data layer mask that was last used to calculate derivedDeform and derivedFinal */
+       int pad;
+
+/*#ifdef WITH_VERSE*/
+       void *vnode;                    /* pointer at object VerseNode */
+/*#endif*/
 } Object;
 
+/* Warning, this is not used anymore because hooks are now modifiers */
+typedef struct ObHook {
+       struct ObHook *next, *prev;
+       
+       struct Object *parent;
+       float parentinv[4][4];  /* matrix making current transform unmodified */
+       float mat[4][4];                /* temp matrix while hooking */
+       float cent[3];                  /* visualization of hook */
+       float falloff;                  /* if not zero, falloff is distance where influence zero */
+       
+       char name[32];
+
+       int *indexar;
+       int totindex, curindex; /* curindex is cache for fast lookup */
+       short type, active;             /* active is only first hook, for button menu */
+       float force;
+} ObHook;
+
+
 /* this work object is defined in object.c */
 extern Object workob;
 
 
 /* **************** OBJECT ********************* */
 
-/* used many places... should be specialized */
+/* used many places... should be specialized  */
 #define SELECT                 1
-#define ACTIVE                 2
-#define GONNA_MOVE     32 /* temporary, for figuring what stuff needs
-                                                  * updating during transform due to parenting
-                                                  * or constraints... do not rely on this value
-                                                  * unless you are me (CW).
-                                                  */
 
 /* type */
 #define OB_EMPTY               0
@@ -193,37 +246,40 @@ extern Object workob;
 #define OB_LAMP                        10
 #define OB_CAMERA              11
 
-#define OB_IKA                 20
 #define OB_WAVE                        21
 #define OB_LATTICE             22
 
 /* 23 and 24 are for life and sector (old file compat.) */
 #define        OB_ARMATURE             25
 
-/* partype: eerste 5 bits: type */
+/* partype: first 4 bits: type */
 #define PARTYPE                        15
 #define PAROBJECT              0
 #define PARCURVE               1
 #define PARKEY                 2
-#define PARLIMB                        3
+
 #define PARSKEL                        4
 #define PARVERT1               5
 #define PARVERT3               6
 #define PARBONE                        7
 #define PARSLOW                        16
 
-/* char! transflag */
-#define OB_OFFS_LOCAL  1
-#define OB_QUAT                        2
-#define OB_DUPLI               (8+16)
-#define OB_DUPLIFRAMES 8
-#define OB_DUPLIVERTS  16
-#define OB_DUPLIROT            32
-#define OB_DUPLINOSPEED        64
-
-#define OB_POWERTRACK  128
-
-/* char! ipoflag */
+/* (short) transflag */
+#define OB_OFFS_LOCAL          1
+#define OB_QUAT                                2
+#define OB_NEG_SCALE           4
+#define OB_DUPLI                       (8+16+256+512+2048)
+#define OB_DUPLIFRAMES         8
+#define OB_DUPLIVERTS          16
+#define OB_DUPLIROT                    32
+#define OB_DUPLINOSPEED                64
+#define OB_POWERTRACK          128
+#define OB_DUPLIGROUP          256
+#define OB_DUPLIFACES          512
+#define OB_DUPLIFACES_SCALE    1024
+#define OB_DUPLIPARTS          2048
+
+/* (short) ipoflag */
 #define OB_DRAWKEY                     1
 #define OB_DRAWKEYSEL          2
 #define OB_OFFS_OB                     4
@@ -232,9 +288,13 @@ extern Object workob;
 #define OB_OFFS_PATH           32
 #define OB_OFFS_PARENT         64
 #define OB_OFFS_PARTICLE       128
+       /* get ipo from from action or not? */
+#define OB_ACTION_OB           256
+#define OB_ACTION_KEY          512
+       /* for stride edit */
+#define OB_DISABLE_PATH                1024
 
-
-/* trackflag / upflag */
+/* (short) trackflag / upflag */
 #define OB_POSX                        0
 #define OB_POSY                        1
 #define OB_POSZ                        2
@@ -244,19 +304,34 @@ extern Object workob;
 
 /* gameflag in game.h */
 
-/* dt: nummers */
+/* dt: no flags */
 #define OB_BOUNDBOX            1
 #define OB_WIRE                        2
 #define OB_SOLID               3
 #define OB_SHADED              4
 #define OB_TEXTURE             5
 
-/* dtx: flags */
+/* this condition has been made more complex since editmode can draw textures */
+#define CHECK_OB_DRAWTEXTURE(vd, dt)   ((vd->drawtype==OB_TEXTURE && dt>OB_SOLID) || (vd->drawtype==OB_SOLID && vd->flag2 & V3D_SOLID_TEX))
+
+/* dtx: flags, char! */
 #define OB_AXIS                        2
 #define OB_TEXSPACE            4
 #define OB_DRAWNAME            8
 #define OB_DRAWIMAGE   16
-#define OB_DRAWWIRE            32 /* for solid+wire display */
+       /* for solid+wire display */
+#define OB_DRAWWIRE            32
+       /* for overdraw */
+#define OB_DRAWXRAY            64
+       /* enable transparent draw */
+#define OB_DRAWTRANSP  128
+
+/* empty_drawtype: no flags */
+#define OB_ARROWS              1
+#define OB_PLAINAXES   2
+#define OB_CIRCLE              3
+#define OB_SINGLE_ARROW        4
+#define OB_CUBE                        5
 
 /* boundtype */
 #define OB_BOUND_BOX           0
@@ -264,22 +339,39 @@ extern Object workob;
 #define OB_BOUND_CYLINDER      2
 #define OB_BOUND_CONE          3
 #define OB_BOUND_POLYH         4
+#define OB_BOUND_POLYT         5
+#define OB_BOUND_DYN_MESH   6
+
+
+/* **************** BASE ********************* */
 
 /* also needed for base!!!!! or rather, thy interfere....*/
-/* base->flag en ob->flag */
-#define BA_WASSEL                      2
-#define BA_PARSEL                      4
-#define BA_WHERE_UPDATE                8
-#define BA_DISP_UPDATE         16
+/* base->flag and ob->flag */
+#define BA_WAS_SEL                     2
+#define BA_HAS_RECALC_OB       4
+#define BA_HAS_RECALC_DATA     8
+
 #define BA_DO_IPO                      32
+
 #define BA_FROMSET                     128
-#define OB_DO_IMAT                     256
+
+/* an initial attempt as making selection more specific! */
+#define BA_DESELECT    0
+#define BA_SELECT              1
+
+
 #define OB_FROMDUPLI           512
 #define OB_DONE                                1024
 #define OB_RADIO                       2048
 #define OB_FROMGROUP           4096
-/* yafray: flag to indicate this object is a source object for duplivert instancing, see convertBlenderScene.c */
-#define OB_YAF_DUPLISOURCE     8192
+#define OB_POSEMODE                    8192
+
+/* ob->recalc (flag bits!) */
+#define OB_RECALC_OB           1
+#define OB_RECALC_DATA         2
+               /* time flag is set when time changes need recalc, so baked systems can ignore it */
+#define OB_RECALC_TIME         4
+#define OB_RECALC                      7
 
 /* ob->gameflag */
 #define OB_DYNAMIC             1
@@ -293,6 +385,7 @@ extern Object workob;
 #define OB_ANISOTROPIC_FRICTION 256
 #define OB_GHOST                       512
 #define OB_RIGID_BODY          1024
+#define OB_BOUNDS              2048
 
 #define OB_COLLISION_RESPONSE  4096
 #define OB_SECTOR              8192
@@ -317,6 +410,33 @@ extern Object workob;
 #define OB_ADDACT              1024
 #define OB_SHOWCONT            2048
 
+/* ob->restrictflag */
+#define OB_RESTRICT_VIEW       1
+#define OB_RESTRICT_SELECT     2
+#define OB_RESTRICT_RENDER     4
+
+/* ob->shapeflag */
+#define OB_SHAPE_LOCK          1
+#define OB_SHAPE_TEMPLOCK      2
+
+/* ob->nlaflag */
+#define OB_NLA_OVERRIDE                1
+#define OB_NLA_COLLAPSED       2
+
+/* ob->protectflag */
+#define OB_LOCK_LOCX   1
+#define OB_LOCK_LOCY   2
+#define OB_LOCK_LOCZ   4
+#define OB_LOCK_LOC            7
+#define OB_LOCK_ROTX   8
+#define OB_LOCK_ROTY   16
+#define OB_LOCK_ROTZ   32
+#define OB_LOCK_SCALEX 64
+#define OB_LOCK_SCALEY 128
+#define OB_LOCK_SCALEZ 256
+
+/* ob->softflag in DNA_object_force.h */
+
 #ifdef __cplusplus
 }
 #endif