added a comment
[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;
92         short mat_nr;          /* index into material list */
93         short hide, flag;
94         short pntsu, pntsv;
95         short resolu, resolv;
96         short orderu, orderv;
97         short flagu, flagv;
98         
99         float *knotsu, *knotsv;
100         BPoint *bp;
101         BezTriple *bezt;
102         
103 } Nurb;
104
105
106 typedef struct Curve {
107         ID id;
108         
109         struct BoundBox *bb;
110         
111         ListBase nurb;
112         ListBase disp;
113         struct Object *bevobj, *textoncurve;
114         struct Ipo *ipo;
115         Path *path;
116         struct Key *key;
117         struct Material **mat;
118         
119         ListBase bev;
120         float *orco;
121
122         float loc[3];
123         float size[3];
124         float rot[3];
125
126         int texflag;
127
128         short pathlen, totcol;
129         short flag, bevresol;
130         float width, ext1, ext2;
131         
132         /* default */
133         short resolu, resolv;
134         
135         /* font part */
136         short len, lines, pos, spacemode;
137         float spacing, linedist, shear, fsize;
138         float xof, yof;
139         
140         char *str, family[24];
141         struct VFont *vfont;
142
143 } Curve;
144
145 typedef struct IpoCurve {
146         struct IpoCurve *next,  *prev;
147         
148         struct BPoint *bp;
149         struct BezTriple *bezt;
150
151         rctf maxrct, totrct;
152
153         short blocktype, adrcode, vartype;
154         short totvert;
155         short ipo, extrap;
156         short flag, rt;
157         float ymin, ymax;
158         unsigned int bitmask;
159         
160         float curval;
161         
162 } IpoCurve;
163
164 /* **************** CURVE ********************* */
165
166 /* texflag */
167 #define CU_AUTOSPACE    1
168
169 /* flag */
170 #define CU_3D                   1
171 #define CU_FRONT                2
172 #define CU_BACK                 4
173 #define CU_PATH                 8
174 #define CU_FOLLOW               16
175 #define CU_UV_ORCO              32
176 #define CU_NOPUNOFLIP   64
177
178 /* spacemode */
179 #define CU_LEFT                 0
180 #define CU_MIDDLE               1
181 #define CU_RIGHT                2
182 #define CU_FLUSH                3
183
184 /* flag (nurb) */
185 #define CU_SMOOTH               1
186
187 /* type (nurb) */
188 #define CU_POLY                 0
189 #define CU_BEZIER               1
190 #define CU_BSPLINE              2
191 #define CU_CARDINAL             3
192 #define CU_NURBS                4
193 #define CU_2D                   8
194
195 /* flagu flagv (nurb) */
196 #define CU_CYCLIC               1
197
198 /* h1 h2 (beztriple) */
199 #define HD_FREE         0
200 #define HD_AUTO         1
201 #define HD_VECT         2
202 #define HD_ALIGN        3
203
204 #endif
205