4d0cca68ad3bb9582330fa345e7a3a1597b76a5c
[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 /* These two Lines with # tell makesdna this struct can be excluded. */
53 #
54 #
55 typedef struct Path {
56         int len;
57         float *data;
58         float totdist;
59 } Path;
60
61 /* These two Lines with # tell makesdna this struct can be excluded. */
62 #
63 #
64 typedef struct BevList {
65         struct BevList *next, *prev;
66         int nr, flag;
67         short poly, gat;
68 } BevList;
69
70 /* These two Lines with # tell makesdna this struct can be excluded. */
71 #
72 #
73 typedef struct BevPoint {
74         float x, y, z, alfa, sina, cosa, mat[3][3];
75         short f1, f2;
76 } BevPoint;
77
78 /* note; alfa location in struct is abused by Key system */
79 /* vec in BezTriple looks like this:
80         vec[0][0]=x location of handle 1
81         vec[0][1]=y location of handle 1
82         vec[0][2]=z location of handle 1 (not used for IpoCurve Points(2d))
83         vec[1][0]=x location of control point
84         vec[1][1]=y location of control point
85         vec[1][2]=z location of control point
86         vec[2][0]=x location of handle 2
87         vec[2][1]=y location of handle 2
88         vec[2][2]=z location of handle 2 (not used for IpoCurve Points(2d))
89 */
90 typedef struct BezTriple {
91         float vec[3][3];
92         float alfa, weight, pad;
93         short h1, h2;
94         char f1, f2, f3, hide;
95 } BezTriple;
96
97 /* note; alfa location in struct is abused by Key system */
98 typedef struct BPoint {
99         float vec[4];
100         float alfa, weight;
101         short f1, hide;
102 } BPoint;
103
104 typedef struct Nurb {
105         struct Nurb *next, *prev;
106         short type;
107         short mat_nr;          /* index into material list */
108         short hide, flag;
109         short pntsu, pntsv;
110         short resolu, resolv;
111         short orderu, orderv;
112         short flagu, flagv;
113         
114         float *knotsu, *knotsv;
115         BPoint *bp;
116         BezTriple *bezt;
117         
118         int charidx;
119         int pad;
120 } Nurb;
121
122 typedef struct CharInfo {
123         short kern;
124         short mat_nr;
125         char flag;
126         char pad;
127         short pad2;
128 } CharInfo;
129
130 typedef struct TextBox {
131         float x, y, w, h;
132 } TextBox;
133
134 typedef struct Curve {
135         ID id;
136         
137         struct BoundBox *bb;
138         
139         ListBase nurb;
140         ListBase disp;
141         struct Object *bevobj, *taperobj, *textoncurve;
142         struct Ipo *ipo;
143         Path *path;
144         struct Key *key;
145         struct Material **mat;
146         
147         ListBase bev;
148         
149         float loc[3];
150         float size[3];
151         float rot[3];
152
153         int texflag;
154
155         short pathlen, totcol;
156         short flag, bevresol;
157         float width, ext1, ext2;
158         
159         /* default */
160         short resolu, resolv;
161         short resolu_ren, resolv_ren;
162         int pad2;
163         
164         /* font part */
165         short len, lines, pos, spacemode;
166         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
167         float xof, yof;
168         float linewidth;
169
170         char *str;
171         char family[24];
172         struct VFont *vfont;
173         struct VFont *vfontb;
174         struct VFont *vfonti;
175         struct VFont *vfontbi;
176
177         int sepchar;
178         
179         int totbox, actbox, pad;
180         struct TextBox *tb;     
181         
182         int selstart, selend;   
183         
184         struct CharInfo *strinfo;       
185         struct CharInfo curinfo;        
186 } Curve;
187
188 typedef struct IpoDriver {
189         struct Object *ob;
190         short blocktype, adrcode, type, flag;
191         char name[128]; /* bone or constraint(?), or python expression here */
192 } IpoDriver;
193
194 typedef struct IpoCurve {
195         struct IpoCurve *next,  *prev;
196         
197         struct BPoint *bp;
198         struct BezTriple *bezt;
199
200         rctf maxrct, totrct;
201
202         short blocktype, adrcode, vartype;
203         short totvert;
204         short ipo, extrap;
205         short flag, rt;
206         float ymin, ymax;
207         unsigned int bitmask;
208         
209         float curval;
210         
211         IpoDriver *driver;
212         
213 } IpoCurve;
214
215 /* **************** CURVE ********************* */
216
217 /* texflag */
218 #define CU_AUTOSPACE    1
219
220 /* flag */
221 #define CU_3D                   1
222 #define CU_FRONT                2
223 #define CU_BACK                 4
224 #define CU_PATH                 8
225 #define CU_FOLLOW               16
226 #define CU_UV_ORCO              32
227 #define CU_NOPUNOFLIP   64
228 #define CU_STRETCH              128
229 #define CU_OFFS_PATHDIST        256
230 #define CU_FAST                 512 /* Font: no filling inside editmode */
231
232 /* spacemode */
233 #define CU_LEFT                 0
234 #define CU_MIDDLE               1
235 #define CU_RIGHT                2
236 #define CU_JUSTIFY              3
237 #define CU_FLUSH                4
238
239 /* flag (nurb) */
240 #define CU_SMOOTH               1
241
242 /* type (nurb) */
243 #define CU_POLY                 0
244 #define CU_BEZIER               1
245 #define CU_BSPLINE              2
246 #define CU_CARDINAL             3
247 #define CU_NURBS                4
248 #define CU_2D                   8
249
250 /* flagu flagv (nurb) */
251 #define CU_CYCLIC               1
252
253 /* h1 h2 (beztriple) */
254 #define HD_FREE                 0
255 #define HD_AUTO                 1
256 #define HD_VECT                 2
257 #define HD_ALIGN                3
258 #define HD_AUTO_ANIM    4
259
260 /* *************** CHARINFO **************** */
261
262 /* flag */
263 #define CU_STYLE                (1+2)
264 #define CU_BOLD                 1
265 #define CU_ITALIC               2
266 #define CU_UNDERLINE    4
267 #define CU_WRAP                 8       /* wordwrap occured here */
268
269 /* *************** driver ****************** */
270
271 /* driver->type */
272 #define IPO_DRIVER_TYPE_NORMAL 0
273 #define IPO_DRIVER_TYPE_PYTHON 1
274
275 /* driver->flag */
276 /* invalid flag: currently only used for buggy pydriver expressions: */
277 #define IPO_DRIVER_FLAG_INVALID 1
278
279 #endif
280