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