remove MTC_ functions, (don't merge)
[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 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 h1, h2;                           /* h1, h2: the handle type of the two handles */
92         char f1, f2, f3, hide;          /* f1, f2, f3: used for selection status,  hide: used to indicate whether BezTriple is hidden */
93 } BezTriple;
94
95 /* note; alfa location in struct is abused by Key system */
96 typedef struct BPoint {
97         float vec[4];
98         float alfa, weight;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
99         short f1, hide;                 /* f1: selection status,  hide: is point hidden or not */
100         float radius, pad;              /* user-set radius per point for bevelling etc */
101 } BPoint;
102
103 typedef struct Nurb {
104         struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
105         short type;
106         short mat_nr;           /* index into material list */
107         short hide, flag;
108         short pntsu, pntsv;             /* number of points in the U or V directions */
109         short resolu, resolv;   /* tesselation resolution in the U or V directions */
110         short orderu, orderv;
111         short flagu, flagv;
112         
113         float *knotsu, *knotsv;
114         BPoint *bp;
115         BezTriple *bezt;
116
117         short tilt_interp;      /* KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE */
118         short radius_interp;
119         
120         int charidx;
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         /* texture space, copied as one block in editobject.c */
151         float loc[3];
152         float size[3];
153         float rot[3];
154
155         int texflag;
156
157         short pathlen, totcol;
158         short flag, bevresol;
159         float width, ext1, ext2;
160         
161         /* default */
162         short resolu, resolv;
163         short resolu_ren, resolv_ren;
164         int pad2;
165         
166         /* font part */
167         short len, lines, pos, spacemode;
168         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
169         float xof, yof;
170         float linewidth;
171
172         char *str;
173         char family[24];
174         struct VFont *vfont;
175         struct VFont *vfontb;
176         struct VFont *vfonti;
177         struct VFont *vfontbi;
178
179         int sepchar;
180         
181         int totbox, actbox, pad;
182         struct TextBox *tb;     
183         
184         int selstart, selend;   
185         
186         struct CharInfo *strinfo;       
187         struct CharInfo curinfo;        
188 } Curve;
189
190 /* **************** CURVE ********************* */
191
192 /* texflag */
193 #define CU_AUTOSPACE    1
194
195 /* flag */
196 #define CU_3D                   1
197 #define CU_FRONT                2
198 #define CU_BACK                 4
199 #define CU_PATH                 8
200 #define CU_FOLLOW               16
201 #define CU_UV_ORCO              32
202 #define CU_NOPUNOFLIP   64
203 #define CU_STRETCH              128
204 #define CU_OFFS_PATHDIST        256
205 #define CU_FAST                 512 /* Font: no filling inside editmode */
206 #define CU_RETOPO               1024
207
208 #define CU_NO_TWIST             4096
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