Merge with trunk/2.5 at r25563
[blender-staging.git] / source / blender / makesdna / DNA_modifier_types.h
index 49a6fd4daf0f5039c25efde868a0d116c9a70f40..2491e58f176a823470b727771521ffc81039a292 100644 (file)
@@ -1,7 +1,28 @@
 /**
+ *
  * $Id$ 
+ *
+ * ***** 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * ***** END GPL LICENSE BLOCK *****
  */
 
+#include "DNA_listBase.h"
+
 #ifndef DNA_MODIFIER_TYPES_H
 #define DNA_MODIFIER_TYPES_H
 
@@ -41,6 +62,9 @@ typedef enum ModifierType {
        eModifierType_SimpleDeform,
        eModifierType_Multires,
        eModifierType_Surface,
+       eModifierType_Smoke,
+       eModifierType_ShapeKey,
+       eModifierType_Solidify,
        NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -237,6 +261,22 @@ 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;
+
 typedef struct DisplaceModifierData {
        ModifierData modifier;
 
@@ -272,7 +312,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;
@@ -380,6 +420,8 @@ typedef struct HookModifierData {
        ModifierData modifier;
 
        struct Object *object;
+       char subtarget[32];             /* optional name of bone target */
+       
        float parentinv[4][4];  /* matrix making current transform unmodified */
        float cent[3];                  /* visualization of hook */
        float falloff;                  /* if not zero, falloff is distance where influence zero */
@@ -402,6 +444,7 @@ typedef struct ClothModifierData {
        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 {
@@ -418,18 +461,21 @@ typedef struct CollisionModifierData {
        
        unsigned int numverts;
        unsigned int numfaces;
-       short absorption; /* used for forces, in % */
-       short pad;
-       float time;             /* cfra time of modifier */
+       float time, pad;                /* 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 {
@@ -444,8 +490,11 @@ typedef struct BooleanModifierData {
        int operation, pad;
 } BooleanModifierData;
 
-#define MOD_MDEF_INVERT_VGROUP (1<<0)
-#define MOD_MDEF_DYNAMIC_BIND  (1<<1)
+#define MOD_MDEF_INVERT_VGROUP (1<<0)
+#define MOD_MDEF_DYNAMIC_BIND  (1<<1)
+
+#define MOD_MDEF_VOLUME                        0
+#define MOD_MDEF_SURFACE               1
 
 typedef struct MDefInfluence {
        int vertex;
@@ -463,8 +512,7 @@ typedef struct MeshDeformModifierData {
        struct Object *object;                  /* mesh object */
        char defgrp_name[32];                   /* optional vertexgroup name */
 
-       short gridsize, needbind;
-       short flag, pad;
+       short gridsize, flag, mode, pad;
 
        /* variables filled in when bound */
        float *bindweights, *bindcos;   /* computed binding weights */
@@ -477,6 +525,11 @@ typedef struct MeshDeformModifierData {
        float dyncellmin[3];                    /* offset of the dynamic bind grid */
        float dyncellwidth;                             /* width of dynamic bind cell */
        float bindmat[4][4];                    /* matrix of cage at binding time */
+
+       /* runtime */
+       void (*bindfunc)(struct Scene *scene, struct DerivedMesh *dm,
+               struct MeshDeformModifierData *mmd,
+               float *vertexcos, int totvert, float cagemat[][4]);
 } MeshDeformModifierData;
 
 typedef enum {
@@ -533,14 +586,14 @@ typedef struct 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;
+       char lvl, sculptlvl, renderlvl, totlvl;
+       char simple, flags, pad[2];
 } MultiresModifierData;
 
+typedef enum {
+       eMultiresModifierFlag_ControlEdges = (1<<0),
+} MultiresModifierFlag;
+
 typedef struct FluidsimModifierData {
        ModifierData modifier;
        
@@ -617,4 +670,26 @@ typedef struct SimpleDeformModifierData {
    coordinates or global coordinates of origin */
 #define MOD_SIMPLEDEFORM_ORIGIN_LOCAL                  (1<<0)
 
+#define MOD_UVPROJECT_MAX                              10
+
+typedef struct ShapeKeyModifierData {
+       ModifierData modifier;
+} ShapeKeyModifierData;
+
+typedef struct SolidifyModifierData {
+       ModifierData modifier;
+
+       char vgroup[32];                /* name of vertex group to use */
+       float offset;                   /* new surface offset level*/
+       float crease_inner;
+       float crease_outer;
+       float crease_rim;
+       int flag;
+       char pad[4];
+} SolidifyModifierData;
+
+#define MOD_SOLIDIFY_RIM                       (1<<0)
+#define MOD_SOLIDIFY_EVEN                      (1<<1)
+#define MOD_SOLIDIFY_NORMAL_CALC       (1<<2)
+
 #endif