* Shrink/Fatten for bevelled curves
[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, 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         float loc[3];
151         float size[3];
152         float rot[3];
153
154         int texflag;
155
156         short pathlen, totcol;
157         short flag, bevresol;
158         float width, ext1, ext2;
159         
160         /* default */
161         short resolu, resolv;
162         short resolu_ren, resolv_ren;
163         int pad2;
164         
165         /* font part */
166         short len, lines, pos, spacemode;
167         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
168         float xof, yof;
169         float linewidth;
170
171         char *str;
172         char family[24];
173         struct VFont *vfont;
174         struct VFont *vfontb;
175         struct VFont *vfonti;
176         struct VFont *vfontbi;
177
178         int sepchar;
179         
180         int totbox, actbox, pad;
181         struct TextBox *tb;     
182         
183         int selstart, selend;   
184         
185         struct CharInfo *strinfo;       
186         struct CharInfo curinfo;        
187 } Curve;
188
189 typedef struct IpoDriver {
190         struct Object *ob;
191         short blocktype, adrcode, type, flag;
192         char name[128]; /* bone or constraint(?), or python expression here */
193 } IpoDriver;
194
195 typedef struct IpoCurve {
196         struct IpoCurve *next,  *prev;
197         
198         struct BPoint *bp;
199         struct BezTriple *bezt;
200
201         rctf maxrct, totrct;
202
203         short blocktype, adrcode, vartype;
204         short totvert;
205         short ipo, extrap;
206         short flag, rt;
207         float ymin, ymax;
208         unsigned int bitmask;
209         
210         float curval;
211         
212         IpoDriver *driver;
213         
214 } IpoCurve;
215
216 /* **************** CURVE ********************* */
217
218 /* texflag */
219 #define CU_AUTOSPACE    1
220
221 /* flag */
222 #define CU_3D                   1
223 #define CU_FRONT                2
224 #define CU_BACK                 4
225 #define CU_PATH                 8
226 #define CU_FOLLOW               16
227 #define CU_UV_ORCO              32
228 #define CU_NOPUNOFLIP   64
229 #define CU_STRETCH              128
230 #define CU_OFFS_PATHDIST        256
231 #define CU_FAST                 512 /* Font: no filling inside editmode */
232
233 /* spacemode */
234 #define CU_LEFT                 0
235 #define CU_MIDDLE               1
236 #define CU_RIGHT                2
237 #define CU_JUSTIFY              3
238 #define CU_FLUSH                4
239
240 /* flag (nurb) */
241 #define CU_SMOOTH               1
242
243 /* type (nurb) */
244 #define CU_POLY                 0
245 #define CU_BEZIER               1
246 #define CU_BSPLINE              2
247 #define CU_CARDINAL             3
248 #define CU_NURBS                4
249 #define CU_2D                   8
250
251 /* flagu flagv (nurb) */
252 #define CU_CYCLIC               1
253
254 /* h1 h2 (beztriple) */
255 #define HD_FREE                 0
256 #define HD_AUTO                 1
257 #define HD_VECT                 2
258 #define HD_ALIGN                3
259 #define HD_AUTO_ANIM    4
260
261 /* *************** CHARINFO **************** */
262
263 /* flag */
264 #define CU_STYLE                (1+2)
265 #define CU_BOLD                 1
266 #define CU_ITALIC               2
267 #define CU_UNDERLINE    4
268 #define CU_WRAP                 8       /* wordwrap occured here */
269
270 /* *************** driver ****************** */
271
272 /* driver->type */
273 #define IPO_DRIVER_TYPE_NORMAL 0
274 #define IPO_DRIVER_TYPE_PYTHON 1
275
276 /* driver->flag */
277 /* invalid flag: currently only used for buggy pydriver expressions: */
278 #define IPO_DRIVER_FLAG_INVALID 1
279
280 #endif
281