== SDNA - Code Comments ==
[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 /* Keyframes on IPO curves and Points on Bezier Curves/Paths are generally BezTriples */
79 /* note: alfa location in struct is abused by Key system */
80 /* vec in BezTriple looks like this:
81         vec[0][0]=x location of handle 1
82         vec[0][1]=y location of handle 1
83         vec[0][2]=z location of handle 1 (not used for IpoCurve Points(2d))
84         vec[1][0]=x location of control point
85         vec[1][1]=y location of control point
86         vec[1][2]=z location of control point
87         vec[2][0]=x location of handle 2
88         vec[2][1]=y location of handle 2
89         vec[2][2]=z location of handle 2 (not used for IpoCurve Points(2d))
90 */
91 typedef struct BezTriple {
92         float vec[3][3];
93         float alfa, weight, radius;     /* alfa: tilt in 3D View, weight: used for softbody goal weight, radius: for bevel tapering */
94         short h1, h2;
95         char f1, f2, f3, hide;
96 } BezTriple;
97
98 /* note; alfa location in struct is abused by Key system */
99 typedef struct BPoint {
100         float vec[4];
101         float alfa, weight;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
102         short f1, hide;
103         float radius, pad;              /* user-set radius per point for bevelling etc */
104 } BPoint;
105
106 typedef struct Nurb {
107         struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
108         short type;
109         short mat_nr;           /* index into material list */
110         short hide, flag;
111         short pntsu, pntsv;             /* number of points in the U or V directions */
112         short resolu, resolv;   /* tesselation resolution in the U or V directions */
113         short orderu, orderv;
114         short flagu, flagv;
115         
116         float *knotsu, *knotsv;
117         BPoint *bp;
118         BezTriple *bezt;
119         
120         int charidx;
121         int pad;
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 typedef struct IpoDriver {
192         struct Object *ob;
193         short blocktype, adrcode, type, flag;
194         char name[128]; /* bone or constraint(?), or python expression here */
195 } IpoDriver;
196
197 typedef struct IpoCurve {
198         struct IpoCurve *next,  *prev;
199         
200         struct BPoint *bp;                                      /* are these even used anywhere? */
201         struct BezTriple *bezt;                         /* array of BezTriples (sizeof(BezTriple)*totvert. i.e.  keyframes  */
202
203         rctf maxrct, totrct;                            /* bounding boxes */
204
205         short blocktype, adrcode, vartype;      /* blocktype= ipo-blocktype; adrcode= type of ipo-curve; vartype= 'format' of data */
206         short totvert;                                          /* total number of BezTriples (i.e. keyframes) on curve */
207         short ipo, extrap;                                      /* interpolation and extrapolation modes  */
208         short flag, rt;                                         /* flag= settings; rt= ??? */
209         float ymin, ymax;                                       /* minimum/maximum y-extents for curve */
210         unsigned int bitmask;                           /* ??? */
211         
212         float slide_min, slide_max;                     /* minimum/maximum values for sliders (in action editor) */
213         float curval;                                           /* value of ipo-curve for current frame */
214         
215         IpoDriver *driver;                                      /* pointer to ipo-driver for this curve */
216         
217 } IpoCurve;
218
219 /* **************** CURVE ********************* */
220
221 /* texflag */
222 #define CU_AUTOSPACE    1
223
224 /* flag */
225 #define CU_3D                   1
226 #define CU_FRONT                2
227 #define CU_BACK                 4
228 #define CU_PATH                 8
229 #define CU_FOLLOW               16
230 #define CU_UV_ORCO              32
231 #define CU_NOPUNOFLIP   64
232 #define CU_STRETCH              128
233 #define CU_OFFS_PATHDIST        256
234 #define CU_FAST                 512 /* Font: no filling inside editmode */
235 #define CU_RETOPO               1024
236
237 /* spacemode */
238 #define CU_LEFT                 0
239 #define CU_MIDDLE               1
240 #define CU_RIGHT                2
241 #define CU_JUSTIFY              3
242 #define CU_FLUSH                4
243
244 /* flag (nurb) */
245 #define CU_SMOOTH               1
246
247 /* type (nurb) */
248 #define CU_POLY                 0
249 #define CU_BEZIER               1
250 #define CU_BSPLINE              2
251 #define CU_CARDINAL             3
252 #define CU_NURBS                4
253 #define CU_2D                   8
254
255 /* flagu flagv (nurb) */
256 #define CU_CYCLIC               1
257
258 /* h1 h2 (beztriple) */
259 #define HD_FREE                 0
260 #define HD_AUTO                 1
261 #define HD_VECT                 2
262 #define HD_ALIGN                3
263 #define HD_AUTO_ANIM    4
264
265 /* *************** CHARINFO **************** */
266
267 /* flag */
268 #define CU_STYLE                (1+2)
269 #define CU_BOLD                 1
270 #define CU_ITALIC               2
271 #define CU_UNDERLINE    4
272 #define CU_WRAP                 8       /* wordwrap occured here */
273
274 /* *************** driver ****************** */
275
276 /* driver->type */
277 #define IPO_DRIVER_TYPE_NORMAL 0
278 #define IPO_DRIVER_TYPE_PYTHON 1
279
280 /* driver->flag */
281 /* invalid flag: currently only used for buggy pydriver expressions: */
282 #define IPO_DRIVER_FLAG_INVALID 1
283
284 #endif
285