BGE: Add level mode to property actuator
[blender.git] / source / blender / makesdna / DNA_curve_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_curve_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_CURVE_TYPES_H__
33 #define __DNA_CURVE_TYPES_H__
34
35 #include "DNA_defs.h"
36 #include "DNA_listBase.h"
37 #include "DNA_vec_types.h"
38 #include "DNA_ID.h"
39
40 #define MAXTEXTBOX 256  /* used in readfile.c and editfont.c */
41
42 struct BoundBox;
43 struct Object;
44 struct Ipo;
45 struct Key;
46 struct Material;
47 struct VFont;
48 struct AnimData;
49 struct SelBox;
50 struct EditFont;
51 struct GHash;
52
53 /* These two Lines with # tell makesdna this struct can be excluded. */
54 #
55 #
56 typedef struct PathPoint {
57         float vec[4]; /* grr, cant get rid of tilt yet */
58         float quat[4];
59         float radius, weight;
60 } PathPoint;
61
62 /* These two Lines with # tell makesdna this struct can be excluded. */
63 #
64 #
65 typedef struct Path {
66         struct PathPoint *data;
67         int len;
68         float totdist;
69 } Path;
70
71 /* These two Lines with # tell makesdna this struct can be excluded. */
72 #
73 #
74 typedef struct BevPoint {
75         float vec[3], alfa, radius, weight;
76         float sina, cosa;                               /* 2D Only */
77         float dir[3], tan[3], quat[4];  /* 3D Only */
78         short split_tag, dupe_tag;
79 } BevPoint;
80
81 /* These two Lines with # tell makesdna this struct can be excluded. */
82 #
83 #
84 typedef struct BevList {
85         struct BevList *next, *prev;
86         int nr, dupe_nr;
87         int poly, hole;
88         int charidx;
89
90         /* over-alloc */
91         BevPoint bevpoints[0];
92 } BevList;
93
94 /**
95  * Keyframes on F-Curves (allows code reuse of Bezier eval code) and
96  * Points on Bezier Curves/Paths are generally BezTriples 
97  *
98  * \note alfa location in struct is abused by Key system
99  *
100  * \note vec in BezTriple looks like this:
101  * - vec[0][0] = x location of handle 1
102  * - vec[0][1] = y location of handle 1
103  * - vec[0][2] = z location of handle 1 (not used for FCurve Points(2d))
104  * - vec[1][0] = x location of control point
105  * - vec[1][1] = y location of control point
106  * - vec[1][2] = z location of control point
107  * - vec[2][0] = x location of handle 2
108  * - vec[2][1] = y location of handle 2
109  * - vec[2][2] = z location of handle 2 (not used for FCurve Points(2d))
110  */
111 typedef struct BezTriple {
112         float vec[3][3];
113         float alfa, weight, radius;     /* alfa: tilt in 3D View, weight: used for softbody goal weight, radius: for bevel tapering */
114         
115         char ipo;                                       /* ipo: interpolation mode for segment from this BezTriple to the next */
116         
117         char h1, h2;                            /* h1, h2: the handle type of the two handles */
118         char f1, f2, f3;                        /* f1, f2, f3: used for selection status */
119         
120         char hide;                                      /* hide: used to indicate whether BezTriple is hidden (3D), type of keyframe (eBezTriple_KeyframeTypes) */
121         
122         char easing;                            /* easing: easing type for interpolation mode (eBezTriple_Easing) */
123         float back;                                     /* BEZT_IPO_BACK */
124         float amplitude, period;        /* BEZT_IPO_ELASTIC */
125
126         char  pad[4];
127 } BezTriple;
128
129 /* note; alfa location in struct is abused by Key system */
130 typedef struct BPoint {
131         float vec[4];
132         float alfa, weight;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
133         short f1, hide;                 /* f1: selection status,  hide: is point hidden or not */
134         float radius, pad;              /* user-set radius per point for beveling etc */
135 } BPoint;
136
137 /**
138  * \note Nurb name is misleading, since it can be used for polygons too,
139  * also, it should be NURBS (Nurb isn't the singular of Nurbs).
140  */
141 typedef struct Nurb {
142         struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
143         short type;
144         short mat_nr;           /* index into material list */
145         short hide, flag;
146         int pntsu, pntsv;               /* number of points in the U or V directions */
147         short pad[2];
148         short resolu, resolv;   /* tessellation resolution in the U or V directions */
149         short orderu, orderv;
150         short flagu, flagv;
151         
152         float *knotsu, *knotsv;
153         BPoint *bp;
154         BezTriple *bezt;
155
156         short tilt_interp;      /* KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE */
157         short radius_interp;
158         
159         int charidx;
160 } Nurb;
161
162 typedef struct CharInfo {
163         short kern;
164         short mat_nr; /* index start at 1, unlike mesh & nurbs */
165         char flag;
166         char pad;
167         short pad2;
168 } CharInfo;
169
170 typedef struct TextBox {
171         float x, y, w, h;
172 } TextBox;
173
174 typedef struct EditNurb {
175         /* base of nurbs' list (old Curve->editnurb) */
176         ListBase nurbs;
177
178         /* index data for shape keys */
179         struct GHash *keyindex;
180
181         /* shape key being edited */
182         int shapenr;
183
184         char pad[4];
185 } EditNurb;
186
187 typedef struct Curve {
188         ID id;
189         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
190         
191         struct BoundBox *bb;
192         
193         ListBase nurb;          /* actual data, called splines in rna */
194         
195         EditNurb *editnurb;     /* edited data, not in file, use pointer so we can check for it */
196         
197         struct Object *bevobj, *taperobj, *textoncurve;
198         struct Ipo *ipo    DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
199         struct Key *key;
200         struct Material **mat;
201         
202         /* texture space, copied as one block in editobject.c */
203         float loc[3];
204         float size[3];
205         float rot[3];
206
207         short type;     /* creation-time type of curve datablock */
208
209         short texflag; /* keep a short because of BKE_object_obdata_texspace_get() */
210         short drawflag, twist_mode;
211         float twist_smooth, smallcaps_scale;
212
213         int pathlen;
214         short bevresol, totcol;
215         int flag;
216         float width, ext1, ext2;
217         
218         /* default */
219         short resolu, resolv;
220         short resolu_ren, resolv_ren;
221
222         /* edit, index in nurb list */
223         int actnu;
224         /* edit, index in active nurb (BPoint or BezTriple) */
225         int actvert;
226
227         char pad[4];
228
229         /* font part */
230         short lines;
231         char spacemode, pad1;
232         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
233         float xof, yof;
234         float linewidth;
235
236         /* copy of EditFont vars (wchar_t aligned),
237          * warning! don't use in editmode (storage only) */
238         int pos;
239         int selstart, selend;
240
241         /* text data */
242         int len_wchar;  /* number of characters (strinfo) */
243         int len;        /* number of bytes (str - utf8) */
244         char *str;
245         struct EditFont *editfont;
246
247         char family[64];
248         struct VFont *vfont;
249         struct VFont *vfontb;
250         struct VFont *vfonti;
251         struct VFont *vfontbi;
252         
253         struct TextBox *tb;
254         int totbox, actbox;
255         
256         struct CharInfo *strinfo;
257         struct CharInfo curinfo;
258         /* font part end */
259
260
261         float ctime;                    /* current evaltime - for use by Objects parented to curves */
262         float bevfac1, bevfac2;
263         char bevfac1_mapping, bevfac2_mapping;
264
265         char pad2[2];
266
267 } Curve;
268
269 /* **************** CURVE ********************* */
270
271 /* texflag */
272 #define CU_AUTOSPACE    1
273
274 /* drawflag */
275 #define CU_HIDE_HANDLES (1 << 0)
276 #define CU_HIDE_NORMALS (1 << 1)
277
278 /* flag */
279 #define CU_3D                   1
280 #define CU_FRONT                2
281 #define CU_BACK                 4
282 #define CU_PATH                 8
283 #define CU_FOLLOW               16
284 #define CU_UV_ORCO              32
285 #define CU_DEFORM_BOUNDS_OFF 64 
286 #define CU_STRETCH              128
287 /* #define CU_OFFS_PATHDIST     256 */ /* DEPRECATED */
288 #define CU_FAST                 512 /* Font: no filling inside editmode */
289 /* #define CU_RETOPO               1024 */ /* DEPRECATED */
290 #define CU_DS_EXPAND    2048
291 #define CU_PATH_RADIUS  4096 /* make use of the path radius if this is enabled (default for new curves) */
292 #define CU_DEFORM_FILL  8192 /* fill 2d curve after deformation */
293 #define CU_FILL_CAPS    16384 /* fill bevel caps */
294 #define CU_MAP_TAPER    32768 /* map taper object to bevelled area */
295
296 /* twist mode */
297 #define CU_TWIST_Z_UP                   0
298 // #define CU_TWIST_Y_UP                        1 // not used yet
299 // #define CU_TWIST_X_UP                        2
300 #define CU_TWIST_MINIMUM                3
301 #define CU_TWIST_TANGENT                4
302
303 /* bevel factor mapping */
304 enum {
305         CU_BEVFAC_MAP_RESOLU = 0,
306         CU_BEVFAC_MAP_SEGMENT = 1,
307         CU_BEVFAC_MAP_SPLINE = 2
308 };
309
310 /* spacemode */
311 #define CU_LEFT                 0
312 #define CU_MIDDLE               1
313 #define CU_RIGHT                2
314 #define CU_JUSTIFY              3
315 #define CU_FLUSH                4
316
317 /* flag (nurb) */
318 #define CU_SMOOTH               1
319 #define CU_2D                   8 /* moved from type since 2.4x */
320
321 /* type (nurb) */
322 #define CU_POLY                 0
323 #define CU_BEZIER               1
324 #define CU_BSPLINE              2
325 #define CU_CARDINAL             3
326 #define CU_NURBS                4
327 #define CU_TYPE                 (CU_POLY|CU_BEZIER|CU_BSPLINE|CU_CARDINAL|CU_NURBS)
328
329                 /* only for adding */
330 #define CU_PRIMITIVE    0xF00
331
332                 /* 2 or 4 points */
333 #define CU_PRIM_CURVE   0x100
334                 /* 8 points circle */
335 #define CU_PRIM_CIRCLE  0x200
336                 /* 4x4 patch Nurb */
337 #define CU_PRIM_PATCH   0x300
338 #define CU_PRIM_TUBE    0x400
339 #define CU_PRIM_SPHERE  0x500
340 #define CU_PRIM_DONUT   0x600
341                 /* 5 points,  5th order straight line (for anim path) */
342 #define CU_PRIM_PATH    0x700
343
344
345 /* flagu flagv (nurb) */
346 #define CU_NURB_CYCLIC          1
347 #define CU_NURB_ENDPOINT        2
348 #define CU_NURB_BEZIER          4
349
350 #define CU_ACT_NONE             -1
351
352 /* *************** BEZTRIPLE **************** */
353
354 /* h1 h2 (beztriple) */
355 typedef enum eBezTriple_Handle {
356         HD_FREE = 0,
357         HD_AUTO = 1,
358         HD_VECT = 2,
359         HD_ALIGN = 3,
360         HD_AUTO_ANIM = 4,         /* auto-clamped handles for animation */
361         HD_ALIGN_DOUBLESIDE = 5,  /* align handles, displayed both of them. used for masks */
362 } eBezTriple_Handle;
363
364 /* interpolation modes (used only for BezTriple->ipo) */
365 typedef enum eBezTriple_Interpolation {
366         /* traditional interpolation */
367         BEZT_IPO_CONST = 0,     /* constant interpolation */
368         BEZT_IPO_LIN = 1,       /* linear interpolation */
369         BEZT_IPO_BEZ = 2,       /* bezier interpolation */
370         
371         /* easing equations */
372         BEZT_IPO_BACK = 3,
373         BEZT_IPO_BOUNCE = 4,
374         BEZT_IPO_CIRC = 5,
375         BEZT_IPO_CUBIC = 6,
376         BEZT_IPO_ELASTIC = 7,
377         BEZT_IPO_EXPO = 8,
378         BEZT_IPO_QUAD = 9,
379         BEZT_IPO_QUART = 10,
380         BEZT_IPO_QUINT = 11,
381         BEZT_IPO_SINE = 12
382 } eBezTriple_Interpolation;
383
384 /* easing modes (used only for Keyframes - BezTriple->easing) */
385 typedef enum eBezTriple_Easing {
386         BEZT_IPO_EASE_AUTO = 0,
387         
388         BEZT_IPO_EASE_IN = 1,
389         BEZT_IPO_EASE_OUT = 2,
390         BEZT_IPO_EASE_IN_OUT = 3
391 } eBezTriple_Easing;
392
393 /* types of keyframe (used only for BezTriple->hide when BezTriple is used in F-Curves) */
394 typedef enum eBezTriple_KeyframeType {
395         BEZT_KEYTYPE_KEYFRAME = 0,      /* default - 'proper' Keyframe */
396         BEZT_KEYTYPE_EXTREME = 1,       /* 'extreme' keyframe */
397         BEZT_KEYTYPE_BREAKDOWN = 2,     /* 'breakdown' keyframe */
398         BEZT_KEYTYPE_JITTER = 3,        /* 'jitter' keyframe (for adding 'filler' secondary motion) */
399 } eBezTriple_KeyframeType;
400
401 /* checks if the given BezTriple is selected */
402 #define BEZSELECTED(bezt) (((bezt)->f2 & SELECT) || ((bezt)->f1 & SELECT) || ((bezt)->f3 & SELECT))
403 #define BEZSELECTED_HIDDENHANDLES(cu, bezt)   (((cu)->drawflag & CU_HIDE_HANDLES) ? (bezt)->f2 & SELECT : BEZSELECTED(bezt))
404
405 /* *************** CHARINFO **************** */
406
407 /* flag */
408 /* note: CU_CHINFO_WRAP and CU_CHINFO_SMALLCAPS_TEST are set dynamically */
409 #define CU_CHINFO_BOLD                  (1<<0)
410 #define CU_CHINFO_ITALIC                (1<<1)
411 #define CU_CHINFO_UNDERLINE     (1<<2)
412 #define CU_CHINFO_WRAP                  (1<<3)  /* wordwrap occurred here */
413 #define CU_CHINFO_SMALLCAPS     (1<<4)
414 #define CU_CHINFO_SMALLCAPS_CHECK (1<<5) /* set at runtime, checks if case switching is needed */
415
416 /* mixed with KEY_LINEAR but define here since only curve supports */
417 #define KEY_CU_EASE                     3
418
419 /* indicates point has been seen during surface duplication */
420 #define SURF_SEEN                       4
421
422 #endif
423