73
73
} ModifierTypeType;
76
eModifierTypeFlag_AcceptsMesh = (1<<0),
77
eModifierTypeFlag_AcceptsCVs = (1<<1),
78
eModifierTypeFlag_SupportsMapping = (1<<2),
79
eModifierTypeFlag_SupportsEditmode = (1<<3),
76
eModifierTypeFlag_AcceptsMesh = (1 << 0),
77
eModifierTypeFlag_AcceptsCVs = (1 << 1),
78
eModifierTypeFlag_SupportsMapping = (1 << 2),
79
eModifierTypeFlag_SupportsEditmode = (1 << 3),
81
81
/* For modifiers that support editmode this determines if the
82
82
* modifier should be enabled by default in editmode. This should
84
84
* also generally used in editmode, otherwise let the user enable
87
eModifierTypeFlag_EnableInEditmode = (1<<4),
87
eModifierTypeFlag_EnableInEditmode = (1 << 4),
89
89
/* For modifiers that require original data and so cannot
90
90
* be placed after any non-deformative modifier.
92
eModifierTypeFlag_RequiresOriginalData = (1<<5),
92
eModifierTypeFlag_RequiresOriginalData = (1 << 5),
94
94
/* For modifiers that support pointcache, so we can check to see if it has files we need to deal with
96
eModifierTypeFlag_UsesPointCache = (1<<6),
96
eModifierTypeFlag_UsesPointCache = (1 << 6),
98
98
/* For physics modifiers, max one per type */
99
eModifierTypeFlag_Single = (1<<7),
99
eModifierTypeFlag_Single = (1 << 7),
101
101
/* Some modifier can't be added manually by user */
102
eModifierTypeFlag_NoUserAdd = (1<<8),
102
eModifierTypeFlag_NoUserAdd = (1 << 8),
104
104
/* For modifiers that use CD_PREVIEW_MCOL for preview. */
105
eModifierTypeFlag_UsesPreview = (1<<9)
105
eModifierTypeFlag_UsesPreview = (1 << 9)
106
106
} ModifierTypeFlag;
108
108
typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin);
109
109
typedef void (*IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin);
110
110
typedef void (*TexWalkFunc)(void *userData, struct Object *ob, struct ModifierData *md, const char *propname);
112
typedef enum ModifierApplyFlag {
113
MOD_APPLY_RENDER = 1 << 0, /* Render time. */
114
MOD_APPLY_USECACHE = 1 << 1, /* Last modifier in stack. */
112
118
typedef struct ModifierTypeInfo {
113
119
/* The user visible name for this modifier */
140
146
* and otherwise the ob argument.
142
148
void (*deformVerts)(struct ModifierData *md, struct Object *ob,
143
struct DerivedMesh *derivedData,
144
float (*vertexCos)[3], int numVerts,
145
int useRenderParams, int isFinalCalc);
149
struct DerivedMesh *derivedData,
150
float (*vertexCos)[3], int numVerts,
151
ModifierApplyFlag flag);
147
153
/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
148
void (*deformMatrices)(
149
struct ModifierData *md, struct Object *ob,
150
struct DerivedMesh *derivedData,
151
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
154
void (*deformMatrices)(struct ModifierData *md, struct Object *ob,
155
struct DerivedMesh *derivedData,
156
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
153
158
/* Like deformVerts but called during editmode (for supporting modifiers)
155
void (*deformVertsEM)(
156
struct ModifierData *md, struct Object *ob,
157
struct BMEditMesh *editData, struct DerivedMesh *derivedData,
158
float (*vertexCos)[3], int numVerts);
160
void (*deformVertsEM)(struct ModifierData *md, struct Object *ob,
161
struct BMEditMesh *editData, struct DerivedMesh *derivedData,
162
float (*vertexCos)[3], int numVerts);
160
164
/* Set deform matrix per vertex for crazyspace correction */
161
void (*deformMatricesEM)(
162
struct ModifierData *md, struct Object *ob,
163
struct BMEditMesh *editData, struct DerivedMesh *derivedData,
164
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
165
void (*deformMatricesEM)(struct ModifierData *md, struct Object *ob,
166
struct BMEditMesh *editData, struct DerivedMesh *derivedData,
167
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
166
169
/********************* Non-deform modifier functions *********************/
184
187
* The modifier may reuse the derivedData argument (i.e. return it in
185
188
* modified form), but must not release it.
187
struct DerivedMesh *(*applyModifier)(
188
struct ModifierData *md, struct Object *ob,
189
struct DerivedMesh *derivedData,
190
int useRenderParams, int isFinalCalc);
190
struct DerivedMesh *(*applyModifier)(struct ModifierData *md, struct Object *ob,
191
struct DerivedMesh *derivedData,
192
ModifierApplyFlag flag);
192
194
/* Like applyModifier but called during editmode (for supporting
196
198
* are expected from editmode objects. The same qualifications regarding
197
199
* derivedData apply as for applyModifier.
199
struct DerivedMesh *(*applyModifierEM)(
200
struct ModifierData *md, struct Object *ob,
201
struct BMEditMesh *editData,
202
struct DerivedMesh *derivedData);
201
struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, struct Object *ob,
202
struct BMEditMesh *editData,
203
struct DerivedMesh *derivedData);
205
206
/********************* Optional functions *********************/
252
253
* This function is optional.
254
255
void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest, struct Scene *scene,
255
struct Object *ob, struct DagNode *obNode);
256
struct Object *ob, struct DagNode *obNode);
257
258
/* Should return true if the modifier needs to be recalculated on time
279
280
* This function is optional.
281
282
void (*foreachObjectLink)(struct ModifierData *md, struct Object *ob,
282
ObjectWalkFunc walk, void *userData);
283
ObjectWalkFunc walk, void *userData);
284
285
/* Should call the given walk function with a pointer to each ID
285
286
* pointer (i.e. each datablock pointer) that the modifier data
300
301
* assumed the modifier has no textures.
302
303
void (*foreachTexLink)(struct ModifierData *md, struct Object *ob,
303
TexWalkFunc walk, void *userData);
304
TexWalkFunc walk, void *userData);
304
305
} ModifierTypeInfo;
306
ModifierTypeInfo *modifierType_getInfo (ModifierType type);
307
ModifierTypeInfo *modifierType_getInfo(ModifierType type);
308
309
/* Modifier utility calls, do call through type pointer and return
309
310
* default values if pointer is optional.
311
312
struct ModifierData *modifier_new(int type);
312
313
void modifier_free(struct ModifierData *md);
314
void modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
315
void modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
316
317
void modifier_copyData(struct ModifierData *md, struct ModifierData *target);
317
318
int modifier_dependsOnTime(struct ModifierData *md);
318
319
int modifier_supportsMapping(struct ModifierData *md);
319
320
int modifier_couldBeCage(struct Scene *scene, struct ModifierData *md);
320
321
int modifier_isCorrectableDeformed(struct ModifierData *md);
321
int modifier_sameTopology(ModifierData *md);
322
int modifier_nonGeometrical(ModifierData *md);
322
int modifier_isSameTopology(ModifierData *md);
323
int modifier_isNonGeometrical(ModifierData *md);
323
324
int modifier_isEnabled(struct Scene *scene, struct ModifierData *md, int required_mode);
324
325
void modifier_setError(struct ModifierData *md, const char *format, ...)
326
__attribute__ ((format (printf, 2, 3)))
327
__attribute__ ((format(printf, 2, 3)))
329
330
int modifier_isPreview(struct ModifierData *md);
331
332
void modifiers_foreachObjectLink(struct Object *ob,
334
335
void modifiers_foreachIDLink(struct Object *ob,
337
338
void modifiers_foreachTexLink(struct Object *ob,
341
342
struct ModifierData *modifiers_findByType(struct Object *ob, ModifierType type);
342
343
struct ModifierData *modifiers_findByName(struct Object *ob, const char *name);
343
344
void modifiers_clearErrors(struct Object *ob);
344
345
int modifiers_getCageIndex(struct Scene *scene, struct Object *ob,
345
int *lastPossibleCageIndex_r, int virtual_);
346
int *lastPossibleCageIndex_r, int virtual_);
348
int modifiers_isModifierEnabled(struct Object *ob, int modifierType);
347
349
int modifiers_isSoftbodyEnabled(struct Object *ob);
348
350
int modifiers_isClothEnabled(struct Object *ob);
349
351
int modifiers_isParticleEnabled(struct Object *ob);
351
353
struct Object *modifiers_isDeformedByArmature(struct Object *ob);
352
354
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
355
struct Object *modifiers_isDeformedByCurve(struct Object *ob);
353
356
int modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
354
357
int modifiers_isCorrectableDeformed(struct Object *ob);
355
358
void modifier_freeTemporaryData(struct ModifierData *md);
356
359
int modifiers_isPreview(struct Object *ob);
358
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
360
361
typedef struct CDMaskLink {
361
362
struct CDMaskLink *next;
362
363
CustomDataMask mask;