2.5
[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 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.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23  *
24  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
25  * All rights reserved.
26  *
27  * The Original Code is: all of this file.
28  *
29  * Contributor(s): none yet.
30  *
31  * ***** END GPL LICENSE BLOCK *****
32  */
33 #ifndef DNA_CURVE_TYPES_H
34 #define DNA_CURVE_TYPES_H
35
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
49 /* These two Lines with # tell makesdna this struct can be excluded. */
50 #
51 #
52 typedef struct Path {
53         int len;
54         float *data;
55         float totdist;
56 } Path;
57
58 /* These two Lines with # tell makesdna this struct can be excluded. */
59 #
60 #
61 typedef struct BevList {
62         struct BevList *next, *prev;
63         int nr, flag;
64         short poly, gat;
65 } BevList;
66
67 /* These two Lines with # tell makesdna this struct can be excluded. */
68 #
69 #
70 typedef struct BevPoint {
71         float x, y, z, alfa, radius, sina, cosa, mat[3][3];
72         short f1, f2;
73 } BevPoint;
74
75 /* Keyframes on IPO curves and Points on Bezier Curves/Paths are generally BezTriples */
76 /* note: alfa location in struct is abused by Key system */
77 /* vec in BezTriple looks like this:
78         vec[0][0]=x location of handle 1
79         vec[0][1]=y location of handle 1
80         vec[0][2]=z location of handle 1 (not used for IpoCurve Points(2d))
81         vec[1][0]=x location of control point
82         vec[1][1]=y location of control point
83         vec[1][2]=z location of control point
84         vec[2][0]=x location of handle 2
85         vec[2][1]=y location of handle 2
86         vec[2][2]=z location of handle 2 (not used for IpoCurve Points(2d))
87 */
88 typedef struct BezTriple {
89         float vec[3][3];
90         float alfa, weight, radius;     /* alfa: tilt in 3D View, weight: used for softbody goal weight, radius: for bevel tapering */
91         short ipo;                                      /* ipo: interpolation mode for segment from this BezTriple to the next */
92         char h1, h2;                            /* h1, h2: the handle type of the two handles */
93         char f1, f2, f3, hide;          /* f1, f2, f3: used for selection status,  hide: used to indicate whether BezTriple is hidden */
94 } BezTriple;
95
96 /* note; alfa location in struct is abused by Key system */
97 typedef struct BPoint {
98         float vec[4];
99         float alfa, weight;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
100         short f1, hide;                 /* f1: selection status,  hide: is point hidden or not */
101         float radius, pad;              /* user-set radius per point for bevelling etc */
102 } BPoint;
103
104 typedef struct Nurb {
105         struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
106         short type;
107         short mat_nr;           /* index into material list */
108         short hide, flag;
109         short pntsu, pntsv;             /* number of points in the U or V directions */
110         short resolu, resolv;   /* tesselation resolution in the U or V directions */
111         short orderu, orderv;
112         short flagu, flagv;
113         
114         float *knotsu, *knotsv;
115         BPoint *bp;
116         BezTriple *bezt;
117
118         short tilt_interp;      /* KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE */
119         short radius_interp;
120         
121         int charidx;
122 } Nurb;
123
124 typedef struct CharInfo {
125         short kern;
126         short mat_nr;
127         char flag;
128         char pad;
129         short pad2;
130 } CharInfo;
131
132 typedef struct TextBox {
133         float x, y, w, h;
134 } TextBox;
135
136 typedef struct Curve {
137         ID id;
138         
139         struct BoundBox *bb;
140         
141         ListBase nurb;
142         ListBase disp;
143         struct Object *bevobj, *taperobj, *textoncurve;
144         struct Ipo *ipo;
145         Path *path;
146         struct Key *key;
147         struct Material **mat;
148         
149         ListBase bev;
150         
151         /* texture space, copied as one block in editobject.c */
152         float loc[3];
153         float size[3];
154         float rot[3];
155
156         int texflag;
157
158         short pathlen, totcol;
159         short flag, bevresol;
160         float width, ext1, ext2;
161         
162         /* default */
163         short resolu, resolv;
164         short resolu_ren, resolv_ren;
165         int pad2;
166         
167         /* font part */
168         short len, lines, pos, spacemode;
169         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
170         float xof, yof;
171         float linewidth;
172
173         char *str;
174         char family[24];
175         struct VFont *vfont;
176         struct VFont *vfontb;
177         struct VFont *vfonti;
178         struct VFont *vfontbi;
179
180         int sepchar;
181         
182         int totbox, actbox, pad;
183         struct TextBox *tb;     
184         
185         int selstart, selend;   
186         
187         struct CharInfo *strinfo;       
188         struct CharInfo curinfo;        
189 } Curve;
190
191 /* **************** CURVE ********************* */
192
193 /* texflag */
194 #define CU_AUTOSPACE    1
195
196 /* flag */
197 #define CU_3D                   1
198 #define CU_FRONT                2
199 #define CU_BACK                 4
200 #define CU_PATH                 8
201 #define CU_FOLLOW               16
202 #define CU_UV_ORCO              32
203 #define CU_NOPUNOFLIP   64
204 #define CU_STRETCH              128
205 #define CU_OFFS_PATHDIST        256
206 #define CU_FAST                 512 /* Font: no filling inside editmode */
207 #define CU_RETOPO               1024
208 #define CU_DS_EXPAND    2048
209
210 /* spacemode */
211 #define CU_LEFT                 0
212 #define CU_MIDDLE               1
213 #define CU_RIGHT                2
214 #define CU_JUSTIFY              3
215 #define CU_FLUSH                4
216
217 /* flag (nurb) */
218 #define CU_SMOOTH               1
219
220 /* type (nurb) */
221 #define CU_POLY                 0
222 #define CU_BEZIER               1
223 #define CU_BSPLINE              2
224 #define CU_CARDINAL             3
225 #define CU_NURBS                4
226 #define CU_2D                   8
227
228 /* flagu flagv (nurb) */
229 #define CU_CYCLIC               1
230
231 /* h1 h2 (beztriple) */
232 #define HD_FREE                 0
233 #define HD_AUTO                 1
234 #define HD_VECT                 2
235 #define HD_ALIGN                3
236 #define HD_AUTO_ANIM    4
237
238 /* *************** CHARINFO **************** */
239
240 /* flag */
241 #define CU_STYLE                (1+2)
242 #define CU_BOLD                 1
243 #define CU_ITALIC               2
244 #define CU_UNDERLINE    4
245 #define CU_WRAP                 8       /* wordwrap occured here */
246
247 #endif
248