2.5: Modifiers & Menus
[blender-staging.git] / source / blender / makesdna / DNA_modifier_types.h
index ac12a09c0eebb710313287fe83dc7ada0059d961..912d11dcc8c88225f34b709bb4db237c9954e536 100644 (file)
@@ -36,7 +36,13 @@ typedef enum ModifierType {
        eModifierType_Collision,
        eModifierType_Bevel,
        eModifierType_Shrinkwrap,
+       eModifierType_Fluidsim,
+       eModifierType_Mask,
        eModifierType_SimpleDeform,
+       eModifierType_Multires,
+       eModifierType_Surface,
+       eModifierType_Smoke,
+       eModifierType_SmokeHR,
        NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -55,7 +61,10 @@ typedef struct ModifierData {
 
        int type, mode;
        char name[32];
-
+       
+       /* XXX for timing info set by caller... solve later? (ton) */
+       struct Scene *scene;
+       
        char *error;
 } ModifierData;
 
@@ -105,6 +114,24 @@ typedef struct BuildModifierData {
        int randomize, seed;
 } BuildModifierData;
 
+/* Mask Modifier */
+typedef struct MaskModifierData {
+       ModifierData modifier;
+       
+       struct Object *ob_arm;  /* armature to use to in place of hardcoded vgroup */
+       char vgroup[32];                /* name of vertex group to use to mask */
+       
+       int mode;                               /* using armature or hardcoded vgroup */
+       int flag;                               /* flags for various things */
+} MaskModifierData;
+
+/* Mask Modifier -> mode */
+#define MOD_MASK_MODE_VGROUP           0
+#define MOD_MASK_MODE_ARM                      1
+
+/* Mask Modifier -> flag */
+#define MOD_MASK_INV                   (1<<0)
+
 typedef struct ArrayModifierData {
        ModifierData modifier;
 
@@ -212,6 +239,50 @@ typedef struct BMeshModifierData {
        int type;
 } BMeshModifierData;
 
+
+/* Smoke modifier flags */
+#define MOD_SMOKE_TYPE_DOMAIN (1 << 0)
+#define MOD_SMOKE_TYPE_FLOW (1 << 1)
+#define MOD_SMOKE_TYPE_COLL (1 << 2)
+
+typedef struct SmokeModifierData {
+       ModifierData modifier;
+
+       struct SmokeDomainSettings *domain;
+       struct SmokeFlowSettings *flow; /* inflow, outflow, smoke objects */
+       struct SmokeCollSettings *coll; /* collision objects */
+       float time;
+       int type;  /* domain, inflow, outflow, ... */
+} SmokeModifierData;
+
+
+/* noise */
+#define MOD_SMOKE_NOISEWAVE (1<<0)
+#define MOD_SMOKE_NOISEFFT (1<<1)
+#define MOD_SMOKE_NOISECURL (1<<2)
+
+/* flags */
+#define MOD_SMOKE_SHOWHIGHRES (1<<0) /* show high resolution */
+
+typedef struct SmokeHRModifierData {
+       ModifierData modifier;
+
+       struct WTURBULENCE *wt; // WTURBULENCE object, if active
+       struct PointCache *point_cache; /* definition is in DNA_object_force.h */
+       struct ListBase ptcaches;
+       struct GPUTexture *tex;
+       float *view3d; /* voxel data for display */
+       unsigned int v3dnum; /* number of frame in view3d buffer */
+       float time;
+       float strength;
+       int res[3];
+       int maxres;
+       short noise; /* noise type: wave, curl, anisotropic */
+       short pad;
+       int amplify;
+       int flags;
+} SmokeHRModifierData;
+
 typedef struct DisplaceModifierData {
        ModifierData modifier;
 
@@ -247,7 +318,7 @@ typedef struct UVProjectModifierData {
        ModifierData modifier;
 
        /* the objects which do the projecting */
-       struct Object *projectors[10];
+       struct Object *projectors[10]; /* MOD_UVPROJECT_MAX */
        struct Image *image;      /* the image to project */
        int flags;
        int num_projectors;
@@ -370,12 +441,14 @@ typedef struct SoftbodyModifierData {
 } SoftbodyModifierData;
 
 typedef struct ClothModifierData {
-   ModifierData                modifier;
-
-   struct Cloth *clothObject; /* The internal data structure for cloth. */
-   struct ClothSimSettings *sim_parms; /* definition is in DNA_cloth_types.h */
-   struct ClothCollSettings *coll_parms; /* definition is in DNA_cloth_types.h */
-   struct PointCache *point_cache;     /* definition is in DNA_object_force.h */
+       ModifierData            modifier;
+
+       struct Scene *scene;                    /* the context, time etc is here */
+       struct Cloth *clothObject;              /* The internal data structure for cloth. */
+       struct ClothSimSettings *sim_parms; /* definition is in DNA_cloth_types.h */
+       struct ClothCollSettings *coll_parms; /* definition is in DNA_cloth_types.h */
+       struct PointCache *point_cache; /* definition is in DNA_object_force.h */
+       struct ListBase ptcaches;
 } ClothModifierData;
 
 typedef struct CollisionModifierData {
@@ -392,11 +465,25 @@ typedef struct CollisionModifierData {
        
        unsigned int numverts;
        unsigned int numfaces;
-       int pad;
+       short absorption; /* used for forces, in % */
+       short pad;
        float time;             /* cfra time of modifier */
        struct BVHTree *bvhtree; /* bounding volume hierarchy for this cloth object */
 } CollisionModifierData;
 
+typedef struct SurfaceModifierData {
+       ModifierData    modifier;
+
+       struct MVert *x; /* old position */
+       struct MVert *v; /* velocity */
+
+       struct DerivedMesh *dm;
+
+       struct BVHTreeFromMesh *bvhtree; /* bounding volume hierarchy of the mesh faces */
+
+       int cfra, numverts;
+} SurfaceModifierData;
+
 typedef enum {
        eBooleanModifierOp_Intersect,
        eBooleanModifierOp_Union,
@@ -468,12 +555,15 @@ typedef enum {
        eParticleInstanceFlag_Unborn =          (1<<3),
        eParticleInstanceFlag_Alive =           (1<<4),
        eParticleInstanceFlag_Dead =            (1<<5),
+       eParticleInstanceFlag_KeepShape =       (1<<6),
+       eParticleInstanceFlag_UseSize =         (1<<7),
 } ParticleInstanceModifierFlag;
 
 typedef struct ParticleInstanceModifierData {
        ModifierData modifier;
        struct Object *ob;
-       short psys, flag, rt[2];
+       short psys, flag, axis, rt;
+       float position, random_position;
 } ParticleInstanceModifierData;
 
 typedef enum {
@@ -492,6 +582,24 @@ typedef struct ExplodeModifierData {
        float protect;
 } ExplodeModifierData;
 
+typedef struct MultiresModifierData {
+       ModifierData modifier;
+
+       struct MVert *undo_verts; /* Store DerivedMesh vertices for multires undo */
+       int undo_verts_tot; /* Length of undo_verts array */
+       char undo_signal; /* If true, signals to replace verts with undo verts */
+
+       char lvl, totlvl;
+       char simple;
+} MultiresModifierData;
+
+typedef struct FluidsimModifierData {
+       ModifierData modifier;
+       
+       struct FluidsimSettings *fss; /* definition is is DNA_object_fluidsim.h */
+       struct PointCache *point_cache; /* definition is in DNA_object_force.h */
+} FluidsimModifierData;
+
 typedef struct ShrinkwrapModifierData {
        ModifierData modifier;
 
@@ -502,7 +610,15 @@ typedef struct ShrinkwrapModifierData {
        short shrinkType;               /* shrink type projection */
        short shrinkOpts;               /* shrink options */
        char projAxis;                  /* axis to project over */
-       char pad[7];
+
+       /*
+        * if using projection over vertex normal this controls the
+        * the level of subsurface that must be done before getting the
+        * vertex coordinates and normal
+        */
+       char subsurfLevels;
+
+       char pad[6];
 
 } ShrinkwrapModifierData;
 
@@ -536,7 +652,8 @@ typedef struct SimpleDeformModifierData {
 
        char mode;                              /* deform function */
        char axis;                              /* lock axis (for taper and strech) */
-       char pad[2];
+       char originOpts;                /* originOptions */
+       char pad;
 
 } SimpleDeformModifierData;
 
@@ -548,4 +665,10 @@ typedef struct SimpleDeformModifierData {
 #define MOD_SIMPLEDEFORM_LOCK_AXIS_X                   (1<<0)
 #define MOD_SIMPLEDEFORM_LOCK_AXIS_Y                   (1<<1)
 
+/* indicates whether simple deform should use the local
+   coordinates or global coordinates of origin */
+#define MOD_SIMPLEDEFORM_ORIGIN_LOCAL                  (1<<0)
+
+#define MOD_UVPROJECT_MAX                              10
+
 #endif