5439c65aa816068adff63344c8fe64c203e8a7b9
[blender-staging.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, radius;     /* alfa: tilt in 3D View, weight: used for softbody goal weight, radius: for bevel tapering */
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;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
101         short f1, hide;
102         float radius, pad;              /* user-set radius per point for bevelling etc */
103 } BPoint;
104
105 typedef struct Nurb {
106         struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
107         short type;
108         short mat_nr;           /* index into material list */
109         short hide, flag;
110         short pntsu, pntsv;             /* number of points in the U or V directions */
111         short resolu, resolv;   /* tesselation resolution in the U or V directions */
112         short orderu, orderv;
113         short flagu, flagv;
114         
115         float *knotsu, *knotsv;
116         BPoint *bp;
117         BezTriple *bezt;
118         
119         int charidx;
120         int pad;
121 } Nurb;
122
123 typedef struct CharInfo {
124         short kern;
125         short mat_nr;
126         char flag;
127         char pad;
128         short pad2;
129 } CharInfo;
130
131 typedef struct TextBox {
132         float x, y, w, h;
133 } TextBox;
134
135 typedef struct Curve {
136         ID id;
137         
138         struct BoundBox *bb;
139         
140         ListBase nurb;
141         ListBase disp;
142         struct Object *bevobj, *taperobj, *textoncurve;
143         struct Ipo *ipo;
144         Path *path;
145         struct Key *key;
146         struct Material **mat;
147         
148         ListBase bev;
149         
150         /* texture space, copied as one block in editobject.c */
151         float loc[3];
152         float size[3];
153         float rot[3];
154
155         int texflag;
156
157         short pathlen, totcol;
158         short flag, bevresol;
159         float width, ext1, ext2;
160         
161         /* default */
162         short resolu, resolv;
163         short resolu_ren, resolv_ren;
164         int pad2;
165         
166         /* font part */
167         short len, lines, pos, spacemode;
168         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
169         float xof, yof;
170         float linewidth;
171
172         char *str;
173         char family[24];
174         struct VFont *vfont;
175         struct VFont *vfontb;
176         struct VFont *vfonti;
177         struct VFont *vfontbi;
178
179         int sepchar;
180         
181         int totbox, actbox, pad;
182         struct TextBox *tb;     
183         
184         int selstart, selend;   
185         
186         struct CharInfo *strinfo;       
187         struct CharInfo curinfo;        
188 } Curve;
189
190 typedef struct IpoDriver {
191         struct Object *ob;
192         short blocktype, adrcode, type, flag;
193         char name[128]; /* bone or constraint(?), or python expression here */
194 } IpoDriver;
195
196 typedef struct IpoCurve {
197         struct IpoCurve *next,  *prev;
198         
199         struct BPoint *bp;                                      /* are these even used anywhere? */
200         struct BezTriple *bezt;                         /* array of BezTriples (sizeof(BezTriple)*totvert. i.e.  keyframes  */
201
202         rctf maxrct, totrct;                            /* bounding boxes */
203
204         short blocktype, adrcode, vartype;      /* blocktype= ipo-blocktype; adrcode= type of ipo-curve; vartype= 'format' of data */
205         short totvert;                                          /* total number of BezTriples (i.e. keyframes) on curve */
206         short ipo, extrap;                                      /* interpolation and extrapolation modes  */
207         short flag, rt;                                         /* flag= settings; rt= ??? */
208         float ymin, ymax;                                       /* minimum/maximum y-extents for curve */
209         unsigned int bitmask;                           /* ??? */
210         
211         float slide_min, slide_max;                     /* minimum/maximum values for sliders (in action editor) */
212         float curval;                                           /* value of ipo-curve for current frame */
213         
214         IpoDriver *driver;                                      /* pointer to ipo-driver for this curve */
215         
216 } IpoCurve;
217
218 /* **************** CURVE ********************* */
219
220 /* texflag */
221 #define CU_AUTOSPACE    1
222
223 /* flag */
224 #define CU_3D                   1
225 #define CU_FRONT                2
226 #define CU_BACK                 4
227 #define CU_PATH                 8
228 #define CU_FOLLOW               16
229 #define CU_UV_ORCO              32
230 #define CU_NOPUNOFLIP   64
231 #define CU_STRETCH              128
232 #define CU_OFFS_PATHDIST        256
233 #define CU_FAST                 512 /* Font: no filling inside editmode */
234 #define CU_RETOPO               1024
235
236 /* spacemode */
237 #define CU_LEFT                 0
238 #define CU_MIDDLE               1
239 #define CU_RIGHT                2
240 #define CU_JUSTIFY              3
241 #define CU_FLUSH                4
242
243 /* flag (nurb) */
244 #define CU_SMOOTH               1
245
246 /* type (nurb) */
247 #define CU_POLY                 0
248 #define CU_BEZIER               1
249 #define CU_BSPLINE              2
250 #define CU_CARDINAL             3
251 #define CU_NURBS                4
252 #define CU_2D                   8
253
254 /* flagu flagv (nurb) */
255 #define CU_CYCLIC               1
256
257 /* h1 h2 (beztriple) */
258 #define HD_FREE                 0
259 #define HD_AUTO                 1
260 #define HD_VECT                 2
261 #define HD_ALIGN                3
262 #define HD_AUTO_ANIM    4
263
264 /* *************** CHARINFO **************** */
265
266 /* flag */
267 #define CU_STYLE                (1+2)
268 #define CU_BOLD                 1
269 #define CU_ITALIC               2
270 #define CU_UNDERLINE    4
271 #define CU_WRAP                 8       /* wordwrap occured here */
272
273 /* *************** driver ****************** */
274
275 /* driver->type */
276 #define IPO_DRIVER_TYPE_NORMAL 0
277 #define IPO_DRIVER_TYPE_PYTHON 1
278
279 /* driver->flag */
280 /* invalid flag: currently only used for buggy pydriver expressions: */
281 #define IPO_DRIVER_FLAG_INVALID 1
282
283 #endif
284