svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22668:22701
[blender-staging.git] / source / blender / makesdna / DNA_modifier_types.h
1 /**
2  * $Id$ 
3  */
4
5 #ifndef DNA_MODIFIER_TYPES_H
6 #define DNA_MODIFIER_TYPES_H
7
8 #define MODSTACK_DEBUG 1
9
10 /* WARNING ALERT! TYPEDEF VALUES ARE WRITTEN IN FILES! SO DO NOT CHANGE! */
11
12 typedef enum ModifierType {
13         eModifierType_None = 0,
14         eModifierType_Subsurf,
15         eModifierType_Lattice,
16         eModifierType_Curve,
17         eModifierType_Build,
18         eModifierType_Mirror,
19         eModifierType_Decimate,
20         eModifierType_Wave,
21         eModifierType_Armature,
22         eModifierType_Hook,
23         eModifierType_Softbody,
24         eModifierType_Boolean,
25         eModifierType_Array,
26         eModifierType_EdgeSplit,
27         eModifierType_Displace,
28         eModifierType_UVProject,
29         eModifierType_Smooth,
30         eModifierType_Cast,
31         eModifierType_MeshDeform,
32         eModifierType_ParticleSystem,
33         eModifierType_ParticleInstance,
34         eModifierType_Explode,
35         eModifierType_Cloth,
36         eModifierType_Collision,
37         eModifierType_Bevel,
38         eModifierType_Shrinkwrap,
39         eModifierType_Fluidsim,
40         eModifierType_Mask,
41         eModifierType_SimpleDeform,
42         eModifierType_Multires,
43         eModifierType_Surface,
44         eModifierType_Smoke,
45         eModifierType_SmokeHR,
46         NUM_MODIFIER_TYPES
47 } ModifierType;
48
49 typedef enum ModifierMode {
50         eModifierMode_Realtime = (1<<0),
51         eModifierMode_Render = (1<<1),
52         eModifierMode_Editmode = (1<<2),
53         eModifierMode_OnCage = (1<<3),
54         eModifierMode_Expanded = (1<<4),
55         eModifierMode_Virtual = (1<<5),
56         eModifierMode_DisableTemporary = (1 << 31)
57 } ModifierMode;
58
59 typedef struct ModifierData {
60         struct ModifierData *next, *prev;
61
62         int type, mode;
63         char name[32];
64         
65         /* XXX for timing info set by caller... solve later? (ton) */
66         struct Scene *scene;
67         
68         char *error;
69 } ModifierData;
70
71 typedef enum {
72         eSubsurfModifierFlag_Incremental = (1<<0),
73         eSubsurfModifierFlag_DebugIncr = (1<<1),
74         eSubsurfModifierFlag_ControlEdges = (1<<2),
75         eSubsurfModifierFlag_SubsurfUv = (1<<3)
76 } SubsurfModifierFlag;
77
78 typedef struct SubsurfModifierData {
79         ModifierData modifier;
80
81         short subdivType, levels, renderLevels, flags;
82
83         void *emCache, *mCache;
84 } SubsurfModifierData;
85
86 typedef struct LatticeModifierData {
87         ModifierData modifier;
88
89         struct Object *object;
90         char name[32];                  /* optional vertexgroup name */
91 } LatticeModifierData;
92
93 typedef struct CurveModifierData {
94         ModifierData modifier;
95
96         struct Object *object;
97         char name[32];                  /* optional vertexgroup name */
98         short defaxis;                  /* axis along which curve deforms */
99         char pad[6];
100 } CurveModifierData;
101
102 /* CurveModifierData->defaxis */
103 #define MOD_CURVE_POSX  1
104 #define MOD_CURVE_POSY  2
105 #define MOD_CURVE_POSZ  3
106 #define MOD_CURVE_NEGX  4
107 #define MOD_CURVE_NEGY  5
108 #define MOD_CURVE_NEGZ  6
109
110 typedef struct BuildModifierData {
111         ModifierData modifier;
112
113         float start, length;
114         int randomize, seed;
115 } BuildModifierData;
116
117 /* Mask Modifier */
118 typedef struct MaskModifierData {
119         ModifierData modifier;
120         
121         struct Object *ob_arm;  /* armature to use to in place of hardcoded vgroup */
122         char vgroup[32];                /* name of vertex group to use to mask */
123         
124         int mode;                               /* using armature or hardcoded vgroup */
125         int flag;                               /* flags for various things */
126 } MaskModifierData;
127
128 /* Mask Modifier -> mode */
129 #define MOD_MASK_MODE_VGROUP            0
130 #define MOD_MASK_MODE_ARM                       1
131
132 /* Mask Modifier -> flag */
133 #define MOD_MASK_INV                    (1<<0)
134
135 typedef struct ArrayModifierData {
136         ModifierData modifier;
137
138         /* the object with which to cap the start of the array  */
139         struct Object *start_cap;
140         /* the object with which to cap the end of the array  */
141         struct Object *end_cap;
142         /* the curve object to use for MOD_ARR_FITCURVE */
143         struct Object *curve_ob;
144         /* the object to use for object offset */
145         struct Object *offset_ob;
146         /* a constant duplicate offset;
147            1 means the duplicates are 1 unit apart
148     */
149         float offset[3];
150         /* a scaled factor for duplicate offsets;
151            1 means the duplicates are 1 object-width apart
152     */
153         float scale[3];
154         /* the length over which to distribute the duplicates */
155         float length;
156         /* the limit below which to merge vertices in adjacent duplicates */
157         float merge_dist;
158         /* determines how duplicate count is calculated; one of:
159               MOD_ARR_FIXEDCOUNT -> fixed
160               MOD_ARR_FITLENGTH  -> calculated to fit a set length
161               MOD_ARR_FITCURVE   -> calculated to fit the length of a Curve object
162     */
163         int fit_type;
164         /* flags specifying how total offset is calculated; binary OR of:
165              MOD_ARR_OFF_CONST    -> total offset += offset
166              MOD_ARR_OFF_RELATIVE -> total offset += relative * object width
167              MOD_ARR_OFF_OBJ      -> total offset += offset_ob's matrix
168            total offset is the sum of the individual enabled offsets
169         */
170         int offset_type;
171         /* general flags:
172               MOD_ARR_MERGE -> merge vertices in adjacent duplicates
173         */
174         int flags;
175         /* the number of duplicates to generate for MOD_ARR_FIXEDCOUNT */
176         int count;
177 } ArrayModifierData;
178
179 /* ArrayModifierData->fit_type */
180 #define MOD_ARR_FIXEDCOUNT 0
181 #define MOD_ARR_FITLENGTH  1
182 #define MOD_ARR_FITCURVE   2
183
184 /* ArrayModifierData->offset_type */
185 #define MOD_ARR_OFF_CONST    1<<0
186 #define MOD_ARR_OFF_RELATIVE 1<<1
187 #define MOD_ARR_OFF_OBJ      1<<2
188
189 /* ArrayModifierData->flags */
190 #define MOD_ARR_MERGE      1<<0
191 #define MOD_ARR_MERGEFINAL 1<<1
192
193 typedef struct MirrorModifierData {
194         ModifierData modifier;
195
196         short axis, flag;
197         float tolerance;
198         struct Object *mirror_ob;
199 } MirrorModifierData;
200
201 /* MirrorModifierData->flag */
202 #define MOD_MIR_CLIPPING        1<<0
203 #define MOD_MIR_MIRROR_U        1<<1
204 #define MOD_MIR_MIRROR_V        1<<2
205 #define MOD_MIR_AXIS_X          1<<3
206 #define MOD_MIR_AXIS_Y          1<<4
207 #define MOD_MIR_AXIS_Z          1<<5
208 #define MOD_MIR_VGROUP          1<<6
209
210 typedef struct EdgeSplitModifierData {
211         ModifierData modifier;
212
213         float split_angle;    /* angle above which edges should be split */
214         int flags;
215 } EdgeSplitModifierData;
216
217 /* EdgeSplitModifierData->flags */
218 #define MOD_EDGESPLIT_FROMANGLE   1<<1
219 #define MOD_EDGESPLIT_FROMFLAG    1<<2
220
221 typedef struct BevelModifierData {
222         ModifierData modifier;
223
224         float value;          /* the "raw" bevel value (distance/amount to bevel) */
225         int res;              /* the resolution (as originally coded, it is the number of recursive bevels) */
226         int pad;
227         short flags;          /* general option flags */
228         short val_flags;      /* flags used to interpret the bevel value */
229         short lim_flags;      /* flags to tell the tool how to limit the bevel */
230         short e_flags;        /* flags to direct how edge weights are applied to verts */
231         float bevel_angle;    /* if the BME_BEVEL_ANGLE is set, this will be how "sharp" an edge must be before it gets beveled */
232         char defgrp_name[32]; /* if the BME_BEVEL_VWEIGHT option is set, this will be the name of the vert group */
233 } BevelModifierData;
234
235 typedef struct BMeshModifierData {
236         ModifierData modifier;
237
238         float pad;
239         int type;
240 } BMeshModifierData;
241
242
243 /* Smoke modifier flags */
244 #define MOD_SMOKE_TYPE_DOMAIN (1 << 0)
245 #define MOD_SMOKE_TYPE_FLOW (1 << 1)
246 #define MOD_SMOKE_TYPE_COLL (1 << 2)
247
248 typedef struct SmokeModifierData {
249         ModifierData modifier;
250
251         struct SmokeDomainSettings *domain;
252         struct SmokeFlowSettings *flow; /* inflow, outflow, smoke objects */
253         struct SmokeCollSettings *coll; /* collision objects */
254         float time;
255         int type;  /* domain, inflow, outflow, ... */
256 } SmokeModifierData;
257
258
259 /* noise */
260 #define MOD_SMOKE_NOISEWAVE (1<<0)
261 #define MOD_SMOKE_NOISEFFT (1<<1)
262 #define MOD_SMOKE_NOISECURL (1<<2)
263
264 /* flags */
265 #define MOD_SMOKE_SHOWHIGHRES (1<<0) /* show high resolution */
266
267 typedef struct SmokeHRModifierData {
268         ModifierData modifier;
269
270         struct WTURBULENCE *wt; // WTURBULENCE object, if active
271         struct PointCache *point_cache; /* definition is in DNA_object_force.h */
272         struct ListBase ptcaches;
273         struct GPUTexture *tex;
274         float *view3d; /* voxel data for display */
275         unsigned int v3dnum; /* number of frame in view3d buffer */
276         float time;
277         float strength;
278         int res[3];
279         int maxres;
280         short noise; /* noise type: wave, curl, anisotropic */
281         short pad;
282         int amplify;
283         int flags;
284 } SmokeHRModifierData;
285
286 typedef struct DisplaceModifierData {
287         ModifierData modifier;
288
289         struct Tex *texture;
290         float strength;
291         int direction;
292         char defgrp_name[32];
293         float midlevel;
294         int texmapping;
295         struct Object *map_object;
296         char uvlayer_name[32];
297         int uvlayer_tmp, pad;
298 } DisplaceModifierData;
299
300 /* DisplaceModifierData->direction */
301 enum {
302         MOD_DISP_DIR_X,
303         MOD_DISP_DIR_Y,
304         MOD_DISP_DIR_Z,
305         MOD_DISP_DIR_NOR,
306         MOD_DISP_DIR_RGB_XYZ,
307 };
308
309 /* DisplaceModifierData->texmapping */
310 enum {
311         MOD_DISP_MAP_LOCAL,
312         MOD_DISP_MAP_GLOBAL,
313         MOD_DISP_MAP_OBJECT,
314         MOD_DISP_MAP_UV,
315 };
316
317 typedef struct UVProjectModifierData {
318         ModifierData modifier;
319
320         /* the objects which do the projecting */
321         struct Object *projectors[10]; /* MOD_UVPROJECT_MAX */
322         struct Image *image;      /* the image to project */
323         int flags;
324         int num_projectors;
325         float aspectx, aspecty;
326         char uvlayer_name[32];
327         int uvlayer_tmp, pad;
328 } UVProjectModifierData;
329
330 #define MOD_UVPROJECT_MAXPROJECTORS 10
331
332 /* UVProjectModifierData->flags */
333 #define MOD_UVPROJECT_OVERRIDEIMAGE 1<<0
334
335 typedef struct DecimateModifierData {
336         ModifierData modifier;
337
338         float percent;
339         int faceCount;
340 } DecimateModifierData;
341
342 /* Smooth modifier flags */
343 #define MOD_SMOOTH_X (1<<1)
344 #define MOD_SMOOTH_Y (1<<2)
345 #define MOD_SMOOTH_Z (1<<3)
346
347 typedef struct SmoothModifierData {
348         ModifierData modifier;
349         float fac;
350         char defgrp_name[32];
351         short flag, repeat;
352
353 } SmoothModifierData;
354
355 /* Cast modifier flags */
356 #define MOD_CAST_X (1<<1)
357 #define MOD_CAST_Y (1<<2)
358 #define MOD_CAST_Z (1<<3)
359 #define MOD_CAST_USE_OB_TRANSFORM (1<<4)
360 #define MOD_CAST_SIZE_FROM_RADIUS (1<<5)
361
362 /* Cast modifier projection types */
363 #define MOD_CAST_TYPE_SPHERE 0
364 #define MOD_CAST_TYPE_CYLINDER 1
365 #define MOD_CAST_TYPE_CUBOID 2
366
367 typedef struct CastModifierData {
368         ModifierData modifier;
369
370         struct Object *object;
371         float fac;
372         float radius;
373         float size;
374         char defgrp_name[32];
375         short flag, type;
376 } CastModifierData;
377
378 enum {
379         MOD_WAV_MAP_LOCAL,
380         MOD_WAV_MAP_GLOBAL,
381         MOD_WAV_MAP_OBJECT,
382         MOD_WAV_MAP_UV,
383 };
384
385 /* WaveModifierData.flag */
386 #define MOD_WAVE_X      1<<1
387 #define MOD_WAVE_Y      1<<2
388 #define MOD_WAVE_CYCL   1<<3
389 #define MOD_WAVE_NORM   1<<4
390 #define MOD_WAVE_NORM_X 1<<5
391 #define MOD_WAVE_NORM_Y 1<<6
392 #define MOD_WAVE_NORM_Z 1<<7
393
394 typedef struct WaveModifierData {
395         ModifierData modifier;
396
397         struct Object *objectcenter;
398         char defgrp_name[32];
399         struct Tex *texture;
400         struct Object *map_object;
401
402         short flag, pad;
403
404         float startx, starty, height, width;
405         float narrow, speed, damp, falloff;
406
407         int texmapping, uvlayer_tmp;
408
409         char uvlayer_name[32];
410
411         float timeoffs, lifetime;
412         float pad1;
413 } WaveModifierData;
414
415 typedef struct ArmatureModifierData {
416         ModifierData modifier;
417
418         short deformflag, multi;                /* deformflag replaces armature->deformflag */
419         int pad2;
420         struct Object *object;
421         float *prevCos;         /* stored input of previous modifier, for vertexgroup blending */
422         char defgrp_name[32];
423 } ArmatureModifierData;
424
425 typedef struct HookModifierData {
426         ModifierData modifier;
427
428         struct Object *object;
429         char subtarget[32];             /* optional name of bone target */
430         
431         float parentinv[4][4];  /* matrix making current transform unmodified */
432         float cent[3];                  /* visualization of hook */
433         float falloff;                  /* if not zero, falloff is distance where influence zero */
434         
435         int *indexar;                   /* if NULL, it's using vertexgroup */
436         int totindex;
437         float force;
438         char name[32];                  /* optional vertexgroup name */
439 } HookModifierData;
440
441 typedef struct SoftbodyModifierData {
442         ModifierData modifier;
443 } SoftbodyModifierData;
444
445 typedef struct ClothModifierData {
446         ModifierData            modifier;
447
448         struct Scene *scene;                    /* the context, time etc is here */
449         struct Cloth *clothObject;              /* The internal data structure for cloth. */
450         struct ClothSimSettings *sim_parms; /* definition is in DNA_cloth_types.h */
451         struct ClothCollSettings *coll_parms; /* definition is in DNA_cloth_types.h */
452         struct PointCache *point_cache; /* definition is in DNA_object_force.h */
453         struct ListBase ptcaches;
454 } ClothModifierData;
455
456 typedef struct CollisionModifierData {
457         ModifierData    modifier;
458         
459         struct MVert *x; /* position at the beginning of the frame */
460         struct MVert *xnew; /* position at the end of the frame */
461         struct MVert *xold; /* unsued atm, but was discussed during sprint */
462         struct MVert *current_xnew; /* new position at the actual inter-frame step */
463         struct MVert *current_x; /* position at the actual inter-frame step */
464         struct MVert *current_v; /* (xnew - x) at the actual inter-frame step */
465         
466         struct MFace *mfaces; /* object face data */
467         
468         unsigned int numverts;
469         unsigned int numfaces;
470         short absorption; /* used for forces, in % */
471         short pad;
472         float time;             /* cfra time of modifier */
473         struct BVHTree *bvhtree; /* bounding volume hierarchy for this cloth object */
474 } CollisionModifierData;
475
476 typedef struct SurfaceModifierData {
477         ModifierData    modifier;
478
479         struct MVert *x; /* old position */
480         struct MVert *v; /* velocity */
481
482         struct DerivedMesh *dm;
483
484         struct BVHTreeFromMesh *bvhtree; /* bounding volume hierarchy of the mesh faces */
485
486         int cfra, numverts;
487 } SurfaceModifierData;
488
489 typedef enum {
490         eBooleanModifierOp_Intersect,
491         eBooleanModifierOp_Union,
492         eBooleanModifierOp_Difference,
493 } BooleanModifierOp;
494 typedef struct BooleanModifierData {
495         ModifierData modifier;
496
497         struct Object *object;
498         int operation, pad;
499 } BooleanModifierData;
500
501 #define MOD_MDEF_INVERT_VGROUP (1<<0)
502 #define MOD_MDEF_DYNAMIC_BIND  (1<<1)
503
504 typedef struct MDefInfluence {
505         int vertex;
506         float weight;
507 } MDefInfluence;
508
509 typedef struct MDefCell {
510         int offset;
511         int totinfluence;
512 } MDefCell;
513
514 typedef struct MeshDeformModifierData {
515         ModifierData modifier;
516
517         struct Object *object;                  /* mesh object */
518         char defgrp_name[32];                   /* optional vertexgroup name */
519
520         short gridsize, needbind;
521         short flag, pad;
522
523         /* variables filled in when bound */
524         float *bindweights, *bindcos;   /* computed binding weights */
525         int totvert, totcagevert;               /* total vertices in mesh and cage */
526         MDefCell *dyngrid;                              /* grid with dynamic binding cell points */
527         MDefInfluence *dyninfluences;   /* dynamic binding vertex influences */
528         int *dynverts, *pad2;                   /* is this vertex bound or not? */
529         int dyngridsize;                                /* size of the dynamic bind grid */
530         int totinfluence;                               /* total number of vertex influences */
531         float dyncellmin[3];                    /* offset of the dynamic bind grid */
532         float dyncellwidth;                             /* width of dynamic bind cell */
533         float bindmat[4][4];                    /* matrix of cage at binding time */
534 } MeshDeformModifierData;
535
536 typedef enum {
537         eParticleSystemFlag_Loaded =            (1<<0),
538         eParticleSystemFlag_Pars =                      (1<<1),
539         eParticleSystemFlag_FromCurve =         (1<<2),
540         eParticleSystemFlag_DM_changed =        (1<<3),
541         eParticleSystemFlag_Disabled =          (1<<4),
542         eParticleSystemFlag_psys_updated =      (1<<5),
543 } ParticleSystemModifierFlag;
544
545 typedef struct ParticleSystemModifierData {
546         ModifierData modifier;
547         struct ParticleSystem *psys;
548         struct DerivedMesh *dm;
549         int totdmvert, totdmedge, totdmface;
550         short flag, rt;
551 } ParticleSystemModifierData;
552
553 typedef enum {
554         eParticleInstanceFlag_Parents =         (1<<0),
555         eParticleInstanceFlag_Children =        (1<<1),
556         eParticleInstanceFlag_Path =            (1<<2),
557         eParticleInstanceFlag_Unborn =          (1<<3),
558         eParticleInstanceFlag_Alive =           (1<<4),
559         eParticleInstanceFlag_Dead =            (1<<5),
560         eParticleInstanceFlag_KeepShape =       (1<<6),
561         eParticleInstanceFlag_UseSize =         (1<<7),
562 } ParticleInstanceModifierFlag;
563
564 typedef struct ParticleInstanceModifierData {
565         ModifierData modifier;
566         struct Object *ob;
567         short psys, flag, axis, rt;
568         float position, random_position;
569 } ParticleInstanceModifierData;
570
571 typedef enum {
572         eExplodeFlag_CalcFaces =        (1<<0),
573         //eExplodeFlag_PaSize =         (1<<1),
574         eExplodeFlag_EdgeSplit =        (1<<2),
575         eExplodeFlag_Unborn =           (1<<3),
576         eExplodeFlag_Alive =            (1<<4),
577         eExplodeFlag_Dead =                     (1<<5),
578 } ExplodeModifierFlag;
579
580 typedef struct ExplodeModifierData {
581         ModifierData modifier;
582         int *facepa;
583         short flag, vgroup;
584         float protect;
585 } ExplodeModifierData;
586
587 typedef struct MultiresModifierData {
588         ModifierData modifier;
589
590         struct MVert *undo_verts; /* Store DerivedMesh vertices for multires undo */
591         int undo_verts_tot; /* Length of undo_verts array */
592         char undo_signal; /* If true, signals to replace verts with undo verts */
593
594         char lvl, totlvl;
595         char simple;
596 } MultiresModifierData;
597
598 typedef struct FluidsimModifierData {
599         ModifierData modifier;
600         
601         struct FluidsimSettings *fss; /* definition is is DNA_object_fluidsim.h */
602         struct PointCache *point_cache; /* definition is in DNA_object_force.h */
603 } FluidsimModifierData;
604
605 typedef struct ShrinkwrapModifierData {
606         ModifierData modifier;
607
608         struct Object *target;  /* shrink target */
609         struct Object *auxTarget; /* additional shrink target */
610         char vgroup_name[32];   /* optional vertexgroup name */
611         float keepDist;                 /* distance offset to keep from mesh/projection point */
612         short shrinkType;               /* shrink type projection */
613         short shrinkOpts;               /* shrink options */
614         char projAxis;                  /* axis to project over */
615
616         /*
617          * if using projection over vertex normal this controls the
618          * the level of subsurface that must be done before getting the
619          * vertex coordinates and normal
620          */
621         char subsurfLevels;
622
623         char pad[6];
624
625 } ShrinkwrapModifierData;
626
627 /* Shrinkwrap->shrinkType */
628 #define MOD_SHRINKWRAP_NEAREST_SURFACE  0
629 #define MOD_SHRINKWRAP_PROJECT                  1
630 #define MOD_SHRINKWRAP_NEAREST_VERTEX   2
631
632 /* Shrinkwrap->shrinkOpts */
633 #define MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR    (1<<0)  /* allow shrinkwrap to move the vertex in the positive direction of axis */
634 #define MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR    (1<<1)  /* allow shrinkwrap to move the vertex in the negative direction of axis */
635
636 #define MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE    (1<<3)  /* ignore vertex moves if a vertex ends projected on a front face of the target */
637 #define MOD_SHRINKWRAP_CULL_TARGET_BACKFACE             (1<<4)  /* ignore vertex moves if a vertex ends projected on a back face of the target */
638
639 #define MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE               (1<<5)  /* distance is measure to the front face of the target */
640
641 #define MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS              (1<<0)
642 #define MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS              (1<<1)
643 #define MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS              (1<<2)
644 #define MOD_SHRINKWRAP_PROJECT_OVER_NORMAL                      0       /* projection over normal is used if no axis is selected */
645
646
647 typedef struct SimpleDeformModifierData {
648         ModifierData modifier;
649
650         struct Object *origin;  /* object to control the origin of modifier space coordinates */
651         char vgroup_name[32];   /* optional vertexgroup name */
652         float factor;                   /* factors to control simple deforms */
653         float limit[2];                 /* lower and upper limit */             
654
655         char mode;                              /* deform function */
656         char axis;                              /* lock axis (for taper and strech) */
657         char originOpts;                /* originOptions */
658         char pad;
659
660 } SimpleDeformModifierData;
661
662 #define MOD_SIMPLEDEFORM_MODE_TWIST             1
663 #define MOD_SIMPLEDEFORM_MODE_BEND              2
664 #define MOD_SIMPLEDEFORM_MODE_TAPER             3
665 #define MOD_SIMPLEDEFORM_MODE_STRETCH   4
666
667 #define MOD_SIMPLEDEFORM_LOCK_AXIS_X                    (1<<0)
668 #define MOD_SIMPLEDEFORM_LOCK_AXIS_Y                    (1<<1)
669
670 /* indicates whether simple deform should use the local
671    coordinates or global coordinates of origin */
672 #define MOD_SIMPLEDEFORM_ORIGIN_LOCAL                   (1<<0)
673
674 #define MOD_UVPROJECT_MAX                               10
675
676 #endif