Operator docstring patch from Ron Walker, added console operator docs too.
[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 struct AnimData;
49 struct SelBox;
50 struct EditFont;
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, radius, sina, cosa, mat[3][3];
75         short f1, f2;
76 } BevPoint;
77
78 /* Keyframes on F-Curves (allows code reuse of Bezier eval code) and 
79  * Points on Bezier Curves/Paths are generally BezTriples 
80  */
81 /* note: alfa location in struct is abused by Key system */
82 /* vec in BezTriple looks like this:
83         vec[0][0]=x location of handle 1
84         vec[0][1]=y location of handle 1
85         vec[0][2]=z location of handle 1 (not used for FCurve Points(2d))
86         vec[1][0]=x location of control point
87         vec[1][1]=y location of control point
88         vec[1][2]=z location of control point
89         vec[2][0]=x location of handle 2
90         vec[2][1]=y location of handle 2
91         vec[2][2]=z location of handle 2 (not used for FCurve Points(2d))
92 */
93 typedef struct BezTriple {
94         float vec[3][3];
95         float alfa, weight, radius;     /* alfa: tilt in 3D View, weight: used for softbody goal weight, radius: for bevel tapering */
96         short ipo;                                      /* ipo: interpolation mode for segment from this BezTriple to the next */
97         char h1, h2;                            /* h1, h2: the handle type of the two handles */
98         char f1, f2, f3;                        /* f1, f2, f3: used for selection status */
99         char hide;                                      /* hide: used to indicate whether BezTriple is hidden (3D), type of keyframe (eBezTriple_KeyframeTypes) */
100 } BezTriple;
101
102 /* note; alfa location in struct is abused by Key system */
103 typedef struct BPoint {
104         float vec[4];
105         float alfa, weight;             /* alfa: tilt in 3D View, weight: used for softbody goal weight */
106         short f1, hide;                 /* f1: selection status,  hide: is point hidden or not */
107         float radius, pad;              /* user-set radius per point for bevelling etc */
108 } BPoint;
109
110 typedef struct Nurb {
111         struct Nurb *next, *prev;       /* multiple nurbs per curve object are allowed */
112         short type;
113         short mat_nr;           /* index into material list */
114         short hide, flag;
115         short pntsu, pntsv;             /* number of points in the U or V directions */
116         short resolu, resolv;   /* tesselation resolution in the U or V directions */
117         short orderu, orderv;
118         short flagu, flagv;
119         
120         float *knotsu, *knotsv;
121         BPoint *bp;
122         BezTriple *bezt;
123
124         short tilt_interp;      /* KEY_LINEAR, KEY_CARDINAL, KEY_BSPLINE */
125         short radius_interp;
126         
127         int charidx;
128 } Nurb;
129
130 typedef struct CharInfo {
131         short kern;
132         short mat_nr;
133         char flag;
134         char pad;
135         short pad2;
136 } CharInfo;
137
138 typedef struct TextBox {
139         float x, y, w, h;
140 } TextBox;
141
142 typedef struct Curve {
143         ID id;
144         struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */ 
145         
146         struct BoundBox *bb;
147         
148         ListBase nurb;          /* actual data */
149         ListBase disp;
150         
151         ListBase *editnurb;     /* edited data, not in file, use pointer so we can check for it */
152         
153         struct Object *bevobj, *taperobj, *textoncurve;
154         struct Ipo *ipo;        // XXX depreceated... old animation system
155         Path *path;
156         struct Key *key;
157         struct Material **mat;
158         
159         ListBase bev;
160         
161         /* texture space, copied as one block in editobject.c */
162         float loc[3];
163         float size[3];
164         float rot[3];
165
166         int texflag;
167
168         short pathlen, totcol;
169         short flag, bevresol;
170         float width, ext1, ext2;
171         
172         /* default */
173         short resolu, resolv;
174         short resolu_ren, resolv_ren;
175         
176         /* edit, index in nurb list */
177         int actnu;
178         /* edit, last selected bpoint */
179         BPoint *lastselbp;
180         
181         /* font part */
182         short len, lines, pos, spacemode;
183         float spacing, linedist, shear, fsize, wordspace, ulpos, ulheight;
184         float xof, yof;
185         float linewidth;
186
187         char *str;
188         struct SelBox *selboxes;
189         struct EditFont *editfont;
190         
191         char family[24];
192         struct VFont *vfont;
193         struct VFont *vfontb;
194         struct VFont *vfonti;
195         struct VFont *vfontbi;
196
197         int sepchar;
198         
199         float ctime;                    /* current evaltime - for use by Objects parented to curves */
200         int totbox, actbox;
201         struct TextBox *tb;     
202         
203         int selstart, selend;   
204         
205         struct CharInfo *strinfo;       
206         struct CharInfo curinfo;
207 } Curve;
208
209 /* **************** CURVE ********************* */
210
211 /* texflag */
212 #define CU_AUTOSPACE    1
213
214 /* flag */
215 #define CU_3D                   1
216 #define CU_FRONT                2
217 #define CU_BACK                 4
218 #define CU_PATH                 8
219 #define CU_FOLLOW               16
220 #define CU_UV_ORCO              32
221 #define CU_NOPUNOFLIP   64
222 #define CU_STRETCH              128
223 #define CU_OFFS_PATHDIST        256
224 #define CU_FAST                 512 /* Font: no filling inside editmode */
225 #define CU_RETOPO               1024
226 #define CU_DS_EXPAND    2048
227
228 /* spacemode */
229 #define CU_LEFT                 0
230 #define CU_MIDDLE               1
231 #define CU_RIGHT                2
232 #define CU_JUSTIFY              3
233 #define CU_FLUSH                4
234
235 /* flag (nurb) */
236 #define CU_SMOOTH               1
237
238 /* type (nurb) */
239 #define CU_POLY                 0
240 #define CU_BEZIER               1
241 #define CU_BSPLINE              2
242 #define CU_CARDINAL             3
243 #define CU_NURBS                4
244 #define CU_TYPE                 7
245
246 #define CU_2D                   8
247
248                 /* only for adding */
249 #define CU_PRIMITIVE    0xF00
250
251                 /* 2 or 4 points */
252 #define CU_PRIM_CURVE   0x100
253                 /* 8 points circle */
254 #define CU_PRIM_CIRCLE  0x200
255                 /* 4x4 patch Nurb */
256 #define CU_PRIM_PATCH   0x300
257 #define CU_PRIM_TUBE    0x400
258 #define CU_PRIM_SPHERE  0x500
259 #define CU_PRIM_DONUT   0x600
260                 /* 5 points,  5th order straight line (for anim path) */
261 #define CU_PRIM_PATH    0x700
262
263
264 /* flagu flagv (nurb) */
265 #define CU_CYCLIC               1
266
267 /* *************** BEZTRIPLE **************** */
268
269 /* h1 h2 (beztriple) */
270 typedef enum eBezTriple_Handle {
271         HD_FREE = 0,
272         HD_AUTO,
273         HD_VECT,
274         HD_ALIGN,
275         HD_AUTO_ANIM
276 } eBezTriple_Handle;
277
278 /* interpolation modes (used only for BezTriple->ipo) */
279 typedef enum eBezTriple_Interpolation {
280         BEZT_IPO_CONST = 0,     /* constant interpolation */
281         BEZT_IPO_LIN,           /* linear interpolation */
282         BEZT_IPO_BEZ,           /* bezier interpolation */
283 } eBezTriple_Interpolation;
284
285 /* types of keyframe (used only for BezTriple->hide when BezTriple is used in F-Curves) */
286 typedef enum eBezTriple_KeyframeType {
287         BEZT_KEYTYPE_KEYFRAME = 0,      /* default - 'proper' Keyframe */
288         BEZT_KEYTYPE_BREAKDOWN,         /* 'breakdown' keyframe */
289 } eBezTriple_KeyframeType;
290
291 /* *************** CHARINFO **************** */
292
293 /* flag */
294 #define CU_STYLE                (1+2)
295 #define CU_BOLD                 1
296 #define CU_ITALIC               2
297 #define CU_UNDERLINE    4
298 #define CU_WRAP                 8       /* wordwrap occured here */
299
300 #endif
301