Pydrivers: Ipo Drivers controlled by Python expressions
[blender.git] / source / blender / makesdna / DNA_curve_types.h
1 /**
2  * blenlib/DNA_curve_types.h (mar-2001 nzc)
3  *
4  * Curve stuff.
5  *
6  * $Id$ 
7  *
8  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version. The Blender
14  * Foundation also sells licenses for use in proprietary software under
15  * the Blender License.  See http://www.blender.org/BL/ for information
16  * about this.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26  *
27  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
28  * All rights reserved.
29  *
30  * The Original Code is: all of this file.
31  *
32  * Contributor(s): none yet.
33  *
34  * ***** END GPL/BL DUAL LICENSE BLOCK *****
35  */
36 #ifndef DNA_CURVE_TYPES_H
37 #define DNA_CURVE_TYPES_H
38
39 #include "DNA_listBase.h"
40 #include "DNA_vec_types.h"
41 #include "DNA_ID.h"
42
43 #define MAXTEXTBOX 256  /* used in readfile.c and editfont.c */
44
45 struct BoundBox;
46 struct Object;
47 struct Ipo;
48 struct Key;
49 struct Material;
50 struct VFont;
51
52 #
53 #
54 typedef struct Path {
55         int len;
56         float *data;
57         float totdist;
58 } Path;
59
60 #
61 #
62 typedef struct BevList {
63         struct BevList *next, *prev;
64         int nr, flag;
65         short poly, gat;
66 } BevList;
67
68 #
69 #
70 typedef struct BevPoint {
71         float x, y, z, alfa, sina, cosa, mat[3][3];
72         short f1, f2;
73 } BevPoint;
74
75 /* note; alfa location in struct is abused by Key system */
76 typedef struct BezTriple {
77         float vec[3][3];
78         float alfa, weight, pad;
79         short h1, h2;
80         char f1, f2, f3, hide;
81 } BezTriple;
82
83 /* note; alfa location in struct is abused by Key system */
84 typedef struct BPoint {
85         float vec[4];
86         float alfa, weight;
87         short f1, hide;
88 } BPoint;
89
90 typedef struct Nurb {
91         struct Nurb *next, *prev;
92         short type;
93         short mat_nr;          /* index into material list */
94         short hide, flag;
95         short pntsu, pntsv;
96         short resolu, resolv;
97         short orderu, orderv;
98         short flagu, flagv;
99         
100         float *knotsu, *knotsv;
101         BPoint *bp;
102         BezTriple *bezt;
103         
104         int charidx;
105         int pad;
106 } Nurb;
107
108 typedef struct CharInfo {
109         short kern;
110         short mat_nr;
111         char flag;
112         char pad;
113         short pad2;
114 } CharInfo;
115
116 typedef struct TextBox {
117         float x, y, w, h;
118 } TextBox;
119
120 typedef struct Curve {
121         ID id;
122         
123         struct BoundBox *bb;
124         
125         ListBase nurb;
126         ListBase disp;
127         struct Object *bevobj, *taperobj, *textoncurve;
128         struct Ipo *ipo;
129         Path *path;
130         struct Key *key;
131         struct Material **mat;
132         
133         ListBase bev;
134         
135         float loc[3];
136         float size[3];
137         float rot[3];
138
139         int texflag;
140
141         short pathlen, totcol;
142         short flag, bevresol;
143         float width, ext1, ext2;
144         
145         /* default */
146         short resolu, resolv;
147         short resolu_ren, resolv_ren;
148         int pad2;
149         
150         /* font part */
151         short len, lines, pos, spacemode;
152         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
153         float xof, yof;
154         float linewidth;
155
156         char *str;
157         char family[24];
158         struct VFont *vfont;
159         struct VFont *vfontb;
160         struct VFont *vfonti;
161         struct VFont *vfontbi;
162
163         int sepchar;
164         
165         int totbox, actbox, pad;
166         struct TextBox *tb;     
167         
168         int selstart, selend;   
169         
170         struct CharInfo *strinfo;       
171         struct CharInfo curinfo;        
172 } Curve;
173
174 typedef struct IpoDriver {
175         struct Object *ob;
176         short blocktype, adrcode, type, flag;
177         char name[128]; /* bone or constraint(?), or python expression here */
178 } IpoDriver;
179
180 typedef struct IpoCurve {
181         struct IpoCurve *next,  *prev;
182         
183         struct BPoint *bp;
184         struct BezTriple *bezt;
185
186         rctf maxrct, totrct;
187
188         short blocktype, adrcode, vartype;
189         short totvert;
190         short ipo, extrap;
191         short flag, rt;
192         float ymin, ymax;
193         unsigned int bitmask;
194         
195         float curval;
196         
197         IpoDriver *driver;
198         
199 } IpoCurve;
200
201 /* **************** CURVE ********************* */
202
203 /* texflag */
204 #define CU_AUTOSPACE    1
205
206 /* flag */
207 #define CU_3D                   1
208 #define CU_FRONT                2
209 #define CU_BACK                 4
210 #define CU_PATH                 8
211 #define CU_FOLLOW               16
212 #define CU_UV_ORCO              32
213 #define CU_NOPUNOFLIP   64
214 #define CU_STRETCH              128
215 #define CU_OFFS_PATHDIST        256
216 #define CU_FAST                 512 /* Font: no filling inside editmode */
217
218 /* spacemode */
219 #define CU_LEFT                 0
220 #define CU_MIDDLE               1
221 #define CU_RIGHT                2
222 #define CU_JUSTIFY              3
223 #define CU_FLUSH                4
224
225 /* flag (nurb) */
226 #define CU_SMOOTH               1
227
228 /* type (nurb) */
229 #define CU_POLY                 0
230 #define CU_BEZIER               1
231 #define CU_BSPLINE              2
232 #define CU_CARDINAL             3
233 #define CU_NURBS                4
234 #define CU_2D                   8
235
236 /* flagu flagv (nurb) */
237 #define CU_CYCLIC               1
238
239 /* h1 h2 (beztriple) */
240 #define HD_FREE                 0
241 #define HD_AUTO                 1
242 #define HD_VECT                 2
243 #define HD_ALIGN                3
244 #define HD_AUTO_ANIM    4
245
246 /* *************** CHARINFO **************** */
247
248 /* flag */
249 #define CU_STYLE                (1+2)
250 #define CU_BOLD                 1
251 #define CU_ITALIC               2
252 #define CU_UNDERLINE    4
253 #define CU_WRAP                 8       /* wordwrap occured here */
254
255 /* *************** driver ****************** */
256
257 /* driver->type */
258 #define IPO_DRIVER_TYPE_NORMAL 0
259 #define IPO_DRIVER_TYPE_PYTHON 1
260
261 /* driver->flag */
262 /* invalid flag: currently only used for buggy pydriver expressions: */
263 #define IPO_DRIVER_FLAG_INVALID 1
264
265 #endif
266