Animato - Basic version patching support
[blender.git] / source / blender / makesrna / intern / rna_constraint.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), Joshua Leung, Roland Hess
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 "DNA_constraint_types.h"
31 #include "DNA_object_types.h"
32 #include "DNA_scene_types.h"
33
34 #ifdef RNA_RUNTIME
35
36 StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr)
37 {
38         bConstraint *con= (bConstraint*)ptr->data;
39
40         switch(con->type) {
41                 case CONSTRAINT_TYPE_CHILDOF:
42                         return &RNA_ChildOfConstraint;
43                 case CONSTRAINT_TYPE_TRACKTO:
44                         return &RNA_TrackToConstraint;
45                 case CONSTRAINT_TYPE_KINEMATIC:
46                         return &RNA_KinematicConstraint;
47                 case CONSTRAINT_TYPE_FOLLOWPATH:
48                         return &RNA_FollowPathConstraint;
49                 case CONSTRAINT_TYPE_ROTLIKE:
50                         return &RNA_RotateLikeConstraint;
51                 case CONSTRAINT_TYPE_LOCLIKE:
52                         return &RNA_LocateLikeConstraint;
53                 case CONSTRAINT_TYPE_SIZELIKE:
54                         return &RNA_SizeLikeConstraint;
55                 case CONSTRAINT_TYPE_PYTHON:
56                         return &RNA_PythonConstraint;
57                 case CONSTRAINT_TYPE_ACTION:
58                         return &RNA_ActionConstraint;
59                 case CONSTRAINT_TYPE_LOCKTRACK:
60                         return &RNA_LockTrackConstraint;
61                 case CONSTRAINT_TYPE_STRETCHTO:
62                         return &RNA_StretchToConstraint;
63                 case CONSTRAINT_TYPE_MINMAX:
64                         return &RNA_MinMaxConstraint;
65                 case CONSTRAINT_TYPE_RIGIDBODYJOINT:
66                         return &RNA_RigidBodyJointConstraint;
67                 case CONSTRAINT_TYPE_CLAMPTO:
68                         return &RNA_ClampToConstraint;                  
69                 case CONSTRAINT_TYPE_TRANSFORM:
70                         return &RNA_TransformConstraint;
71                 case CONSTRAINT_TYPE_ROTLIMIT:
72                         return &RNA_RotationLimitConstraint;
73                 case CONSTRAINT_TYPE_LOCLIMIT:
74                         return &RNA_LocationLimitConstraint;
75                 case CONSTRAINT_TYPE_SIZELIMIT:
76                         return &RNA_SizeLimitConstraint;
77                 case CONSTRAINT_TYPE_DISTLIMIT:
78                         return &RNA_DistLimitConstraint;
79                 default:
80                         return &RNA_UnknownType;
81         }
82 }
83
84 #else
85
86 static void rna_def_constrainttarget(BlenderRNA *brna)
87 {
88         StructRNA *srna;
89         PropertyRNA *prop;
90
91         srna= RNA_def_struct(brna, "ConstraintTarget", NULL);
92         RNA_def_struct_ui_text(srna, "Constraint Target", "Target object for multi-target constraints.");
93         RNA_def_struct_sdna(srna, "bConstraintTarget");
94
95         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
96         RNA_def_property_pointer_sdna(prop, NULL, "tar");
97         RNA_def_property_struct_type(prop, "Object");
98         RNA_def_property_ui_text(prop, "Target", "Target Object");
99
100         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
101         RNA_def_property_string_sdna(prop, NULL, "subtarget");
102         RNA_def_property_ui_text(prop, "Sub-Target", "");
103
104         // space, flag and type still to do 
105 }
106
107 static void rna_def_constraint_childof(BlenderRNA *brna)
108 {
109         StructRNA *srna;
110         PropertyRNA *prop;
111
112         srna= RNA_def_struct(brna, "ChildOfConstraint", "Constraint"); 
113         RNA_def_struct_ui_text(srna, "Child Of Constraint", "Creates constraint-based parent-child relationship."); 
114         RNA_def_struct_sdna_from(srna, "bChildOfConstraint", "data"); 
115
116         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
117         RNA_def_property_pointer_sdna(prop, NULL, "tar");
118         RNA_def_property_struct_type(prop, "Object");
119         RNA_def_property_ui_text(prop, "Target", "Target Object");
120
121         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
122         RNA_def_property_string_sdna(prop, NULL, "subtarget");
123         RNA_def_property_ui_text(prop, "Sub-Target", "");
124
125         prop= RNA_def_property(srna, "locationx", PROP_BOOLEAN, PROP_NONE);
126         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCX);
127         RNA_def_property_ui_text(prop, "Location X", "Use X Location of Parent.");
128
129         prop= RNA_def_property(srna, "locationy", PROP_BOOLEAN, PROP_NONE);
130         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCY);
131         RNA_def_property_ui_text(prop, "Location Y", "Use Y Location of Parent.");
132
133         prop= RNA_def_property(srna, "locationz", PROP_BOOLEAN, PROP_NONE);
134         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCZ);
135         RNA_def_property_ui_text(prop, "Location Z", "Use Z Location of Parent.");
136
137         prop= RNA_def_property(srna, "rotationx", PROP_BOOLEAN, PROP_NONE);
138         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTX);
139         RNA_def_property_ui_text(prop, "Rotation X", "Use X Rotation of Parent.");
140
141         prop= RNA_def_property(srna, "rotationy", PROP_BOOLEAN, PROP_NONE);
142         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTY);
143         RNA_def_property_ui_text(prop, "Rotation Y", "Use Y Rotation of Parent.");
144
145         prop= RNA_def_property(srna, "rotationz", PROP_BOOLEAN, PROP_NONE);
146         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTZ);
147         RNA_def_property_ui_text(prop, "Rotation Z", "Use Z Rotation of Parent.");
148
149         prop= RNA_def_property(srna, "sizex", PROP_BOOLEAN, PROP_NONE);
150         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEX);
151         RNA_def_property_ui_text(prop, "Size X", "Use X Scale of Parent.");
152
153         prop= RNA_def_property(srna, "sizey", PROP_BOOLEAN, PROP_NONE);
154         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEY);
155         RNA_def_property_ui_text(prop, "Size Y", "Use Y Scale of Parent.");
156
157         prop= RNA_def_property(srna, "sizez", PROP_BOOLEAN, PROP_NONE);
158         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEZ);
159         RNA_def_property_ui_text(prop, "Size Z", "Use Z Scale of Parent.");
160 }
161
162 static void rna_def_constraint_python(BlenderRNA *brna)
163 {
164         StructRNA *srna;
165         PropertyRNA *prop;
166
167         srna= RNA_def_struct(brna, "PythonConstraint", "Constraint");
168         RNA_def_struct_ui_text(srna, "Python Constraint", "Uses Python script for constraint evaluation.");
169         RNA_def_struct_sdna_from(srna, "bPythonConstraint", "data");
170
171         prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
172         RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
173         RNA_def_property_struct_type(prop, "ConstraintTarget");
174         RNA_def_property_ui_text(prop, "Targets", "Target Objects.");
175
176         prop= RNA_def_property(srna, "number_of_targets", PROP_INT, PROP_NONE);
177         RNA_def_property_int_sdna(prop, NULL, "tarnum");
178         RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed.");
179
180         prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
181         RNA_def_property_struct_type(prop, "Text");
182         RNA_def_property_ui_text(prop, "Script", "The text object that contains the Python script.");
183
184         prop= RNA_def_property(srna, "use_targets", PROP_BOOLEAN, PROP_NONE);
185         RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_USETARGETS);
186         RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel.");
187
188         prop= RNA_def_property(srna, "script_error", PROP_BOOLEAN, PROP_NONE);
189         RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
190         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
191         RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error.");
192 }
193
194 static void rna_def_constraint_kinematic(BlenderRNA *brna)
195 {
196         StructRNA *srna;
197         PropertyRNA *prop;
198
199         srna= RNA_def_struct(brna, "KinematicConstraint", "Constraint");
200         RNA_def_struct_ui_text(srna, "Kinematic Constraint", "Inverse Kinematics.");
201         RNA_def_struct_sdna_from(srna, "bKinematicConstraint", "data");
202
203         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
204         RNA_def_property_pointer_sdna(prop, NULL, "tar");
205         RNA_def_property_struct_type(prop, "Object");
206         RNA_def_property_ui_text(prop, "Target", "Target Object");
207
208         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
209         RNA_def_property_string_sdna(prop, NULL, "subtarget");
210         RNA_def_property_ui_text(prop, "Sub-Target", "");
211
212         prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
213         RNA_def_property_range(prop, 1, 10000);
214         RNA_def_property_ui_text(prop, "Iterations", "Maximum number of solving iterations.");
215
216         prop= RNA_def_property(srna, "pole_target", PROP_POINTER, PROP_NONE);
217         RNA_def_property_pointer_sdna(prop, NULL, "poletar");
218         RNA_def_property_struct_type(prop, "Object");
219         RNA_def_property_ui_text(prop, "Pole Target", "Object for pole rotation.");
220
221         prop= RNA_def_property(srna, "pole_subtarget", PROP_STRING, PROP_NONE);
222         RNA_def_property_string_sdna(prop, NULL, "polesubtarget");
223         RNA_def_property_ui_text(prop, "Pole Sub-Target", "");
224
225         prop= RNA_def_property(srna, "pole_angle", PROP_FLOAT, PROP_NONE);
226         RNA_def_property_float_sdna(prop, NULL, "poleangle");
227         RNA_def_property_range(prop, 0.0, 180.f);
228         RNA_def_property_ui_text(prop, "Pole Angle", "Pole rotation offset.");
229
230         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
231         RNA_def_property_range(prop, 0.01, 1.f);
232         RNA_def_property_ui_text(prop, "Weight", "For Tree-IK: Weight of position control for this target.");
233
234         prop= RNA_def_property(srna, "orient_weight", PROP_FLOAT, PROP_NONE);
235         RNA_def_property_float_sdna(prop, NULL, "orientweight");
236         RNA_def_property_range(prop, 0.01, 1.f);
237         RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target.");
238
239         prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
240         RNA_def_property_int_sdna(prop, NULL, "rootbone");
241         RNA_def_property_range(prop, 0, 255);
242         RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones.");
243
244         prop= RNA_def_property(srna, "tail", PROP_BOOLEAN, PROP_NONE);
245         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_TIP);
246         RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain.");
247
248         prop= RNA_def_property(srna, "rotation", PROP_BOOLEAN, PROP_NONE);
249         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_ROT);
250         RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target.");
251
252         prop= RNA_def_property(srna, "targetless", PROP_BOOLEAN, PROP_NONE);
253         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_AUTO);
254         RNA_def_property_ui_text(prop, "Targetless", "Use targetless IK.");
255
256         prop= RNA_def_property(srna, "stretch", PROP_BOOLEAN, PROP_NONE);
257         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_STRETCH);
258         RNA_def_property_ui_text(prop, "Stretch", "Enable IK Stretching.");
259 }
260
261 static void rna_def_constraint_track_to(BlenderRNA *brna)
262 {
263         StructRNA *srna;
264         PropertyRNA *prop;
265
266         static EnumPropertyItem track_items[] = {
267                 {TRACK_X, "TRACK_X", "Track X", ""},
268                 {TRACK_Y, "TRACK_Y", "Track Y", ""},
269                 {TRACK_Z, "TRACK_Z", "Track Z", ""},
270                 {TRACK_nX, "TRACK_NEGATIVE_X", "Track Negative X", ""},
271                 {TRACK_nY, "TRACK_NEGATIVE_Y", "Track Negative Y", ""},
272                 {TRACK_nZ, "TRACK_NEGATIVE_Z", "Track Negative Z", ""},
273                 {0, NULL, NULL, NULL}};
274
275         static EnumPropertyItem up_items[] = {
276                 {TRACK_X, "UP_X", "Up X", ""},
277                 {TRACK_Y, "UP_Y", "Up Y", ""},
278                 {TRACK_Z, "UP_Z", "Up Z", ""},
279                 {0, NULL, NULL, NULL}};
280
281         srna= RNA_def_struct(brna, "TrackToConstraint", "Constraint");
282         RNA_def_struct_ui_text(srna, "Track To Constraint", "Aims the constrained object toward the target.");
283         RNA_def_struct_sdna_from(srna, "bTrackToConstraint", "data");
284
285         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
286         RNA_def_property_pointer_sdna(prop, NULL, "tar");
287         RNA_def_property_struct_type(prop, "Object");
288         RNA_def_property_ui_text(prop, "Target", "Target Object");
289
290         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
291         RNA_def_property_string_sdna(prop, NULL, "subtarget");
292         RNA_def_property_ui_text(prop, "Sub-Target", "");
293
294         prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
295         RNA_def_property_enum_sdna(prop, NULL, "reserved1");
296         RNA_def_property_enum_items(prop, track_items);
297         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object.");
298
299         prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
300         RNA_def_property_enum_sdna(prop, NULL, "reserved2");
301         RNA_def_property_enum_items(prop, up_items);
302         RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward.");
303
304         prop= RNA_def_property(srna, "target_z", PROP_BOOLEAN, PROP_NONE);
305         RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
306         RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction.");
307 }
308
309 static void rna_def_constraint_rotate_like(BlenderRNA *brna)
310 {
311         StructRNA *srna;
312         PropertyRNA *prop;
313
314         srna= RNA_def_struct(brna, "RotateLikeConstraint", "Constraint");
315         RNA_def_struct_ui_text(srna, "Copy Rotation Constraint", "Copies the rotation of the target.");
316         RNA_def_struct_sdna_from(srna, "bRotateLikeConstraint", "data");
317
318         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
319         RNA_def_property_pointer_sdna(prop, NULL, "tar");
320         RNA_def_property_struct_type(prop, "Object");
321         RNA_def_property_ui_text(prop, "Target", "Target Object");
322
323         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
324         RNA_def_property_string_sdna(prop, NULL, "subtarget");
325         RNA_def_property_ui_text(prop, "Sub-Target", "");
326
327         prop= RNA_def_property(srna, "rotate_like_x", PROP_BOOLEAN, PROP_NONE);
328         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
329         RNA_def_property_ui_text(prop, "Like X", "Copy the target's X rotation.");
330
331         prop= RNA_def_property(srna, "rotate_like_y", PROP_BOOLEAN, PROP_NONE);
332         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y);
333         RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y rotation.");
334
335         prop= RNA_def_property(srna, "rotate_like_z", PROP_BOOLEAN, PROP_NONE);
336         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z);
337         RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z rotation.");
338
339         prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
340         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
341         RNA_def_property_ui_text(prop, "Invert X", "Invert the X rotation.");
342
343         prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
344         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y_INVERT);
345         RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y rotation.");
346
347         prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
348         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z_INVERT);
349         RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation.");
350
351         prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
352         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET);
353         RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation.");
354 }
355
356 static void rna_def_constraint_locate_like(BlenderRNA *brna)
357 {
358         StructRNA *srna;
359         PropertyRNA *prop;
360
361         srna= RNA_def_struct(brna, "LocateLikeConstraint", "Constraint");
362         RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target.");
363         RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "data");
364
365         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
366         RNA_def_property_pointer_sdna(prop, NULL, "tar");
367         RNA_def_property_struct_type(prop, "Object");
368         RNA_def_property_ui_text(prop, "Target", "Target Object");
369
370         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
371         RNA_def_property_string_sdna(prop, NULL, "subtarget");
372         RNA_def_property_ui_text(prop, "Sub-Target", "");
373
374         prop= RNA_def_property(srna, "locate_like_x", PROP_BOOLEAN, PROP_NONE);
375         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
376         RNA_def_property_ui_text(prop, "Like X", "Copy the target's X location.");
377
378         prop= RNA_def_property(srna, "locate_like_y", PROP_BOOLEAN, PROP_NONE);
379         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);
380         RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y location.");
381
382         prop= RNA_def_property(srna, "locate_like_z", PROP_BOOLEAN, PROP_NONE);
383         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z);
384         RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z location.");
385
386         prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
387         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
388         RNA_def_property_ui_text(prop, "Invert X", "Invert the X location.");
389
390         prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
391         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y_INVERT);
392         RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y location.");
393
394         prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
395         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z_INVERT);
396         RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z location.");
397
398         prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
399         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
400         RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location.");
401 }
402
403 static void rna_def_constraint_minmax(BlenderRNA *brna)
404 {
405         StructRNA *srna;
406         PropertyRNA *prop;
407
408         static EnumPropertyItem minmax_items[] = {
409                 {LOCLIKE_X, "FLOOR_X", "Floor X", ""},
410                 {LOCLIKE_Y, "FLOOR_Y", "Floor Y", ""},
411                 {LOCLIKE_Z, "FLOOR_Z", "Floor Z", ""},
412                 {LOCLIKE_X_INVERT, "FLOOR_NEGATIVE_X", "Floor Negative X", ""},
413                 {LOCLIKE_Y_INVERT, "FLOOR_NEGATIVE_Y", "Floor Negative Y", ""},
414                 {LOCLIKE_Z_INVERT, "FLOOR_NEGATIVE_Z", "Floor Negative Z", ""},
415                 {0, NULL, NULL, NULL}};
416
417         srna= RNA_def_struct(brna, "MinMaxConstraint", "Constraint");
418         RNA_def_struct_ui_text(srna, "Floor Constraint", "Uses the target object for location limitation.");
419         RNA_def_struct_sdna_from(srna, "bMinMaxConstraint","data");
420
421         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
422         RNA_def_property_pointer_sdna(prop, NULL, "tar");
423         RNA_def_property_struct_type(prop, "Object");
424         RNA_def_property_ui_text(prop, "Target", "Target Object");
425
426         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
427         RNA_def_property_string_sdna(prop, NULL, "subtarget");
428         RNA_def_property_ui_text(prop, "Sub-Target", "");
429
430         prop= RNA_def_property(srna, "floor_location", PROP_ENUM, PROP_NONE);
431         RNA_def_property_enum_sdna(prop, NULL, "minmaxflag");
432         RNA_def_property_enum_items(prop, minmax_items);
433         RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through.");
434
435         prop= RNA_def_property(srna, "sticky", PROP_BOOLEAN, PROP_NONE);
436         RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
437         RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained.");
438
439         prop= RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
440         RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_USEROT);
441         RNA_def_property_ui_text(prop, "Use Rotation", "Use the target's rotation to determine floor.");
442
443         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
444         RNA_def_property_range(prop, 0.0, 100.f);
445         RNA_def_property_ui_text(prop, "Offset", "Offset of floor from object center.");
446 }
447
448 static void rna_def_constraint_size_like(BlenderRNA *brna)
449 {
450         StructRNA *srna;
451         PropertyRNA *prop;
452
453         srna= RNA_def_struct(brna, "SizeLikeConstraint", "Constraint");
454         RNA_def_struct_ui_text(srna, "Copy Scale Constraint", "Copies the scale of the target.");
455         RNA_def_struct_sdna_from(srna, "bSizeLikeConstraint", "data");
456
457         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
458         RNA_def_property_pointer_sdna(prop, NULL, "tar");
459         RNA_def_property_struct_type(prop, "Object");
460         RNA_def_property_ui_text(prop, "Target", "Target Object");
461
462         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
463         RNA_def_property_string_sdna(prop, NULL, "subtarget");
464         RNA_def_property_ui_text(prop, "Sub-Target", "");
465
466         prop= RNA_def_property(srna, "size_like_x", PROP_BOOLEAN, PROP_NONE);
467         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_X);
468         RNA_def_property_ui_text(prop, "Like X", "Copy the target's X scale.");
469
470         prop= RNA_def_property(srna, "size_like_y", PROP_BOOLEAN, PROP_NONE);
471         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Y);
472         RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y scale.");
473
474         prop= RNA_def_property(srna, "size_like_z", PROP_BOOLEAN, PROP_NONE);
475         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Z);
476         RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z scale.");
477
478         prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
479         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET);
480         RNA_def_property_ui_text(prop, "Offset", "Add original scale into copied scale.");
481 }
482
483 static void rna_def_constraint_action(BlenderRNA *brna)
484 {
485         StructRNA *srna;
486         PropertyRNA *prop;
487
488         static EnumPropertyItem transform_channel_items[] = {
489                 {00, "ROTATION_X", "Rotation X", ""},
490                 {01, "ROTATION_Y", "Rotation Y", ""},
491                 {02, "ROTATION_Z", "Rotation Z", ""},
492                 {10, "SIZE_X", "Scale X", ""},
493                 {11, "SIZE_Y", "Scale Y", ""},
494                 {12, "SIZE_Z", "Scale Z", ""},
495                 {20, "LOCATION_X", "Location X", ""},
496                 {21, "LOCATION_Y", "Location Y", ""},
497                 {22, "LOCATION_Z", "Location Z", ""},
498                 {0, NULL, NULL, NULL}};
499
500         srna= RNA_def_struct(brna, "ActionConstraint", "Constraint");
501         RNA_def_struct_ui_text(srna, "Action Constraint", "Map an action to the transform axes of a bone.");
502         RNA_def_struct_sdna_from(srna, "bActionConstraint", "data");
503
504         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
505         RNA_def_property_pointer_sdna(prop, NULL, "tar");
506         RNA_def_property_struct_type(prop, "Object");
507         RNA_def_property_ui_text(prop, "Target", "Target Object");
508
509         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
510         RNA_def_property_string_sdna(prop, NULL, "subtarget");
511         RNA_def_property_ui_text(prop, "Sub-Target", "");
512
513         prop= RNA_def_property(srna, "transform_channel", PROP_ENUM, PROP_NONE);
514         RNA_def_property_enum_sdna(prop, NULL, "type");
515         RNA_def_property_enum_items(prop, transform_channel_items);
516         RNA_def_property_ui_text(prop, "Transform Channel", "Transfromation channel from the target that is used to key the Action.");
517
518         prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
519         RNA_def_property_pointer_sdna(prop, NULL, "act");
520         RNA_def_property_struct_type(prop, "Action");
521         RNA_def_property_ui_text(prop, "Action", "");
522
523         prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_NONE);
524         RNA_def_property_int_sdna(prop, NULL, "start");
525         RNA_def_property_range(prop, MINFRAME, MAXFRAME);
526         RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use.");
527
528         prop= RNA_def_property(srna, "end_frame", PROP_INT, PROP_NONE);
529         RNA_def_property_int_sdna(prop, NULL, "end");
530         RNA_def_property_range(prop, MINFRAME, MAXFRAME);
531         RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use.");
532
533         prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
534         RNA_def_property_float_sdna(prop, NULL, "max");
535         RNA_def_property_range(prop, 0.0, 1000.f);
536         RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range.");
537
538         prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
539         RNA_def_property_float_sdna(prop, NULL, "min");
540         RNA_def_property_range(prop, 0.0, 1000.f);
541         RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range.");
542 }
543
544 static void rna_def_constraint_locked_track(BlenderRNA *brna)
545 {
546         StructRNA *srna;
547         PropertyRNA *prop;
548
549         static EnumPropertyItem locktrack_items[] = {
550                 {TRACK_X, "TRACK_X", "Track X", ""},
551                 {TRACK_Y, "TRACK_Y", "Track Y", ""},
552                 {TRACK_Z, "TRACK_Z", "Track Z", ""},
553                 {TRACK_nX, "TRACK_NEGATIVE_X", "Track Negative X", ""},
554                 {TRACK_nY, "TRACK_NEGATIVE_Y", "Track Negative Y", ""},
555                 {TRACK_nZ, "TRACK_NEGATIVE_Z", "Track Negative Z", ""},
556                 {0, NULL, NULL, NULL}};
557
558         static EnumPropertyItem lock_items[] = {
559                 {TRACK_X, "LOCK_X", "Lock X", ""},
560                 {TRACK_Y, "LOCK_Y", "Lock Y", ""},
561                 {TRACK_Z, "LOCK_Z", "Lock Z", ""},
562                 {0, NULL, NULL, NULL}};
563
564         srna= RNA_def_struct(brna, "LockTrackConstraint", "Constraint");
565         RNA_def_struct_ui_text(srna, "Locked Track Constraint", "Points toward the target along the track axis, while locking the other axis.");
566         RNA_def_struct_sdna_from(srna, "bLockTrackConstraint", "data");
567
568         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
569         RNA_def_property_pointer_sdna(prop, NULL, "tar");
570         RNA_def_property_struct_type(prop, "Object");
571         RNA_def_property_ui_text(prop, "Target", "Target Object");
572
573         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
574         RNA_def_property_string_sdna(prop, NULL, "subtarget");
575         RNA_def_property_ui_text(prop, "Sub-Target", "");
576
577         prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
578         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
579         RNA_def_property_enum_items(prop, locktrack_items);
580         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object.");
581
582         prop= RNA_def_property(srna, "locked", PROP_ENUM, PROP_NONE);
583         RNA_def_property_enum_sdna(prop, NULL, "lockflag");
584         RNA_def_property_enum_items(prop, lock_items);
585         RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward.");
586 }
587
588 static void rna_def_constraint_follow_path(BlenderRNA *brna)
589 {
590         StructRNA *srna;
591         PropertyRNA *prop;
592
593         static EnumPropertyItem forwardpath_items[] = {
594                 {TRACK_X, "FORWARD_X", "Forward X", ""},
595                 {TRACK_Y, "FORWARD_Y", "Forward Y", ""},
596                 {TRACK_Z, "FORWARD_Z", "Forward Z", ""},
597                 {TRACK_nX, "TRACK_NEGATIVE_X", "Forward Negative X", ""},
598                 {TRACK_nY, "TRACK_NEGATIVE_Y", "Forward Negative Y", ""},
599                 {TRACK_nZ, "TRACK_NEGATIVE_Z", "Forward Negative Z", ""},
600                 {0, NULL, NULL, NULL}};
601
602         static EnumPropertyItem pathup_items[] = {
603                 {TRACK_X, "UP_X", "Up X", ""},
604                 {TRACK_Y, "UP_Y", "Up Y", ""},
605                 {TRACK_Z, "UP_Z", "Up Z", ""},
606                 {0, NULL, NULL, NULL}};
607
608         srna= RNA_def_struct(brna, "FollowPathConstraint", "Constraint");
609         RNA_def_struct_ui_text(srna, "Follow Path Constraint", "Locks motion to the target path.");
610         RNA_def_struct_sdna_from(srna, "bFollowPathConstraint", "data");
611
612         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
613         RNA_def_property_pointer_sdna(prop, NULL, "tar");
614         RNA_def_property_struct_type(prop, "Object");
615         RNA_def_property_ui_text(prop, "Target", "Target Object");
616
617         prop= RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
618         RNA_def_property_range(prop, -300000.0, 300000.f);
619         RNA_def_property_ui_text(prop, "Offset", "Offset from the position corresponding to the time frame.");
620
621         prop= RNA_def_property(srna, "forward", PROP_ENUM, PROP_NONE);
622         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
623         RNA_def_property_enum_items(prop, forwardpath_items);
624         RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path.");
625
626         prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
627         RNA_def_property_enum_sdna(prop, NULL, "upflag");
628         RNA_def_property_enum_items(prop, pathup_items);
629         RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward.");
630
631         prop= RNA_def_property(srna, "curve_follow", PROP_BOOLEAN, PROP_NONE);
632         RNA_def_property_boolean_sdna(prop, NULL, "followflag", 1);
633         RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve.");
634 }
635
636 static void rna_def_constraint_stretch_to(BlenderRNA *brna)
637 {
638         StructRNA *srna;
639         PropertyRNA *prop;
640
641         static EnumPropertyItem volume_items[] = {
642                 {VOLUME_XZ, "VOLUME_XZX", "Volume XZ", ""},
643                 {VOLUME_XZ, "VOLUME_X", "Volume Y", ""},
644                 {VOLUME_XZ, "VOLUME_Z", "Volume Z", ""},
645                 {NO_VOLUME, "NO_VOLUME", "No Volume", ""},
646                 {0, NULL, NULL, NULL}};
647
648         static EnumPropertyItem plane_items[] = {
649                 {PLANE_X, "PLANE_X", "Keep X Axis", ""},
650                 {PLANE_Z, "PLANE_Z", "Keep Z Axis", ""},
651                 {0, NULL, NULL, NULL}};
652
653         srna= RNA_def_struct(brna, "StretchToConstraint", "Constraint");
654         RNA_def_struct_ui_text(srna, "Stretch To Constraint", "Stretches to meet the target object.");
655         RNA_def_struct_sdna_from(srna, "bStretchToConstraint", "data");
656
657         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
658         RNA_def_property_pointer_sdna(prop, NULL, "tar");
659         RNA_def_property_struct_type(prop, "Object");
660         RNA_def_property_ui_text(prop, "Target", "Target Object");
661
662         prop= RNA_def_property(srna, "volume", PROP_ENUM, PROP_NONE);
663         RNA_def_property_enum_sdna(prop, NULL, "volmode");
664         RNA_def_property_enum_items(prop, volume_items);
665         RNA_def_property_ui_text(prop, "Maintain Volume", "Maintain the object's volume as it stretches.");
666
667         prop= RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
668         RNA_def_property_enum_sdna(prop, NULL, "plane");
669         RNA_def_property_enum_items(prop, plane_items);
670         RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch.");
671
672         prop= RNA_def_property(srna, "original_length", PROP_FLOAT, PROP_NONE);
673         RNA_def_property_float_sdna(prop, NULL, "orglength");
674         RNA_def_property_range(prop, 0.0, 100.f);
675         RNA_def_property_ui_text(prop, "Original Length", "Length at rest position.");
676
677         prop= RNA_def_property(srna, "bulge", PROP_FLOAT, PROP_NONE);
678         RNA_def_property_range(prop, 0.0, 100.f);
679         RNA_def_property_ui_text(prop, "Volume Variation", "Factor between volume variation and stretching.");
680 }
681
682 static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
683 {
684         StructRNA *srna;
685         PropertyRNA *prop;
686
687         static EnumPropertyItem pivot_items[] = {
688                 {CONSTRAINT_RB_BALL, "BALL", "Ball", ""},
689                 {CONSTRAINT_RB_HINGE, "HINGE", "Hinge", ""},
690                 {CONSTRAINT_RB_CONETWIST, "CONETWIST", "Cone Twist", ""},
691                 {CONSTRAINT_RB_GENERIC6DOF, "GENERIC", "Generic 6 DoF", ""},
692                 {0, NULL, NULL, NULL}};
693
694         srna= RNA_def_struct(brna, "RigidBodyJointConstraint", "Constraint");
695         RNA_def_struct_ui_text(srna, "Rigid Body Joint Constraint", "For use with the Game Engine.");
696         RNA_def_struct_sdna_from(srna, "bRigidBodyJointConstraint", "data");
697
698         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
699         RNA_def_property_pointer_sdna(prop, NULL, "tar");
700         RNA_def_property_struct_type(prop, "Object");
701         RNA_def_property_ui_text(prop, "Target", "Target Object.");
702
703         prop= RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
704         RNA_def_property_struct_type(prop, "Object");
705         RNA_def_property_ui_text(prop, "Child Object", "Child object.");
706
707         prop= RNA_def_property(srna, "pivot_type", PROP_ENUM, PROP_NONE);
708         RNA_def_property_enum_sdna(prop, NULL, "type");
709         RNA_def_property_enum_items(prop, pivot_items);
710         RNA_def_property_ui_text(prop, "Pivot Type", "");
711
712         prop= RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_NONE);
713         RNA_def_property_float_sdna(prop, NULL, "pivX");
714         RNA_def_property_range(prop, -1000.0, 1000.f);
715         RNA_def_property_ui_text(prop, "Pivot X", "Offset pivot on X.");
716
717         prop= RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_NONE);
718         RNA_def_property_float_sdna(prop, NULL, "pivY");
719         RNA_def_property_range(prop, -1000.0, 1000.f);
720         RNA_def_property_ui_text(prop, "Pivot Y", "Offset pivot on Y.");
721
722         prop= RNA_def_property(srna, "pivot_z", PROP_FLOAT, PROP_NONE);
723         RNA_def_property_float_sdna(prop, NULL, "pivZ");
724         RNA_def_property_range(prop, -1000.0, 1000.f);
725         RNA_def_property_ui_text(prop, "Pivot Z", "Offset pivot on Z.");
726
727         prop= RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_NONE);
728         RNA_def_property_float_sdna(prop, NULL, "axX");
729         RNA_def_property_range(prop, -360.0, 360.f);
730         RNA_def_property_ui_text(prop, "Axis X", "Rotate pivot on X axis in degress.");
731
732         prop= RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_NONE);
733         RNA_def_property_float_sdna(prop, NULL, "axY");
734         RNA_def_property_range(prop, -360.0, 360.f);
735         RNA_def_property_ui_text(prop, "Axis Y", "Rotate pivot on Y axis in degress.");
736
737         prop= RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_NONE);
738         RNA_def_property_float_sdna(prop, NULL, "axZ");
739         RNA_def_property_range(prop, -360.0, 360.f);
740         RNA_def_property_ui_text(prop, "Axis Z", "Rotate pivot on Z axis in degress.");
741         
742         /* XXX not sure how to wrap the two 6 element arrays for the generic joint */
743         //float       minLimit[6];
744         //float       maxLimit[6];
745         
746         prop= RNA_def_property(srna, "disable_linked_collision", PROP_BOOLEAN, PROP_NONE);
747         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
748         RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies.");
749
750         prop= RNA_def_property(srna, "draw_pivot", PROP_BOOLEAN, PROP_NONE);
751         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
752         RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view.");
753 }
754
755 static void rna_def_constraint_clamp_to(BlenderRNA *brna)
756 {
757         StructRNA *srna;
758         PropertyRNA *prop;
759
760         static EnumPropertyItem clamp_items[] = {
761                 {CLAMPTO_AUTO, "CLAMPTO_AUTO", "Clamp Auto", ""},
762                 {CLAMPTO_X, "CLAMPTO_X", "Clamp X", ""},
763                 {CLAMPTO_Y, "CLAMPTO_Y", "Clamp Y", ""},
764                 {CLAMPTO_Z, "CLAMPTO_Z", "Clamp Z", ""},
765                 {0, NULL, NULL, NULL}};
766
767         srna= RNA_def_struct(brna, "ClampToConstraint", "Constraint");
768         RNA_def_struct_ui_text(srna, "Clamp To Constraint", "Constrains an object's location to the nearest point along the target path.");
769         RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
770
771         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
772         RNA_def_property_pointer_sdna(prop, NULL, "tar");
773         RNA_def_property_struct_type(prop, "Object");
774         RNA_def_property_ui_text(prop, "Target", "Target Object");
775
776         prop= RNA_def_property(srna, "main_axis", PROP_ENUM, PROP_NONE);
777         RNA_def_property_enum_sdna(prop, NULL, "flag");
778         RNA_def_property_enum_items(prop, clamp_items);
779         RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement.");
780
781         prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
782         RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
783         RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box.");
784 }
785
786 static void rna_def_constraint_transform(BlenderRNA *brna)
787 {
788         StructRNA *srna;
789         PropertyRNA *prop;
790
791         static EnumPropertyItem transform_items[] = {
792                 {0, "LOCATION", "Location", ""},
793                 {1, "ROTATION", "Rotation", ""},
794                 {2, "SCALE", "Scale", ""},
795                 {0, NULL, NULL, NULL}};
796
797         static EnumPropertyItem axis_map_items[] = {
798                 {0, "X", "X", ""},
799                 {1, "Y", "Y", ""},
800                 {2, "Z", "Z", ""},
801                 {0, NULL, NULL, NULL}};
802
803         srna= RNA_def_struct(brna, "TransformConstraint", "Constraint");
804         RNA_def_struct_ui_text(srna, "Transformation Constraint", "Maps transformations of the target to the object.");
805         RNA_def_struct_sdna_from(srna, "bTransformConstraint", "data");
806
807         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
808         RNA_def_property_pointer_sdna(prop, NULL, "tar");
809         RNA_def_property_struct_type(prop, "Object");
810         RNA_def_property_ui_text(prop, "Target", "Target Object");
811
812         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
813         RNA_def_property_string_sdna(prop, NULL, "subtarget");
814         RNA_def_property_ui_text(prop, "Sub-Target", "");
815
816         prop= RNA_def_property(srna, "map_from", PROP_ENUM, PROP_NONE);
817         RNA_def_property_enum_sdna(prop, NULL, "from");
818         RNA_def_property_enum_items(prop, transform_items);
819         RNA_def_property_ui_text(prop, "Map From", "The transformation type to use from the target.");
820
821         prop= RNA_def_property(srna, "map_to", PROP_ENUM, PROP_NONE);
822         RNA_def_property_enum_sdna(prop, NULL, "to");
823         RNA_def_property_enum_items(prop, transform_items);
824         RNA_def_property_ui_text(prop, "Map To", "The transformation type to affect of the constrained object.");
825
826 /* it would be cool to have a method for rna to directly address specific elements of arrays in dna */
827
828 /*      prop= RNA_def_property(srna, "map_to_x_from", PROP_ENUM, PROP_NONE);
829         RNA_def_property_enum_sdna(prop, 0, "map");
830         RNA_def_property_enum_items(prop, axis_map_items);
831         RNA_def_property_ui_text(prop, "Map To X From", "The source axis constrained object's X axis uses.");
832
833         prop= RNA_def_property(srna, "map_to_y_from", PROP_ENUM, PROP_NONE);
834         RNA_def_property_enum_sdna(prop, 1, "map");
835         RNA_def_property_enum_items(prop, axis_map_items);
836         RNA_def_property_ui_text(prop, "Map To Y From", "The source axis constrained object's Y axis uses.");
837
838         prop= RNA_def_property(srna, "map_to_z_from", PROP_ENUM, PROP_NONE);
839         RNA_def_property_enum_sdna(prop, 2, "map");
840         RNA_def_property_enum_items(prop, axis_map_items);
841         RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses.");
842
843         prop= RNA_def_property(srna, "extrapolate_motion", PROP_BOOLEAN, PROP_NONE);
844         RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
845         RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges.");
846
847         prop= RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_NONE);
848         RNA_def_property_float_sdna(prop, 0, "from_min");
849         RNA_def_property_range(prop, 0.0, 1000.f);
850         RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion.");
851
852         prop= RNA_def_property(srna, "from_min_y", PROP_FLOAT, PROP_NONE);
853         RNA_def_property_float_sdna(prop, 1, "from_min");
854         RNA_def_property_range(prop, 0.0, 1000.f);
855         RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion.");
856
857         prop= RNA_def_property(srna, "from_min_z", PROP_FLOAT, PROP_NONE);
858         RNA_def_property_float_sdna(prop, 2, "from_min");
859         RNA_def_property_range(prop, 0.0, 1000.f);
860         RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion.");
861
862         prop= RNA_def_property(srna, "from_max_x", PROP_FLOAT, PROP_NONE);
863         RNA_def_property_float_sdna(prop, 0, "from_max");
864         RNA_def_property_range(prop, 0.0, 1000.f);
865         RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion.");
866
867         prop= RNA_def_property(srna, "from_max_y", PROP_FLOAT, PROP_NONE);
868         RNA_def_property_float_sdna(prop, 1, "from_max");
869         RNA_def_property_range(prop, 0.0, 1000.f);
870         RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion.");
871
872         prop= RNA_def_property(srna, "from_max_z", PROP_FLOAT, PROP_NONE);
873         RNA_def_property_float_sdna(prop, 2, "from_max");
874         RNA_def_property_range(prop, 0.0, 1000.f);
875         RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source motion.");
876
877         prop= RNA_def_property(srna, "to_min_x", PROP_FLOAT, PROP_NONE);
878         RNA_def_property_float_sdna(prop, 0, "to_min");
879         RNA_def_property_range(prop, 0.0, 1000.f);
880         RNA_def_property_ui_text(prop, "To Minimum X", "Bottom range of X axis destination motion.");
881
882         prop= RNA_def_property(srna, "to_min_y", PROP_FLOAT, PROP_NONE);
883         RNA_def_property_float_sdna(prop, 1, "to_min");
884         RNA_def_property_range(prop, 0.0, 1000.f);
885         RNA_def_property_ui_text(prop, "To Minimum Y", "Bottom range of Y axis destination motion.");
886
887         prop= RNA_def_property(srna, "to_min_z", PROP_FLOAT, PROP_NONE);
888         RNA_def_property_float_sdna(prop, 2, "to_min");
889         RNA_def_property_range(prop, 0.0, 1000.f);
890         RNA_def_property_ui_text(prop, "To Minimum Z", "Bottom range of Z axis destination motion.");
891
892         prop= RNA_def_property(srna, "to_max_x", PROP_FLOAT, PROP_NONE);
893         RNA_def_property_float_sdna(prop, 0, "to_max");
894         RNA_def_property_range(prop, 0.0, 1000.f);
895         RNA_def_property_ui_text(prop, "To Maximum X", "Top range of X axis destination motion.");
896
897         prop= RNA_def_property(srna, "to_max_y", PROP_FLOAT, PROP_NONE);
898         RNA_def_property_float_sdna(prop, 1, "to_max");
899         RNA_def_property_range(prop, 0.0, 1000.f);
900         RNA_def_property_ui_text(prop, "To Maximum Y", "Top range of Y axis destination motion.");
901
902         prop= RNA_def_property(srna, "to_max_z", PROP_FLOAT, PROP_NONE);
903         RNA_def_property_float_sdna(prop, 2, "to_max");
904         RNA_def_property_range(prop, 0.0, 1000.f);
905         RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion.");
906 */
907 }
908
909 static void rna_def_constraint_location_limit(BlenderRNA *brna)
910 {
911         StructRNA *srna;
912         PropertyRNA *prop;
913
914         srna= RNA_def_struct(brna, "LocationLimitConstraint", "Constraint");
915         RNA_def_struct_ui_text(srna, "Location Limit Constraint", "Limits the location of the constrained object.");
916         RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
917
918         prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
919         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
920         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
921
922         prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
923         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
924         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
925
926         prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
927         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
928         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
929
930         prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
931         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
932         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
933
934         prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
935         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
936         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
937
938         prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
939         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
940         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
941
942         prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
943         RNA_def_property_float_sdna(prop, NULL, "xmin");
944         RNA_def_property_range(prop, -1000.0, 1000.f);
945         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
946
947         prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
948         RNA_def_property_float_sdna(prop, NULL, "ymin");
949         RNA_def_property_range(prop, -1000.0, 1000.f);
950         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
951
952         prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
953         RNA_def_property_float_sdna(prop, NULL, "zmin");
954         RNA_def_property_range(prop, -1000.0, 1000.f);
955         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
956
957         prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
958         RNA_def_property_float_sdna(prop, NULL, "xmax");
959         RNA_def_property_range(prop, -1000.0, 1000.f);
960         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
961
962         prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
963         RNA_def_property_float_sdna(prop, NULL, "ymax");
964         RNA_def_property_range(prop, -1000.0, 1000.f);
965         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
966
967         prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
968         RNA_def_property_float_sdna(prop, NULL, "zmax");
969         RNA_def_property_range(prop, -1000.0, 1000.f);
970         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
971
972         prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
973         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
974         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
975 }
976
977 static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
978 {
979         StructRNA *srna;
980         PropertyRNA *prop;
981
982         srna= RNA_def_struct(brna, "RotationLimitConstraint", "Constraint");
983         RNA_def_struct_ui_text(srna, "Rotation Limit Constraint", "Limits the rotation of the constrained object.");
984         RNA_def_struct_sdna_from(srna, "bRotLimitConstraint", "data");
985
986         prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
987         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
988         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
989
990         prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
991         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
992         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
993
994         prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
995         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
996         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
997
998         prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
999         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1000         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
1001
1002         prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
1003         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1004         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
1005
1006         prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
1007         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1008         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
1009
1010         prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
1011         RNA_def_property_float_sdna(prop, NULL, "xmin");
1012         RNA_def_property_range(prop, -1000.0, 1000.f);
1013         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1014
1015         prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
1016         RNA_def_property_float_sdna(prop, NULL, "ymin");
1017         RNA_def_property_range(prop, -1000.0, 1000.f);
1018         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1019
1020         prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
1021         RNA_def_property_float_sdna(prop, NULL, "zmin");
1022         RNA_def_property_range(prop, -1000.0, 1000.f);
1023         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1024
1025         prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
1026         RNA_def_property_float_sdna(prop, NULL, "xmax");
1027         RNA_def_property_range(prop, -1000.0, 1000.f);
1028         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1029
1030         prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
1031         RNA_def_property_float_sdna(prop, NULL, "ymax");
1032         RNA_def_property_range(prop, -1000.0, 1000.f);
1033         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1034
1035         prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
1036         RNA_def_property_float_sdna(prop, NULL, "zmax");
1037         RNA_def_property_range(prop, -1000.0, 1000.f);
1038         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1039
1040         prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1041         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1042         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1043 }
1044
1045 static void rna_def_constraint_size_limit(BlenderRNA *brna)
1046 {
1047         StructRNA *srna;
1048         PropertyRNA *prop;
1049
1050         srna= RNA_def_struct(brna, "SizeLimitConstraint", "Constraint");
1051         RNA_def_struct_ui_text(srna, "Size Limit Constraint", "Limits the scaling of the constrained object.");
1052         RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
1053
1054         prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
1055         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1056         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
1057
1058         prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
1059         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1060         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
1061
1062         prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
1063         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1064         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
1065
1066         prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
1067         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1068         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
1069
1070         prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
1071         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1072         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
1073
1074         prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
1075         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1076         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
1077
1078         prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
1079         RNA_def_property_float_sdna(prop, NULL, "xmin");
1080         RNA_def_property_range(prop, -1000.0, 1000.f);
1081         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1082
1083         prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
1084         RNA_def_property_float_sdna(prop, NULL, "ymin");
1085         RNA_def_property_range(prop, -1000.0, 1000.f);
1086         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1087
1088         prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
1089         RNA_def_property_float_sdna(prop, NULL, "zmin");
1090         RNA_def_property_range(prop, -1000.0, 1000.f);
1091         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1092
1093         prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
1094         RNA_def_property_float_sdna(prop, NULL, "xmax");
1095         RNA_def_property_range(prop, -1000.0, 1000.f);
1096         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1097
1098         prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
1099         RNA_def_property_float_sdna(prop, NULL, "ymax");
1100         RNA_def_property_range(prop, -1000.0, 1000.f);
1101         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1102
1103         prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
1104         RNA_def_property_float_sdna(prop, NULL, "zmax");
1105         RNA_def_property_range(prop, -1000.0, 1000.f);
1106         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1107
1108         prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1109         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1110         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1111 }
1112
1113 static void rna_def_constraint_distance_limit(BlenderRNA *brna)
1114 {
1115         StructRNA *srna;
1116         PropertyRNA *prop;
1117
1118         static EnumPropertyItem distance_items[] = {
1119                 {LIMITDIST_INSIDE, "LIMITDIST_INSIDE", "Inside", ""},
1120                 {LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", "Outside", ""},
1121                 {LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", "On Surface", ""},
1122                 {0, NULL, NULL, NULL}};
1123
1124         srna= RNA_def_struct(brna, "DistLimitConstraint", "Constraint");
1125         RNA_def_struct_ui_text(srna, "Distance Limit Constraint", "Limits the distance from target object.");
1126         RNA_def_struct_sdna_from(srna, "bDistLimitConstraint", "data");
1127
1128         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1129         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1130         RNA_def_property_struct_type(prop, "Object");
1131         RNA_def_property_ui_text(prop, "Target", "Target Object");
1132
1133         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1134         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1135         RNA_def_property_ui_text(prop, "Sub-Target", "");
1136
1137         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
1138         RNA_def_property_float_sdna(prop, NULL, "dist");
1139         RNA_def_property_range(prop, 0.0, 100.f);
1140         RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere.");
1141
1142         prop= RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
1143         RNA_def_property_enum_sdna(prop, NULL, "mode");
1144         RNA_def_property_enum_items(prop, distance_items);
1145         RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow.");
1146 }
1147
1148 /* base struct for constraints */
1149 void RNA_def_constraint(BlenderRNA *brna)
1150 {
1151         StructRNA *srna;
1152         PropertyRNA *prop;
1153         
1154         static EnumPropertyItem type_items[] ={
1155                 {CONSTRAINT_TYPE_NULL, "NULL", "Null", ""},
1156                 {CONSTRAINT_TYPE_CHILDOF, "CHILDOF", "Child Of", ""},
1157                 {CONSTRAINT_TYPE_TRACKTO, "TRACKTO", "Track To", ""},
1158                 {CONSTRAINT_TYPE_KINEMATIC, "IK", "IK", ""},
1159                 {CONSTRAINT_TYPE_FOLLOWPATH, "FOLLOWPATH", "Follow Path", ""},
1160                 {CONSTRAINT_TYPE_ROTLIMIT, "LIMITROT", "Limit Rotation", ""},
1161                 {CONSTRAINT_TYPE_LOCLIMIT, "LIMITLOC", "Limit Location", ""},
1162                 {CONSTRAINT_TYPE_SIZELIMIT, "LIMITSCALE", "Limit Scale", ""},
1163                 {CONSTRAINT_TYPE_ROTLIKE, "COPYROT", "Copy Rotation", ""},
1164                 {CONSTRAINT_TYPE_LOCLIKE, "COPYLOC", "Copy Location", ""},
1165                 {CONSTRAINT_TYPE_SIZELIKE, "COPYSCALE", "Copy Scale", ""},
1166                 {CONSTRAINT_TYPE_PYTHON, "SCRIPT", "Script", ""},
1167                 {CONSTRAINT_TYPE_ACTION, "ACTION", "Action", ""},
1168                 {CONSTRAINT_TYPE_LOCKTRACK, "LOCKTRACK", "Locked Track", ""},
1169                 {CONSTRAINT_TYPE_DISTLIMIT, "LIMITDIST", "Limit Distance", ""},
1170                 {CONSTRAINT_TYPE_STRETCHTO, "STRETCHTO", "Stretch To", ""},
1171                 {CONSTRAINT_TYPE_MINMAX, "FLOOR", "Floor", ""},
1172                 {CONSTRAINT_TYPE_RIGIDBODYJOINT, "RIGIDBODYJOINT", "Rigid Body Joint", ""},
1173                 {CONSTRAINT_TYPE_CLAMPTO, "CLAMPTO", "Clamp To", ""},
1174                 {CONSTRAINT_TYPE_TRANSFORM, "TRANSFORM", "Transformation", ""},
1175                 {0, NULL, NULL, NULL}};
1176         
1177         /* data */
1178         srna= RNA_def_struct(brna, "Constraint", NULL );
1179         RNA_def_struct_ui_text(srna, "Constraint", "Constraint modifying the transformation of objects and bones.");
1180         RNA_def_struct_refine_func(srna, "rna_ConstraintType_refine");
1181         RNA_def_struct_sdna(srna, "bConstraint");
1182         
1183         /* strings */
1184         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1185         RNA_def_property_ui_text(prop, "Name", "");
1186         RNA_def_struct_name_property(srna, prop);
1187         
1188         /* enums */
1189         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1190         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
1191         RNA_def_property_enum_sdna(prop, NULL, "type");
1192         RNA_def_property_enum_items(prop, type_items);
1193         RNA_def_property_ui_text(prop, "Type", "");
1194         
1195         /* flags */
1196                 // XXX do we want to wrap this?
1197         prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
1198         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
1199         RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI.");
1200         
1201                 // XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
1202         prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
1203         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
1204         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
1205         RNA_def_property_ui_text(prop, "Disabled", "Constraint has invalid settings and will not be evaluated.");
1206         
1207                 // TODO: setting this to true must ensure that all others in stack are turned off too...
1208         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
1209         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
1210         RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
1211         
1212         prop= RNA_def_property(srna, "own_ipo", PROP_BOOLEAN, PROP_NONE);
1213         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_OWN_IPO);
1214         RNA_def_property_ui_text(prop, "Local IPO", "Constraint has its own IPO data.");
1215         
1216         prop= RNA_def_property(srna, "proxy_local", PROP_BOOLEAN, PROP_NONE);
1217         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
1218         RNA_def_property_ui_text(prop, "Proxy Local", "Constraint was added in this proxy instance (i.e. did not belong to source Armature).");
1219         
1220         /* pointers */
1221         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
1222         RNA_def_property_ui_text(prop, "IPO", "Local IPO data.");
1223
1224         rna_def_constrainttarget(brna);
1225
1226         rna_def_constraint_childof(brna);
1227         rna_def_constraint_python(brna);
1228         rna_def_constraint_stretch_to(brna);
1229         rna_def_constraint_follow_path(brna);
1230         rna_def_constraint_locked_track(brna);
1231         rna_def_constraint_action(brna);
1232         rna_def_constraint_size_like(brna);
1233         rna_def_constraint_locate_like(brna);
1234         rna_def_constraint_rotate_like(brna);
1235         rna_def_constraint_minmax(brna);
1236         rna_def_constraint_track_to(brna);
1237         rna_def_constraint_kinematic(brna);
1238         rna_def_constraint_rigid_body_joint(brna);
1239         rna_def_constraint_clamp_to(brna);
1240         rna_def_constraint_distance_limit(brna);
1241         rna_def_constraint_size_limit(brna);
1242         rna_def_constraint_rotation_limit(brna);
1243         rna_def_constraint_location_limit(brna);
1244         rna_def_constraint_transform(brna);
1245 }
1246
1247 #endif