Saturday morning first cup of coffee hack (yeah, its a late
[blender.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 typedef enum ModifierType {
9         eModifierType_None = 0,
10         eModifierType_Subsurf,
11         eModifierType_Lattice,
12         eModifierType_Curve,
13         eModifierType_Build,
14         eModifierType_Mirror,
15         eModifierType_Decimate,
16         eModifierType_Wave,
17         eModifierType_Armature,
18         eModifierType_Hook,
19         eModifierType_Softbody,
20         eModifierType_Boolean,
21
22         NUM_MODIFIER_TYPES
23 } ModifierType;
24
25         /* These numerical values are explicitly chosen so that 
26          * (mode&1) is true for realtime calc and (mode&2) is true
27          * for render calc.
28          */
29 typedef enum ModifierMode {
30         eModifierMode_Realtime = (1<<0),
31         eModifierMode_Render = (1<<1),
32         eModifierMode_Editmode = (1<<2),
33         eModifierMode_OnCage = (1<<3),
34         eModifierMode_Expanded = (1<<4),
35         eModifierMode_Virtual = (1<<5),
36 } ModifierMode;
37
38 typedef struct ModifierData {
39         struct ModifierData *next, *prev;
40
41         int type, mode;
42         char name[32];
43
44         char *error;
45 } ModifierData;
46
47 typedef enum {
48         eSubsurfModifierFlag_Incremental = (1<<0),
49         eSubsurfModifierFlag_DebugIncr = (1<<1),
50         eSubsurfModifierFlag_ControlEdges = (1<<2)
51 } SubsurfModifierFlag;
52 typedef struct SubsurfModifierData {
53         ModifierData modifier;
54
55         short subdivType, levels, renderLevels, flags;
56
57         void *emCache, *mCache;
58 } SubsurfModifierData;
59
60 typedef struct LatticeModifierData {
61         ModifierData modifier;
62
63         struct Object *object;
64 } LatticeModifierData;
65
66 typedef struct CurveModifierData {
67         ModifierData modifier;
68
69         struct Object *object;
70 } CurveModifierData;
71
72 typedef struct BuildModifierData {
73         ModifierData modifier;
74
75         float start, length;
76         int randomize, seed;
77 } BuildModifierData;
78
79 typedef struct MirrorModifierData {
80         ModifierData modifier;
81
82         int axis;
83         float tolerance;
84 } MirrorModifierData;
85
86 typedef struct DecimateModifierData {
87         ModifierData modifier;
88
89         float percent;
90         int faceCount;
91 } DecimateModifierData;
92
93 typedef struct WaveModifierData {
94         ModifierData modifier;
95
96         short flag, pad;
97
98         float startx, starty, height, width;
99         float narrow, speed, damp;
100         
101         float timeoffs, lifetime;
102 } WaveModifierData;
103
104 typedef struct ArmatureModifierData {
105         ModifierData modifier;
106
107         struct Object *object;
108 } ArmatureModifierData;
109
110 typedef struct HookModifierData {
111         ModifierData modifier;
112
113         struct Object *object;
114         float parentinv[4][4];  /* matrix making current transform unmodified */
115         float cent[3];                  /* visualization of hook */
116         float falloff;                  /* if not zero, falloff is distance where influence zero */
117         
118         int *indexar;
119         int totindex;
120         float force;
121 } HookModifierData;
122
123 typedef struct SoftbodyModifierData {
124         ModifierData modifier;
125 } SoftbodyModifierData;
126
127 typedef enum {
128         eBooleanModifierOp_Intersect,
129         eBooleanModifierOp_Union,
130         eBooleanModifierOp_Difference,
131 } BooleanModifierOp;
132 typedef struct BooleanModifierData {
133         ModifierData modifier;
134
135         struct Object *object;
136         int operation, pad;
137 } BooleanModifierData;
138
139 #endif