Animato - Basic version patching support
[blender.git] / source / blender / makesrna / intern / rna_ipo.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_ipo_types.h"
33
34 #ifdef RNA_RUNTIME
35
36 static float rna_BezTriple_handle1_get(PointerRNA *ptr, int index)
37 {
38         BezTriple *bt= (BezTriple*)ptr->data;
39         return bt->vec[0][index];
40 }
41
42 static void rna_BezTriple_handle1_set(PointerRNA *ptr, int index, float value)
43 {
44         BezTriple *bt= (BezTriple*)ptr->data;
45         bt->vec[0][index]= value;
46 }
47
48 static float rna_BezTriple_handle2_get(PointerRNA *ptr, int index)
49 {
50         BezTriple *bt= (BezTriple*)ptr->data;
51         return bt->vec[2][index];
52 }
53
54 static void rna_BezTriple_handle2_set(PointerRNA *ptr, int index, float value)
55 {
56         BezTriple *bt= (BezTriple*)ptr->data;
57         bt->vec[2][index]= value;
58 }
59
60 static float rna_BezTriple_ctrlpoint_get(PointerRNA *ptr, int index)
61 {
62         BezTriple *bt= (BezTriple*)ptr->data;
63         return bt->vec[1][index];
64 }
65
66 static void rna_BezTriple_ctrlpoint_set(PointerRNA *ptr, int index, float value)
67 {
68         BezTriple *bt= (BezTriple*)ptr->data;
69         bt->vec[1][index]= value;
70 }
71
72 #else
73
74 void rna_def_bpoint(BlenderRNA *brna)
75 {
76         StructRNA *srna;
77         PropertyRNA *prop;
78
79         srna= RNA_def_struct(brna, "CurvePoint", NULL);
80         RNA_def_struct_sdna(srna, "BPoint");
81         RNA_def_struct_ui_text(srna, "CurvePoint", "Curve point without handles.");
82
83         /* Boolean values */
84         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
85         RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
86         RNA_def_property_ui_text(prop, "Selected", "Selection status");
87
88         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
89         RNA_def_property_boolean_sdna(prop, NULL, "hide", 0);
90         RNA_def_property_ui_text(prop, "Hidden", "Visibility status");
91
92         /* Vector value */
93         prop= RNA_def_property(srna, "point", PROP_FLOAT, PROP_VECTOR);
94         RNA_def_property_array(prop, 4);
95         RNA_def_property_float_sdna(prop, NULL, "vec");
96         RNA_def_property_ui_text(prop, "Point", "Point coordinates");
97
98         /* Number values */
99         prop= RNA_def_property(srna, "tilt", PROP_FLOAT, PROP_NONE);
100         RNA_def_property_float_sdna(prop, NULL, "alfa");
101         /*RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);*/
102         RNA_def_property_ui_text(prop, "Tilt", "Tilt in 3d View");
103
104         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
105         RNA_def_property_range(prop, 0.01f, 100.0f);
106         RNA_def_property_ui_text(prop, "Weight", "Softbody goal weight");
107
108         prop= RNA_def_property(srna, "bevel_radius", PROP_FLOAT, PROP_NONE);
109         RNA_def_property_float_sdna(prop, NULL, "radius");
110         /*RNA_def_property_range(prop, 0.0f, 1.0f);*/
111         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
112         RNA_def_property_ui_text(prop, "Bevel Radius", "Radius for bevelling");
113 }
114
115 void rna_def_beztriple(BlenderRNA *brna)
116 {
117         StructRNA *srna;
118         PropertyRNA *prop;
119         static EnumPropertyItem prop_handle_type_items[] = {
120                 {HD_FREE, "FREE", "Free", ""},
121                 {HD_AUTO, "AUTO", "Auto", ""},
122                 {HD_VECT, "VECTOR", "Vector", ""},
123                 {HD_ALIGN, "ALIGNED", "Aligned", ""},
124                 {HD_AUTO_ANIM, "AUTO_CLAMPED", "Auto Clamped", ""},
125                 {0, NULL, NULL, NULL}};
126         static EnumPropertyItem prop_mode_interpolation_items[] = {
127                 {IPO_CONST, "CONSTANT", "Constant", ""},
128                 {IPO_LIN, "LINEAR", "Linear", ""},
129                 {IPO_BEZ, "BEZIER", "Bezier", ""},
130                 {0, NULL, NULL, NULL}};
131
132         srna= RNA_def_struct(brna, "BezierCurvePoint", NULL);
133         RNA_def_struct_sdna(srna, "BezTriple");
134         RNA_def_struct_ui_text(srna, "Bezier Curve Point", "Bezier curve point with two handles.");
135
136         /* Boolean values */
137         prop= RNA_def_property(srna, "selected_handle1", PROP_BOOLEAN, PROP_NONE);
138         RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
139         RNA_def_property_ui_text(prop, "Handle 1 selected", "Handle 1 selection status");
140
141         prop= RNA_def_property(srna, "selected_handle2", PROP_BOOLEAN, PROP_NONE);
142         RNA_def_property_boolean_sdna(prop, NULL, "f3", 0);
143         RNA_def_property_ui_text(prop, "Handle 2 selected", "Handle 2 selection status");
144
145         prop= RNA_def_property(srna, "selected_control_point", PROP_BOOLEAN, PROP_NONE);
146         RNA_def_property_boolean_sdna(prop, NULL, "f2", 0);
147         RNA_def_property_ui_text(prop, "Control Point selected", "Control point selection status");
148
149         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
150         RNA_def_property_boolean_sdna(prop, NULL, "hide", 0);
151         RNA_def_property_ui_text(prop, "Hidden", "Visibility status");
152
153         /* Enums */
154         prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
155         RNA_def_property_enum_sdna(prop, NULL, "h1");
156         RNA_def_property_enum_items(prop, prop_handle_type_items);
157         RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
158
159         prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
160         RNA_def_property_enum_sdna(prop, NULL, "h2");
161         RNA_def_property_enum_items(prop, prop_handle_type_items);
162         RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
163
164         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
165         RNA_def_property_enum_sdna(prop, NULL, "ipo");
166         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
167         RNA_def_property_enum_items(prop, prop_mode_interpolation_items);
168         RNA_def_property_ui_text(prop, "Interpolation", "");
169
170         /* Vector values */
171         prop= RNA_def_property(srna, "handle1", PROP_FLOAT, PROP_VECTOR);
172         RNA_def_property_array(prop, 3);
173         RNA_def_property_float_funcs(prop, "rna_BezTriple_handle1_get", "rna_BezTriple_handle1_set", NULL);
174         RNA_def_property_ui_text(prop, "Handle 1", "Coordinates of the first handle");
175
176         prop= RNA_def_property(srna, "control_point", PROP_FLOAT, PROP_VECTOR);
177         RNA_def_property_array(prop, 3);
178         RNA_def_property_float_funcs(prop, "rna_BezTriple_ctrlpoint_get", "rna_BezTriple_ctrlpoint_set", NULL);
179         RNA_def_property_ui_text(prop, "Control Point", "Coordinates of the control point");
180
181         prop= RNA_def_property(srna, "handle2", PROP_FLOAT, PROP_VECTOR);
182         RNA_def_property_array(prop, 3);
183         RNA_def_property_float_funcs(prop, "rna_BezTriple_handle2_get", "rna_BezTriple_handle2_set", NULL);
184         RNA_def_property_ui_text(prop, "Handle 2", "Coordinates of the second handle");
185
186         /* Number values */
187         prop= RNA_def_property(srna, "tilt", PROP_FLOAT, PROP_NONE);
188         RNA_def_property_float_sdna(prop, NULL, "alfa");
189         /*RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);*/
190         RNA_def_property_ui_text(prop, "Tilt", "Tilt in 3d View");
191
192         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
193         RNA_def_property_range(prop, 0.01f, 100.0f);
194         RNA_def_property_ui_text(prop, "Weight", "Softbody goal weight");
195
196         prop= RNA_def_property(srna, "bevel_radius", PROP_FLOAT, PROP_NONE);
197         RNA_def_property_float_sdna(prop, NULL, "radius");
198         /*RNA_def_property_range(prop, 0.0f, 1.0f);*/
199         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
200         RNA_def_property_ui_text(prop, "Bevel Radius", "Radius for bevelling");
201 }
202
203 void rna_def_ipodriver(BlenderRNA *brna)
204 {
205         StructRNA *srna;
206         PropertyRNA *prop;
207         static EnumPropertyItem prop_type_items[] = {
208                 {IPO_DRIVER_TYPE_NORMAL, "NORMAL", "Normal", ""},
209                 {IPO_DRIVER_TYPE_PYTHON, "SCRIPTED", "Scripted", ""},
210                 {0, NULL, NULL, NULL}};
211
212         srna= RNA_def_struct(brna, "IpoDriver", NULL);
213         RNA_def_struct_ui_text(srna, "Ipo Driver", "Driver for the ipo curve value based on an external value.");
214
215         /* Enums */
216         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
217         RNA_def_property_enum_items(prop, prop_type_items);
218         RNA_def_property_ui_text(prop, "Type", "Ipo Driver types.");
219
220         /* String values */
221         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
222         RNA_def_property_ui_text(prop, "Name", "Bone name or scripting expression.");
223
224         /* Pointers */
225         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
226         RNA_def_property_pointer_sdna(prop, NULL, "ob");
227         RNA_def_property_ui_text(prop, "Driver Object", "Object that controls this Ipo Driver.");
228 }
229
230 void rna_def_ipocurve(BlenderRNA *brna)
231 {
232         StructRNA *srna;
233         PropertyRNA *prop;
234         static EnumPropertyItem prop_mode_interpolation_items[] = {
235                 {IPO_CONST, "CONSTANT", "Constant", ""},
236                 {IPO_LIN, "LINEAR", "Linear", ""},
237                 {IPO_BEZ, "BEZIER", "Bezier", ""},
238                 {0, NULL, NULL, NULL}};
239         static EnumPropertyItem prop_mode_extend_items[] = {
240                 {IPO_HORIZ, "CONSTANT", "Constant", ""},
241                 {IPO_DIR, "EXTRAP", "Extrapolation", ""},
242                 {IPO_CYCL, "CYCLIC", "Cyclic", ""},
243                 {IPO_CYCLX, "CYCLICX", "Cyclic Extrapolation", ""},
244                 {0, NULL, NULL, NULL}};
245
246         srna= RNA_def_struct(brna, "IpoCurve", NULL);
247         RNA_def_struct_ui_text(srna, "Ipo Curve", "Ipo curve defining values of a period of time.");
248
249         /* Enums */
250         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
251         RNA_def_property_enum_sdna(prop, NULL, "ipo");
252         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
253         RNA_def_property_enum_items(prop, prop_mode_interpolation_items);
254         RNA_def_property_ui_text(prop, "Interpolation", "");
255
256         prop= RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE);
257         RNA_def_property_enum_sdna(prop, NULL, "extrap");
258         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
259         RNA_def_property_enum_items(prop, prop_mode_extend_items);
260         RNA_def_property_ui_text(prop, "Extrapolation", "");
261
262         /* Pointers */
263         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
264         RNA_def_property_pointer_sdna(prop, NULL, "driver");
265         RNA_def_property_ui_text(prop, "Ipo Driver", "");
266
267         /* Collections XXX */
268         prop= RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE);
269         RNA_def_property_collection_sdna(prop, NULL, "bp", "totvert");
270         RNA_def_property_struct_type(prop, "CurvePoint");
271         RNA_def_property_ui_text(prop, "Points", "");
272
273         prop= RNA_def_property(srna, "bezier_points", PROP_COLLECTION, PROP_NONE);
274         RNA_def_property_collection_sdna(prop, NULL, "bezt", "totvert");
275         RNA_def_property_struct_type(prop, "BezierCurvePoint");
276         RNA_def_property_ui_text(prop, "Bezier Points", "");
277 }
278
279 void rna_def_ipo(BlenderRNA *brna)
280 {
281         StructRNA *srna;
282         PropertyRNA *prop;
283         static EnumPropertyItem prop_blocktype_items[] = {
284                 {ID_OB, "OBJECT", "Object", ""},
285                 {ID_MA, "MATERIAL", "Material", ""},
286                 {ID_TE, "TEXTURE", "Texture", ""},
287                 {ID_SEQ, "SEQUENCE", "Sequence", ""},
288                 {ID_CU, "CURVE", "Curve", ""},
289                 {ID_KE, "KEY", "Key", ""},
290                 {ID_WO, "WORLD", "World", ""},
291                 {ID_LA, "LAMP", "Lamp", ""},
292                 {ID_CA, "CAMERA", "Camera", ""},
293                 {ID_SO, "SOUND", "Sound", ""},
294                 {ID_PO, "POSECHANNEL", "PoseChannel", ""},
295                 {ID_CO, "CONSTRAINT", "Constraint", ""},
296                 {ID_FLUIDSIM, "FLUIDSIM", "FluidSim", ""},
297                 {ID_PA, "PARTICLES", "Particles", ""},
298                 {0, NULL, NULL, NULL}};
299
300         srna= RNA_def_struct(brna, "Ipo", "ID");
301         RNA_def_struct_ui_text(srna, "Ipo", "Ipo datablock containing Ipo curves for animation of a datablock.");
302
303         /* Enums */
304         prop= RNA_def_property(srna, "block_type", PROP_ENUM, PROP_NONE);
305         RNA_def_property_enum_sdna(prop, NULL, "blocktype");
306         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
307         RNA_def_property_enum_items(prop, prop_blocktype_items);
308         RNA_def_property_ui_text(prop, "Block Type", "");
309
310         /* Boolean values */
311         prop= RNA_def_property(srna, "show_keys", PROP_BOOLEAN, PROP_NONE);
312         RNA_def_property_boolean_sdna(prop, NULL, "showkey", 0);
313         RNA_def_property_ui_text(prop, "Show Keys", "Show Ipo Keys.");
314
315         prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
316         RNA_def_property_boolean_sdna(prop, NULL, "muteipo", 0);
317         RNA_def_property_ui_text(prop, "Mute", "Mute this Ipo block.");
318
319         /* Collection */
320         prop= RNA_def_property(srna, "curves", PROP_COLLECTION, PROP_NONE);
321         RNA_def_property_collection_sdna(prop, NULL, "curve", NULL);
322         RNA_def_property_struct_type(prop, "IpoCurve");
323         RNA_def_property_ui_text(prop, "Curves", "");
324 }
325
326 void RNA_def_ipo(BlenderRNA *brna)
327 {
328         rna_def_ipo(brna);
329         rna_def_ipocurve(brna);
330         rna_def_bpoint(brna);
331         rna_def_beztriple(brna);
332         rna_def_ipodriver(brna);
333 }
334
335 #endif
336