Quite a large one this time... but now we have:
[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 struct BoundBox;
44 struct Object;
45 struct Ipo;
46 struct Key;
47 struct Material;
48 struct VFont;
49
50 #
51 #
52 typedef struct Path {
53         int len;
54         float *data;
55         float totdist;
56 } Path;
57
58 #
59 #
60 typedef struct BevList {
61         struct BevList *next, *prev;
62         short nr, flag;
63         short poly, gat;
64 } BevList;
65
66 #
67 #
68 typedef struct BevPoint {
69         float x, y, z, alfa, sina, cosa, mat[3][3];
70         short f1, f2;
71 } BevPoint;
72
73
74 typedef struct BezTriple {
75         float vec[3][3];
76         float alfa;
77         short s[3][2];  /* screen coordinates */
78         short h1, h2;
79         char f1, f2, f3, hide;
80 } BezTriple;
81
82 typedef struct BPoint {
83         float vec[4];
84         float alfa;
85         short s[2];
86         short f1, hide;
87 } BPoint;
88
89 typedef struct Nurb {
90         struct Nurb *next, *prev;
91         short type, mat_nr;
92         short hide, flag;
93         short pntsu, pntsv;
94         short resolu, resolv;
95         short orderu, orderv;
96         short flagu, flagv;
97         
98         float *knotsu, *knotsv;
99         BPoint *bp;
100         BezTriple *bezt;
101         
102 } Nurb;
103
104
105 typedef struct Curve {
106         ID id;
107         
108         struct BoundBox *bb;
109         
110         ListBase nurb;
111         ListBase disp;
112         struct Object *bevobj, *textoncurve;
113         struct Ipo *ipo;
114         Path *path;
115         struct Key *key;
116         struct Material **mat;
117         
118         ListBase bev;
119         float *orco;
120
121         float loc[3];
122         float size[3];
123         float rot[3];
124
125         int texflag;
126
127         short pathlen, totcol;
128         short flag, bevresol;
129         float width, ext1, ext2;
130         
131         /* default */
132         short resolu, resolv;
133         
134         /* font part */
135         short len, lines, pos, spacemode;
136         float spacing, linedist, shear, fsize;
137         float xof, yof;
138         
139         char *str, family[24];
140         struct VFont *vfont;
141
142 } Curve;
143
144 typedef struct IpoCurve {
145         struct IpoCurve *next,  *prev;
146         
147         struct BPoint *bp;
148         struct BezTriple *bezt;
149
150         rctf maxrct, totrct;
151
152         short blocktype, adrcode, vartype;
153         short totvert;
154         short ipo, extrap;
155         short flag, rt;
156         float ymin, ymax;
157         unsigned int bitmask;
158         
159         float curval;
160         
161 } IpoCurve;
162
163 /* **************** CURVE ********************* */
164
165 /* texflag */
166 #define CU_AUTOSPACE    1
167
168 /* flag */
169 #define CU_3D                   1
170 #define CU_FRONT                2
171 #define CU_BACK                 4
172 #define CU_PATH                 8
173 #define CU_FOLLOW               16
174 #define CU_UV_ORCO              32
175 #define CU_NOPUNOFLIP   64
176
177 /* spacemode */
178 #define CU_LEFT                 0
179 #define CU_MIDDLE               1
180 #define CU_RIGHT                2
181 #define CU_FLUSH                3
182
183 /* flag (nurb) */
184 #define CU_SMOOTH               1
185
186 /* type (nurb) */
187 #define CU_POLY                 0
188 #define CU_BEZIER               1
189 #define CU_BSPLINE              2
190 #define CU_CARDINAL             3
191 #define CU_NURBS                4
192 #define CU_2D                   8
193
194 /* flagu flagv (nurb) */
195 #define CU_CYCLIC               1
196
197 /* h1 h2 (beztriple) */
198 #define HD_FREE         0
199 #define HD_AUTO         1
200 #define HD_VECT         2
201 #define HD_ALIGN        3
202
203 #endif
204