96ab63b431284919e98dda35e9cbc45d4dffe0f6
[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, "BPoint", NULL);
80         RNA_def_struct_ui_text(srna, "BPoint", "DOC_BROKEN");
81
82         /* Boolean values */
83         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
84         RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
85         RNA_def_property_ui_text(prop, "Selected", "Selection status");
86
87         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
88         RNA_def_property_boolean_sdna(prop, NULL, "hide", 0);
89         RNA_def_property_ui_text(prop, "Hidden", "Visibility status");
90
91         /* Vector value */
92         prop= RNA_def_property(srna, "point", PROP_FLOAT, PROP_VECTOR);
93         RNA_def_property_array(prop, 4);
94         RNA_def_property_float_sdna(prop, NULL, "vec");
95         RNA_def_property_ui_text(prop, "Point", "Point coordinates");
96
97         /* Number values */
98         prop= RNA_def_property(srna, "tilt", PROP_FLOAT, PROP_NONE);
99         RNA_def_property_float_sdna(prop, NULL, "alfa");
100         /*RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);*/
101         RNA_def_property_ui_text(prop, "Tilt", "Tilt in 3d View");
102
103         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
104         RNA_def_property_range(prop, 0.01f, 100.0f);
105         RNA_def_property_ui_text(prop, "Weight", "Softbody goal weight");
106
107         prop= RNA_def_property(srna, "bevel_radius", PROP_FLOAT, PROP_NONE);
108         RNA_def_property_float_sdna(prop, NULL, "radius");
109         /*RNA_def_property_range(prop, 0.0f, 1.0f);*/
110         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
111         RNA_def_property_ui_text(prop, "Bevel Radius", "Radius for bevelling");
112 }
113
114 void rna_def_beztriple(BlenderRNA *brna)
115 {
116         StructRNA *srna;
117         PropertyRNA *prop;
118         static EnumPropertyItem prop_handle_type_items[] = {
119                 {HD_FREE, "FREE", "Free", ""},
120                 {HD_AUTO, "AUTO", "Auto", ""},
121                 {HD_VECT, "VECTOR", "Vector", ""},
122                 {HD_ALIGN, "ALIGNED", "Aligned", ""},
123                 {HD_AUTO_ANIM, "AUTO_CLAMPED", "Auto Clamped", ""},
124                 {0, NULL, NULL, NULL}};
125         static EnumPropertyItem prop_mode_interpolation_items[] = {
126                 {IPO_CONST, "CONSTANT", "Constant", ""},
127                 {IPO_LIN, "LINEAR", "Linear", ""},
128                 {IPO_BEZ, "BEZIER", "Bezier", ""},
129                 {0, NULL, NULL, NULL}};
130
131         srna= RNA_def_struct(brna, "BezTriple", NULL);
132         RNA_def_struct_ui_text(srna, "Bezier Triple", "DOC_BROKEN");
133
134         /* Boolean values */
135         prop= RNA_def_property(srna, "selected_handle1", PROP_BOOLEAN, PROP_NONE);
136         RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
137         RNA_def_property_ui_text(prop, "Handle 1 selected", "Handle 1 selection status");
138
139         prop= RNA_def_property(srna, "selected_handle2", PROP_BOOLEAN, PROP_NONE);
140         RNA_def_property_boolean_sdna(prop, NULL, "f3", 0);
141         RNA_def_property_ui_text(prop, "Handle 2 selected", "Handle 2 selection status");
142
143         prop= RNA_def_property(srna, "selected_control_point", PROP_BOOLEAN, PROP_NONE);
144         RNA_def_property_boolean_sdna(prop, NULL, "f2", 0);
145         RNA_def_property_ui_text(prop, "Control Point selected", "Control point selection status");
146
147         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
148         RNA_def_property_boolean_sdna(prop, NULL, "hide", 0);
149         RNA_def_property_ui_text(prop, "Hidden", "Visibility status");
150
151         /* Enums */
152         prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
153         RNA_def_property_enum_sdna(prop, NULL, "h1");
154         RNA_def_property_enum_items(prop, prop_handle_type_items);
155         RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
156
157         prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
158         RNA_def_property_enum_sdna(prop, NULL, "h2");
159         RNA_def_property_enum_items(prop, prop_handle_type_items);
160         RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
161
162         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
163         RNA_def_property_enum_sdna(prop, NULL, "ipo");
164         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
165         RNA_def_property_enum_items(prop, prop_mode_interpolation_items);
166         RNA_def_property_ui_text(prop, "Interpolation", "");
167
168         /* Vector values */
169         prop= RNA_def_property(srna, "handle1", PROP_FLOAT, PROP_VECTOR);
170         RNA_def_property_array(prop, 3);
171         RNA_def_property_float_funcs(prop, "rna_BezTriple_handle1_get", "rna_BezTriple_handle1_set", NULL);
172         RNA_def_property_ui_text(prop, "Handle 1", "Coordinates of the first handle");
173
174         prop= RNA_def_property(srna, "control_point", PROP_FLOAT, PROP_VECTOR);
175         RNA_def_property_array(prop, 3);
176         RNA_def_property_float_funcs(prop, "rna_BezTriple_ctrlpoint_get", "rna_BezTriple_ctrlpoint_set", NULL);
177         RNA_def_property_ui_text(prop, "Control Point", "Coordinates of the control point");
178
179         prop= RNA_def_property(srna, "handle2", PROP_FLOAT, PROP_VECTOR);
180         RNA_def_property_array(prop, 3);
181         RNA_def_property_float_funcs(prop, "rna_BezTriple_handle2_get", "rna_BezTriple_handle2_set", NULL);
182         RNA_def_property_ui_text(prop, "Handle 2", "Coordinates of the second handle");
183
184         /* Number values */
185         prop= RNA_def_property(srna, "tilt", PROP_FLOAT, PROP_NONE);
186         RNA_def_property_float_sdna(prop, NULL, "alfa");
187         /*RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);*/
188         RNA_def_property_ui_text(prop, "Tilt", "Tilt in 3d View");
189
190         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
191         RNA_def_property_range(prop, 0.01f, 100.0f);
192         RNA_def_property_ui_text(prop, "Weight", "Softbody goal weight");
193
194         prop= RNA_def_property(srna, "bevel_radius", PROP_FLOAT, PROP_NONE);
195         RNA_def_property_float_sdna(prop, NULL, "radius");
196         /*RNA_def_property_range(prop, 0.0f, 1.0f);*/
197         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
198         RNA_def_property_ui_text(prop, "Bevel Radius", "Radius for bevelling");
199 }
200
201 void rna_def_ipodriver(BlenderRNA *brna)
202 {
203         StructRNA *srna;
204         PropertyRNA *prop;
205         static EnumPropertyItem prop_type_items[] = {
206                 {IPO_DRIVER_TYPE_NORMAL, "NORMAL", "Normal", ""},
207                 {IPO_DRIVER_TYPE_PYTHON, "SCRIPTED", "Scripted", ""},
208                 {0, NULL, NULL, NULL}};
209
210         srna= RNA_def_struct(brna, "IpoDriver", NULL);
211         RNA_def_struct_ui_text(srna, "Ipo Driver", "DOC_BROKEN");
212
213         /* Enums */
214         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
215         RNA_def_property_enum_items(prop, prop_type_items);
216         RNA_def_property_ui_text(prop, "Type", "Ipo Driver types.");
217
218         /* String values */
219         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
220         RNA_def_property_ui_text(prop, "Name", "Bone name or scripting expression.");
221
222         /* Pointers */
223         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
224         RNA_def_property_pointer_sdna(prop, NULL, "ob");
225         RNA_def_property_ui_text(prop, "Driver Object", "Object that controls this Ipo Driver.");
226 }
227
228 void rna_def_ipocurve(BlenderRNA *brna)
229 {
230         StructRNA *srna;
231         PropertyRNA *prop;
232         static EnumPropertyItem prop_mode_interpolation_items[] = {
233                 {IPO_CONST, "CONSTANT", "Constant", ""},
234                 {IPO_LIN, "LINEAR", "Linear", ""},
235                 {IPO_BEZ, "BEZIER", "Bezier", ""},
236                 {0, NULL, NULL, NULL}};
237         static EnumPropertyItem prop_mode_extend_items[] = {
238                 {IPO_HORIZ, "CONSTANT", "Constant", ""},
239                 {IPO_DIR, "EXTRAP", "Extrapolation", ""},
240                 {IPO_CYCL, "CYCLIC", "Cyclic", ""},
241                 {IPO_CYCLX, "CYCLICX", "Cyclic Extrapolation", ""},
242                 {0, NULL, NULL, NULL}};
243
244         srna= RNA_def_struct(brna, "IpoCurve", NULL);
245         RNA_def_struct_ui_text(srna, "Ipo Curve", "DOC_BROKEN");
246
247         /* Enums */
248         prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
249         RNA_def_property_enum_sdna(prop, NULL, "ipo");
250         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
251         RNA_def_property_enum_items(prop, prop_mode_interpolation_items);
252         RNA_def_property_ui_text(prop, "Interpolation", "");
253
254         prop= RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE);
255         RNA_def_property_enum_sdna(prop, NULL, "extrap");
256         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
257         RNA_def_property_enum_items(prop, prop_mode_extend_items);
258         RNA_def_property_ui_text(prop, "Extrapolation", "");
259
260         /* Pointers */
261         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
262         RNA_def_property_pointer_sdna(prop, NULL, "driver");
263         RNA_def_property_ui_text(prop, "Ipo Driver", "");
264
265         /* Collections */
266         prop= RNA_def_property(srna, "bpoints", PROP_COLLECTION, PROP_NONE);
267         RNA_def_property_collection_sdna(prop, NULL, "bp", "totvert");
268         RNA_def_property_struct_type(prop, "BPoint");
269         RNA_def_property_ui_text(prop, "BPoints", "");
270
271         prop= RNA_def_property(srna, "bezier_triples", PROP_COLLECTION, PROP_NONE);
272         RNA_def_property_collection_sdna(prop, NULL, "bezt", "totvert");
273         RNA_def_property_struct_type(prop, "BezTriple");
274         RNA_def_property_ui_text(prop, "Bezier Triples", "");
275 }
276
277 void rna_def_ipo(BlenderRNA *brna)
278 {
279         StructRNA *srna;
280         PropertyRNA *prop;
281         static EnumPropertyItem prop_blocktype_items[] = {
282                 {ID_OB, "OBJECT", "Object", ""},
283                 {ID_MA, "MATERIAL", "Material", ""},
284                 {ID_TE, "TEXTURE", "Texture", ""},
285                 {ID_SEQ, "SEQUENCE", "Sequence", ""},
286                 {ID_CU, "CURVE", "Curve", ""},
287                 {ID_KE, "KEY", "Key", ""},
288                 {ID_WO, "WORLD", "World", ""},
289                 {ID_LA, "LAMP", "Lamp", ""},
290                 {ID_CA, "CAMERA", "Camera", ""},
291                 {ID_SO, "SOUND", "Sound", ""},
292                 {ID_PO, "POSECHANNEL", "PoseChannel", ""},
293                 {ID_CO, "CONSTRAINT", "Constraint", ""},
294                 {ID_FLUIDSIM, "FLUIDSIM", "FluidSim", ""},
295                 {ID_PA, "PARTICLES", "Particles", ""},
296                 {0, NULL, NULL, NULL}};
297
298         srna= RNA_def_struct(brna, "Ipo", "ID");
299         RNA_def_struct_ui_text(srna, "Ipo", "DOC_BROKEN");
300
301         /* Enums */
302         prop= RNA_def_property(srna, "block_type", PROP_ENUM, PROP_NONE);
303         RNA_def_property_enum_sdna(prop, NULL, "blocktype");
304         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
305         RNA_def_property_enum_items(prop, prop_blocktype_items);
306         RNA_def_property_ui_text(prop, "Block Type", "");
307
308         /* Boolean values */
309         prop= RNA_def_property(srna, "show_keys", PROP_BOOLEAN, PROP_NONE);
310         RNA_def_property_boolean_sdna(prop, NULL, "showkey", 0);
311         RNA_def_property_ui_text(prop, "Show Keys", "Show Ipo Keys.");
312
313         prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
314         RNA_def_property_boolean_sdna(prop, NULL, "muteipo", 0);
315         RNA_def_property_ui_text(prop, "Mute", "Mute this Ipo block.");
316
317         /* Collection */
318         prop= RNA_def_property(srna, "curves", PROP_COLLECTION, PROP_NONE);
319         RNA_def_property_collection_sdna(prop, NULL, "curve", NULL);
320         RNA_def_property_struct_type(prop, "IpoCurve");
321         RNA_def_property_ui_text(prop, "Curves", "");
322 }
323
324 void RNA_def_ipo(BlenderRNA *brna)
325 {
326         rna_def_ipo(brna);
327         rna_def_ipocurve(brna);
328         rna_def_bpoint(brna);
329         rna_def_beztriple(brna);
330         rna_def_ipodriver(brna);
331 }
332
333 #endif
334