WIP commit, (just in case my HD breaks down). Don't expect anything to work. Code...
[blender.git] / source / blender / blenkernel / BKE_modifier.h
index 586ee4e8552c064bc2de8fe882fa75fbbc440e36..644c3dd32f40db36ceb8c8e4eb56a822007ea8ad 100644 (file)
@@ -33,6 +33,7 @@
 #ifndef BKE_MODIFIER_H
 #define BKE_MODIFIER_H
 
+#include "DNA_modifier_types.h"                /* needed for all enum typdefs */
 #include "BKE_customdata.h"
 
 struct EditMesh;
@@ -43,6 +44,7 @@ struct Object;
 struct ListBase;
 struct LinkNode;
 struct bArmature;
+struct ModifierData;
 
 typedef enum {
        /* Should not be used, only for None modifier type */
@@ -103,7 +105,7 @@ typedef struct ModifierTypeInfo {
        /* Copy instance data for this modifier type. Should copy all user
         * level settings to the target modifier.
         */
-       void (*copyData)(ModifierData *md, ModifierData *target);
+       void (*copyData)(struct ModifierData *md, struct ModifierData *target);
 
        /********************* Deform modifier functions *********************/
 
@@ -112,17 +114,22 @@ typedef struct ModifierTypeInfo {
         * the object it can obtain it from the derivedData argument if non-NULL,
         * and otherwise the ob argument.
         */
-       void (*deformVerts)(ModifierData *md, struct Object *ob,
+       void (*deformVerts)(struct ModifierData *md, struct Object *ob,
                            struct DerivedMesh *derivedData,
                            float (*vertexCos)[3], int numVerts);
 
        /* Like deformVerts but called during editmode (for supporting modifiers)
         */
        void (*deformVertsEM)(
-                   ModifierData *md, struct Object *ob,
+                   struct ModifierData *md, struct Object *ob,
                    struct EditMesh *editData, struct DerivedMesh *derivedData,
                    float (*vertexCos)[3], int numVerts);
 
+       /* Set deform matrix per vertex for crazyspace correction */
+       void (*deformMatricesEM)(
+                   struct ModifierData *md, struct Object *ob,
+                   struct EditMesh *editData, struct DerivedMesh *derivedData,
+                   float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
        /********************* Non-deform modifier functions *********************/
 
@@ -146,7 +153,7 @@ typedef struct ModifierTypeInfo {
         * modified form), but must not release it.
         */
        struct DerivedMesh *(*applyModifier)(
-                                   ModifierData *md, struct Object *ob,
+                                   struct ModifierData *md, struct Object *ob,
                                    struct DerivedMesh *derivedData,
                                    int useRenderParams, int isFinalCalc);
 
@@ -158,7 +165,7 @@ typedef struct ModifierTypeInfo {
         * derivedData apply as for applyModifier.
         */
        struct DerivedMesh *(*applyModifierEM)(
-                                   ModifierData *md, struct Object *ob,
+                                   struct ModifierData *md, struct Object *ob,
                                    struct EditMesh *editData,
                                    struct DerivedMesh *derivedData);
 
@@ -170,7 +177,7 @@ typedef struct ModifierTypeInfo {
         * 
         * This function is optional.
         */
-       void (*initData)(ModifierData *md);
+       void (*initData)(struct ModifierData *md);
 
        /* Should return a CustomDataMask indicating what data this
         * modifier needs. If (mask & (1 << (layer type))) != 0, this modifier
@@ -188,14 +195,14 @@ typedef struct ModifierTypeInfo {
         *
         * This function is optional.
         */
-       CustomDataMask (*requiredDataMask)(ModifierData *md);
+       CustomDataMask (*requiredDataMask)(struct ModifierData *md);
 
        /* Free internal modifier data variables, this function should
         * not free the md variable itself.
         *
         * This function is optional.
         */
-       void (*freeData)(ModifierData *md);
+       void (*freeData)(struct ModifierData *md);
 
        /* Return a boolean value indicating if this modifier is able to be
         * calculated based on the modifier data. This is *not* regarding the
@@ -205,14 +212,14 @@ typedef struct ModifierTypeInfo {
         *
         * This function is optional (assumes never disabled if not present).
         */
-       int (*isDisabled)(ModifierData *md);
+       int (*isDisabled)(struct ModifierData *md);
 
        /* Add the appropriate relations to the DEP graph depending on the
         * modifier data. 
         *
         * This function is optional.
         */
-       void (*updateDepgraph)(ModifierData *md, struct DagForest *forest,
+       void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest,
                               struct Object *ob, struct DagNode *obNode);
 
        /* Should return true if the modifier needs to be recalculated on time
@@ -220,7 +227,7 @@ typedef struct ModifierTypeInfo {
         *
         * This function is optional (assumes false if not present).
         */
-       int (*dependsOnTime)(ModifierData *md);
+       int (*dependsOnTime)(struct ModifierData *md);
 
        /* Should call the given walk function on with a pointer to each Object
         * pointer that the modifier data stores. This is used for linking on file
@@ -228,7 +235,7 @@ typedef struct ModifierTypeInfo {
         *
         * This function is optional.
         */
-       void (*foreachObjectLink)(ModifierData *md, struct Object *ob,
+       void (*foreachObjectLink)(struct ModifierData *md, struct Object *ob,
                                  ObjectWalkFunc walk, void *userData);
 
        /* Should call the given walk function with a pointer to each ID
@@ -239,7 +246,7 @@ typedef struct ModifierTypeInfo {
         * This function is optional. If it is not present, foreachObjectLink
         * will be used.
         */
-       void (*foreachIDLink)(ModifierData *md, struct Object *ob,
+       void (*foreachIDLink)(struct ModifierData *md, struct Object *ob,
                              IDWalkFunc walk, void *userData);
 } ModifierTypeInfo;
 
@@ -248,14 +255,15 @@ ModifierTypeInfo *modifierType_getInfo (ModifierType type);
 /* Modifier utility calls, do call through type pointer and return
  * default values if pointer is optional.
  */
-ModifierData  *modifier_new(int type);
-void          modifier_free(ModifierData *md);
+struct ModifierData  *modifier_new(int type);
+void          modifier_free(struct ModifierData *md);
 
-void          modifier_copyData(ModifierData *md, ModifierData *target);
-int           modifier_dependsOnTime(ModifierData *md);
-int           modifier_supportsMapping(ModifierData *md);
-int           modifier_couldBeCage(ModifierData *md);
-void          modifier_setError(ModifierData *md, char *format, ...);
+void          modifier_copyData(struct ModifierData *md, struct ModifierData *target);
+int           modifier_dependsOnTime(struct ModifierData *md);
+int           modifier_supportsMapping(struct ModifierData *md);
+int           modifier_couldBeCage(struct ModifierData *md);
+int           modifier_isDeformer(struct ModifierData *md);
+void          modifier_setError(struct ModifierData *md, char *format, ...);
 
 void          modifiers_foreachObjectLink(struct Object *ob,
                                           ObjectWalkFunc walk,
@@ -263,13 +271,15 @@ void          modifiers_foreachObjectLink(struct Object *ob,
 void          modifiers_foreachIDLink(struct Object *ob,
                                       IDWalkFunc walk,
                                       void *userData);
-ModifierData  *modifiers_findByType(struct Object *ob, ModifierType type);
+struct ModifierData  *modifiers_findByType(struct Object *ob, ModifierType type);
 void          modifiers_clearErrors(struct Object *ob);
 int           modifiers_getCageIndex(struct Object *ob,
                                      int *lastPossibleCageIndex_r);
 
 int           modifiers_isSoftbodyEnabled(struct Object *ob);
+struct ClothModifierData *modifiers_isClothEnabled(Object *ob);
 struct Object *modifiers_isDeformedByArmature(struct Object *ob);
+struct Object *modifiers_isDeformedByLattice(struct Object *ob);
 int           modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
 int           modifiers_isDeformed(struct Object *ob);
 
@@ -278,9 +288,9 @@ int           modifiers_isDeformed(struct Object *ob);
  * evaluation, assuming the data indicated by dataMask is required at the
  * end of the stack.
  */
-struct LinkNode *modifiers_calcDataMasks(ModifierData *md,
+struct LinkNode *modifiers_calcDataMasks(struct ModifierData *md,
                                          CustomDataMask dataMask);
-ModifierData  *modifiers_getVirtualModifierList(struct Object *ob);
+struct ModifierData  *modifiers_getVirtualModifierList(struct Object *ob);
 
 #endif