Merging r39191 through r39250 from trunk into soc-2011-tomato
[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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * Contributor(s): Blender Foundation (2008), Joshua Leung, Roland Hess
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 /** \file blender/makesrna/intern/rna_constraint.c
26  *  \ingroup RNA
27  */
28
29
30 #include <stdlib.h>
31
32 #include "RNA_define.h"
33
34 #include "rna_internal.h"
35
36 #include "BLI_math.h"
37
38 #include "DNA_action_types.h"
39 #include "DNA_constraint_types.h"
40 #include "DNA_modifier_types.h"
41 #include "DNA_object_types.h"
42 #include "DNA_scene_types.h"
43
44 #include "ED_object.h"
45 #include "WM_types.h"
46
47 EnumPropertyItem constraint_type_items[] ={
48         {0, "", 0, "Transform", ""},
49         {CONSTRAINT_TYPE_LOCLIKE, "COPY_LOCATION", ICON_CONSTRAINT_DATA, "Copy Location", ""},
50         {CONSTRAINT_TYPE_ROTLIKE, "COPY_ROTATION", ICON_CONSTRAINT_DATA, "Copy Rotation", ""},
51         {CONSTRAINT_TYPE_SIZELIKE, "COPY_SCALE", ICON_CONSTRAINT_DATA, "Copy Scale", ""},
52         {CONSTRAINT_TYPE_TRANSLIKE, "COPY_TRANSFORMS", ICON_CONSTRAINT_DATA, "Copy Transforms", ""},
53         {CONSTRAINT_TYPE_DISTLIMIT, "LIMIT_DISTANCE", ICON_CONSTRAINT_DATA, "Limit Distance", ""},
54         {CONSTRAINT_TYPE_LOCLIMIT, "LIMIT_LOCATION", ICON_CONSTRAINT_DATA, "Limit Location", ""},
55         {CONSTRAINT_TYPE_ROTLIMIT, "LIMIT_ROTATION", ICON_CONSTRAINT_DATA, "Limit Rotation", ""},
56         {CONSTRAINT_TYPE_SIZELIMIT, "LIMIT_SCALE", ICON_CONSTRAINT_DATA, "Limit Scale", ""},
57         {CONSTRAINT_TYPE_SAMEVOL, "MAINTAIN_VOLUME", ICON_CONSTRAINT_DATA, "Maintain Volume", ""},
58         {CONSTRAINT_TYPE_TRANSFORM, "TRANSFORM", ICON_CONSTRAINT_DATA, "Transformation", ""},
59         {0, "", 0, "Tracking", ""},
60         {CONSTRAINT_TYPE_CLAMPTO, "CLAMP_TO", ICON_CONSTRAINT_DATA, "Clamp To", ""},
61         {CONSTRAINT_TYPE_DAMPTRACK, "DAMPED_TRACK", ICON_CONSTRAINT_DATA, "Damped Track", "Tracking by taking the shortest path"},
62         {CONSTRAINT_TYPE_KINEMATIC, "IK", ICON_CONSTRAINT_DATA, "Inverse Kinematics", ""},
63         {CONSTRAINT_TYPE_LOCKTRACK, "LOCKED_TRACK", ICON_CONSTRAINT_DATA, "Locked Track", "Tracking along a single axis"},
64         {CONSTRAINT_TYPE_SPLINEIK, "SPLINE_IK", ICON_CONSTRAINT_DATA, "Spline IK", ""},
65         {CONSTRAINT_TYPE_STRETCHTO, "STRETCH_TO",ICON_CONSTRAINT_DATA, "Stretch To", ""},
66         {CONSTRAINT_TYPE_TRACKTO, "TRACK_TO", ICON_CONSTRAINT_DATA, "Track To", "Legacy tracking constraint prone to twisting artifacts"},
67         {0, "", 0, "Relationship", ""},
68         {CONSTRAINT_TYPE_ACTION, "ACTION", ICON_CONSTRAINT_DATA, "Action", ""},
69         {CONSTRAINT_TYPE_CAMERASOLVER, "CAMERA_SOLVER", ICON_CONSTRAINT_DATA, "Camera Solver", ""},
70         {CONSTRAINT_TYPE_CHILDOF, "CHILD_OF", ICON_CONSTRAINT_DATA, "Child Of", ""},
71         {CONSTRAINT_TYPE_MINMAX, "FLOOR", ICON_CONSTRAINT_DATA, "Floor", ""},
72         {CONSTRAINT_TYPE_FOLLOWPATH, "FOLLOW_PATH", ICON_CONSTRAINT_DATA, "Follow Path", ""},
73         {CONSTRAINT_TYPE_FOLLOWTRACK, "FOLLOW_TRACK", ICON_CONSTRAINT_DATA, "Follow Track", ""},
74         {CONSTRAINT_TYPE_PIVOT, "PIVOT", ICON_CONSTRAINT_DATA, "Pivot", ""},
75         {CONSTRAINT_TYPE_RIGIDBODYJOINT, "RIGID_BODY_JOINT", ICON_CONSTRAINT_DATA, "Rigid Body Joint", ""},
76         {CONSTRAINT_TYPE_PYTHON, "SCRIPT", ICON_CONSTRAINT_DATA, "Script", ""},
77         {CONSTRAINT_TYPE_SHRINKWRAP, "SHRINKWRAP", ICON_CONSTRAINT_DATA, "Shrinkwrap", ""},
78         {0, NULL, 0, NULL, NULL}};
79
80 static EnumPropertyItem target_space_pchan_items[] = {
81         {0, "WORLD", 0, "World Space", "The transformation of the target is evaluated relative to the world coordinate system"},
82         {2, "POSE", 0, "Pose Space", "The transformation of the target is only evaluated in the Pose Space, the target armature object transformation is ignored"},
83         {3, "LOCAL_WITH_PARENT", 0, "Local With Parent", "The transformation of the target bone is evaluated relative its local coordinate system, with the parent transformation added"},
84         {1, "LOCAL", 0, "Local Space", "The transformation of the target is evaluated relative to its local coordinate system"},
85         {0, NULL, 0, NULL, NULL}};
86
87 static EnumPropertyItem owner_space_pchan_items[] = {
88         {0, "WORLD", 0, "World Space", "The constraint is applied relative to the world coordinate system"},
89         {2, "POSE", 0, "Pose Space", "The constraint is applied in Pose Space, the object transformation is ignored"},
90         {3, "LOCAL_WITH_PARENT", 0, "Local With Parent", "The constraint is applied relative to the local coordinate system of the object, with the parent transformation added"},
91         {1, "LOCAL", 0, "Local Space", "The constraint is applied relative to the local coordinate sytem of the object"},
92         {0, NULL, 0, NULL, NULL}};
93
94 #ifdef RNA_RUNTIME
95
96 static EnumPropertyItem space_object_items[] = {
97         {0, "WORLD", 0, "World Space", "The transformation of the target is evaluated relative to the world coordinate system"},
98         {1, "LOCAL", 0, "Local Space", "The transformation of the target is evaluated relative to its local coordinate system"},
99         {0, NULL, 0, NULL, NULL}};
100
101 #include "BKE_animsys.h"
102 #include "BKE_action.h"
103 #include "BKE_constraint.h"
104 #include "BKE_context.h"
105 #include "BKE_depsgraph.h"
106
107
108 static StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr)
109 {
110         bConstraint *con= (bConstraint*)ptr->data;
111
112         switch(con->type) {
113                 case CONSTRAINT_TYPE_CHILDOF:
114                         return &RNA_ChildOfConstraint;
115                 case CONSTRAINT_TYPE_TRACKTO:
116                         return &RNA_TrackToConstraint;
117                 case CONSTRAINT_TYPE_KINEMATIC:
118                         return &RNA_KinematicConstraint;
119                 case CONSTRAINT_TYPE_FOLLOWPATH:
120                         return &RNA_FollowPathConstraint;
121                 case CONSTRAINT_TYPE_ROTLIKE:
122                         return &RNA_CopyRotationConstraint;
123                 case CONSTRAINT_TYPE_LOCLIKE:
124                         return &RNA_CopyLocationConstraint;
125                 case CONSTRAINT_TYPE_SIZELIKE:
126                         return &RNA_CopyScaleConstraint;
127                 case CONSTRAINT_TYPE_SAMEVOL:
128                         return &RNA_MaintainVolumeConstraint;
129                 case CONSTRAINT_TYPE_PYTHON:
130                         return &RNA_PythonConstraint;
131                 case CONSTRAINT_TYPE_ACTION:
132                         return &RNA_ActionConstraint;
133                 case CONSTRAINT_TYPE_LOCKTRACK:
134                         return &RNA_LockedTrackConstraint;
135                 case CONSTRAINT_TYPE_STRETCHTO:
136                         return &RNA_StretchToConstraint;
137                 case CONSTRAINT_TYPE_MINMAX:
138                         return &RNA_FloorConstraint;
139                 case CONSTRAINT_TYPE_RIGIDBODYJOINT:
140                         return &RNA_RigidBodyJointConstraint;
141                 case CONSTRAINT_TYPE_CLAMPTO:
142                         return &RNA_ClampToConstraint;                  
143                 case CONSTRAINT_TYPE_TRANSFORM:
144                         return &RNA_TransformConstraint;
145                 case CONSTRAINT_TYPE_ROTLIMIT:
146                         return &RNA_LimitRotationConstraint;
147                 case CONSTRAINT_TYPE_LOCLIMIT:
148                         return &RNA_LimitLocationConstraint;
149                 case CONSTRAINT_TYPE_SIZELIMIT:
150                         return &RNA_LimitScaleConstraint;
151                 case CONSTRAINT_TYPE_DISTLIMIT:
152                         return &RNA_LimitDistanceConstraint;
153                 case CONSTRAINT_TYPE_SHRINKWRAP:
154                         return &RNA_ShrinkwrapConstraint;
155                 case CONSTRAINT_TYPE_DAMPTRACK:
156                         return &RNA_DampedTrackConstraint;
157                 case CONSTRAINT_TYPE_SPLINEIK:
158                         return &RNA_SplineIKConstraint;
159                 case CONSTRAINT_TYPE_TRANSLIKE:
160                         return &RNA_CopyTransformsConstraint;
161                 case CONSTRAINT_TYPE_PIVOT:
162                         return &RNA_PivotConstraint;
163                 case CONSTRAINT_TYPE_FOLLOWTRACK:
164                         return &RNA_FollowTrackConstraint;
165                 case CONSTRAINT_TYPE_CAMERASOLVER:
166                         return &RNA_CameraSolverConstraint;
167                 default:
168                         return &RNA_UnknownType;
169         }
170 }
171
172 static void rna_Constraint_name_set(PointerRNA *ptr, const char *value)
173 {
174         bConstraint *con= ptr->data;
175         char oldname[sizeof(con->name)];
176         
177         /* make a copy of the old name first */
178         BLI_strncpy(oldname, con->name, sizeof(con->name));
179         
180         /* copy the new name into the name slot */
181         BLI_strncpy(con->name, value, sizeof(con->name));
182         
183         /* make sure name is unique */
184         if (ptr->id.data) {
185                 Object *ob= ptr->id.data;
186                 ListBase *list = get_constraint_lb(ob, con, NULL);
187                 
188                 /* if we have the list, check for unique name, otherwise give up */
189                 if (list)
190                         unique_constraint_name(con, list); 
191         }
192         
193         /* fix all the animation data which may link to this */
194         BKE_all_animdata_fix_paths_rename("constraints", oldname, con->name);
195 }
196
197 static char *rna_Constraint_path(PointerRNA *ptr)
198 {
199         Object *ob= ptr->id.data;
200         bConstraint *con= ptr->data;
201         bPoseChannel *pchan;
202         ListBase *lb = get_constraint_lb(ob, con, &pchan);
203
204         if(lb == NULL)
205                 printf("rna_Constraint_path: internal error, constraint '%s' not found in object '%s'\n", con->name, ob->id.name);
206
207         if(pchan) {
208                 return BLI_sprintfN("pose.bones[\"%s\"].constraints[\"%s\"]", pchan->name, con->name);
209         }
210         
211         return BLI_sprintfN("constraints[\"%s\"]", con->name);
212 }
213
214 static void rna_Constraint_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
215 {
216         ED_object_constraint_update(ptr->id.data);
217 }
218
219 static void rna_Constraint_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
220 {
221         ED_object_constraint_dependency_update(bmain, scene, ptr->id.data);
222 }
223
224 static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
225 {
226         Object *ob= ptr->id.data;
227
228         if(ob->pose)
229                 ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK);
230         
231         rna_Constraint_update(bmain, scene, ptr);
232 }
233
234 static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value)
235 {
236         bConstraint *con = ptr->data;
237         bKinematicConstraint *ikdata = con->data;
238
239         if (ikdata->type != value) {
240                 // the type of IK constraint has changed, set suitable default values
241                 // in case constraints reuse same fields incompatible
242                 switch (value) {
243                 case CONSTRAINT_IK_COPYPOSE:
244                         break;
245                 case CONSTRAINT_IK_DISTANCE:
246                         break;
247                 }
248                 ikdata->type = value;
249         }
250 }
251
252 static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), int *UNUSED(free))
253 {
254         Object *ob= (Object*)ptr->id.data;
255         bConstraint *con= (bConstraint*)ptr->data;
256         
257         if(BLI_findindex(&ob->constraints, con) == -1)
258                 return owner_space_pchan_items;
259         else /* object */
260                 return space_object_items;
261 }
262
263 static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), int *UNUSED(free))
264 {
265         bConstraint *con= (bConstraint*)ptr->data;
266         bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
267         ListBase targets = {NULL, NULL};
268         bConstraintTarget *ct;
269         
270         if(cti && cti->get_constraint_targets) {
271                 cti->get_constraint_targets(con, &targets);
272                 
273                 for(ct=targets.first; ct; ct= ct->next)
274                         if(ct->tar && ct->tar->type == OB_ARMATURE)
275                                 break;
276                 
277                 if(cti->flush_constraint_targets)
278                         cti->flush_constraint_targets(con, &targets, 1);
279
280                 if(ct)
281                         return target_space_pchan_items;
282         }
283
284         return space_object_items;
285 }
286
287 static void rna_ActionConstraint_minmax_range(PointerRNA *ptr, float *min, float *max)
288 {
289         bConstraint *con= (bConstraint*)ptr->data;
290         bActionConstraint *acon = (bActionConstraint *)con->data;
291
292         /* 0, 1, 2 = magic numbers for rotX, rotY, rotZ */
293         if (ELEM3(acon->type, 0, 1, 2)) {
294                 *min= -90.f;
295                 *max= 90.f;
296         } else {
297                 *min= -1000.f;
298                 *max= 1000.f;
299         }
300 }
301
302 static int rna_SplineIKConstraint_joint_bindings_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
303 {
304         bConstraint *con= (bConstraint*)ptr->data;
305         bSplineIKConstraint *ikData= (bSplineIKConstraint *)con->data;
306
307         if (ikData)
308                 length[0]= ikData->numpoints;
309         else
310                 length[0]= 256; /* for raw_access, untested */
311
312         return length[0];
313 }
314
315 static void rna_SplineIKConstraint_joint_bindings_get(PointerRNA *ptr, float *values)
316 {
317         bConstraint *con= (bConstraint*)ptr->data;
318         bSplineIKConstraint *ikData= (bSplineIKConstraint *)con->data;
319         
320         memcpy(values, ikData->points, ikData->numpoints * sizeof(float));
321 }
322
323 static void rna_SplineIKConstraint_joint_bindings_set(PointerRNA *ptr, const float *values)
324 {
325         bConstraint *con= (bConstraint*)ptr->data;
326         bSplineIKConstraint *ikData= (bSplineIKConstraint *)con->data;
327         
328         memcpy(ikData->points, values, ikData->numpoints * sizeof(float));
329 }
330
331 #else
332
333 EnumPropertyItem constraint_distance_items[] = {
334         {LIMITDIST_INSIDE, "LIMITDIST_INSIDE", 0, "Inside", "The object is constrained inside a virtual sphere around the target object, with a radius defined by the limit distance"},
335         {LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", 0, "Outside", "The object is constrained outside a virtual sphere around the target object, with a radius defined by the limit distance"},
336         {LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", 0, "On Surface", "The object is constrained on the surface of a virtual sphere around the target object, with a radius defined by the limit distance"},
337         {0, NULL, 0, NULL, NULL}
338 };
339
340
341 static void rna_def_constrainttarget(BlenderRNA *brna)
342 {
343         StructRNA *srna;
344         PropertyRNA *prop;
345
346         srna= RNA_def_struct(brna, "ConstraintTarget", NULL);
347         RNA_def_struct_ui_text(srna, "Constraint Target", "Target object for multi-target constraints");
348         RNA_def_struct_sdna(srna, "bConstraintTarget");
349
350         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
351         RNA_def_property_pointer_sdna(prop, NULL, "tar");
352         RNA_def_property_ui_text(prop, "Target", "Target Object");
353         RNA_def_property_flag(prop, PROP_EDITABLE);
354         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
355
356         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
357         RNA_def_property_string_sdna(prop, NULL, "subtarget");
358         RNA_def_property_ui_text(prop, "Sub-Target", "");
359         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
360
361         // space, flag and type still to do 
362 }
363
364 static void rna_def_constraint_childof(BlenderRNA *brna)
365 {
366         static int rna_matrix_dimsize_4x4[]= {4, 4};
367         StructRNA *srna;
368         PropertyRNA *prop;
369
370         srna= RNA_def_struct(brna, "ChildOfConstraint", "Constraint"); 
371         RNA_def_struct_ui_text(srna, "Child Of Constraint", "Creates constraint-based parent-child relationship"); 
372         RNA_def_struct_sdna_from(srna, "bChildOfConstraint", "data"); 
373
374         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
375         RNA_def_property_pointer_sdna(prop, NULL, "tar");
376         RNA_def_property_ui_text(prop, "Target", "Target Object");
377         RNA_def_property_flag(prop, PROP_EDITABLE);
378         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
379
380         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
381         RNA_def_property_string_sdna(prop, NULL, "subtarget");
382         RNA_def_property_ui_text(prop, "Sub-Target", "");
383         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
384
385         prop= RNA_def_property(srna, "use_location_x", PROP_BOOLEAN, PROP_NONE);
386         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCX);
387         RNA_def_property_ui_text(prop, "Location X", "Use X Location of Parent");
388         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
389
390         prop= RNA_def_property(srna, "use_location_y", PROP_BOOLEAN, PROP_NONE);
391         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCY);
392         RNA_def_property_ui_text(prop, "Location Y", "Use Y Location of Parent");
393         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
394
395         prop= RNA_def_property(srna, "use_location_z", PROP_BOOLEAN, PROP_NONE);
396         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCZ);
397         RNA_def_property_ui_text(prop, "Location Z", "Use Z Location of Parent");
398         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
399
400         prop= RNA_def_property(srna, "use_rotation_x", PROP_BOOLEAN, PROP_NONE);
401         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTX);
402         RNA_def_property_ui_text(prop, "Rotation X", "Use X Rotation of Parent");
403         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
404
405         prop= RNA_def_property(srna, "use_rotation_y", PROP_BOOLEAN, PROP_NONE);
406         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTY);
407         RNA_def_property_ui_text(prop, "Rotation Y", "Use Y Rotation of Parent");
408         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
409
410         prop= RNA_def_property(srna, "use_rotation_z", PROP_BOOLEAN, PROP_NONE);
411         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTZ);
412         RNA_def_property_ui_text(prop, "Rotation Z", "Use Z Rotation of Parent");
413         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
414
415         prop= RNA_def_property(srna, "use_scale_x", PROP_BOOLEAN, PROP_NONE);
416         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEX);
417         RNA_def_property_ui_text(prop, "Scale X", "Use X Scale of Parent");
418         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
419
420         prop= RNA_def_property(srna, "use_scale_y", PROP_BOOLEAN, PROP_NONE);
421         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEY);
422         RNA_def_property_ui_text(prop, "Scale Y", "Use Y Scale of Parent");
423         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
424
425         prop= RNA_def_property(srna, "use_scale_z", PROP_BOOLEAN, PROP_NONE);
426         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEZ);
427         RNA_def_property_ui_text(prop, "Scale Z", "Use Z Scale of Parent");
428         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
429         
430         prop= RNA_def_property(srna, "inverse_matrix", PROP_FLOAT, PROP_MATRIX);
431         RNA_def_property_float_sdna(prop, NULL, "invmat");
432         RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
433         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
434         RNA_def_property_ui_text(prop, "Inverse Matrix", "Transformation matrix to apply before");
435         
436 }
437
438 static void rna_def_constraint_python(BlenderRNA *brna)
439 {
440         StructRNA *srna;
441         PropertyRNA *prop;
442
443         srna= RNA_def_struct(brna, "PythonConstraint", "Constraint");
444         RNA_def_struct_ui_text(srna, "Python Constraint", "Uses Python script for constraint evaluation");
445         RNA_def_struct_sdna_from(srna, "bPythonConstraint", "data");
446
447         prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
448         RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
449         RNA_def_property_struct_type(prop, "ConstraintTarget");
450         RNA_def_property_ui_text(prop, "Targets", "Target Objects");
451
452         prop= RNA_def_property(srna, "target_count", PROP_INT, PROP_NONE);
453         RNA_def_property_int_sdna(prop, NULL, "tarnum");
454         RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed");
455         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
456
457         prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
458         RNA_def_property_ui_text(prop, "Script", "The text object that contains the Python script");
459         RNA_def_property_flag(prop, PROP_EDITABLE);
460         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
461
462         prop= RNA_def_property(srna, "use_targets", PROP_BOOLEAN, PROP_NONE);
463         RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_USETARGETS);
464         RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel");
465         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
466
467         prop= RNA_def_property(srna, "has_script_error", PROP_BOOLEAN, PROP_NONE);
468         RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
469         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
470         RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error");
471 }
472
473 static void rna_def_constraint_kinematic(BlenderRNA *brna)
474 {
475         StructRNA *srna;
476         PropertyRNA *prop;
477
478         static EnumPropertyItem constraint_ik_axisref_items[] ={
479                 {0, "BONE", 0, "Bone", ""},
480                 {CONSTRAINT_IK_TARGETAXIS, "TARGET", 0, "Target", ""},
481                 {0, NULL, 0, NULL, NULL},
482         };
483
484         static EnumPropertyItem constraint_ik_type_items[] ={
485                 {CONSTRAINT_IK_COPYPOSE, "COPY_POSE", 0, "Copy Pose", ""},
486                 {CONSTRAINT_IK_DISTANCE, "DISTANCE", 0, "Distance", ""},
487                 {0, NULL, 0, NULL, NULL},
488         };
489
490         srna= RNA_def_struct(brna, "KinematicConstraint", "Constraint");
491         RNA_def_struct_ui_text(srna, "Kinematic Constraint", "Inverse Kinematics");
492         RNA_def_struct_sdna_from(srna, "bKinematicConstraint", "data");
493
494         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
495         RNA_def_property_pointer_sdna(prop, NULL, "tar");
496         RNA_def_property_ui_text(prop, "Target", "Target Object");
497         RNA_def_property_flag(prop, PROP_EDITABLE);
498         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
499
500         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
501         RNA_def_property_string_sdna(prop, NULL, "subtarget");
502         RNA_def_property_ui_text(prop, "Sub-Target", "");
503         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
504
505         prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
506         RNA_def_property_range(prop, 1, 10000);
507         RNA_def_property_ui_text(prop, "Iterations", "Maximum number of solving iterations");
508         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
509
510         prop= RNA_def_property(srna, "pole_target", PROP_POINTER, PROP_NONE);
511         RNA_def_property_pointer_sdna(prop, NULL, "poletar");
512         RNA_def_property_ui_text(prop, "Pole Target", "Object for pole rotation");
513         RNA_def_property_flag(prop, PROP_EDITABLE);
514         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
515
516         prop= RNA_def_property(srna, "pole_subtarget", PROP_STRING, PROP_NONE);
517         RNA_def_property_string_sdna(prop, NULL, "polesubtarget");
518         RNA_def_property_ui_text(prop, "Pole Sub-Target", "");
519         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
520
521         prop= RNA_def_property(srna, "pole_angle", PROP_FLOAT, PROP_ANGLE);
522         RNA_def_property_float_sdna(prop, NULL, "poleangle");
523         RNA_def_property_range(prop, -M_PI, M_PI);
524         RNA_def_property_ui_text(prop, "Pole Angle", "Pole rotation offset");
525         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
526
527         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
528         RNA_def_property_range(prop, 0.01, 1.f);
529         RNA_def_property_ui_text(prop, "Weight", "For Tree-IK: Weight of position control for this target");
530
531         prop= RNA_def_property(srna, "orient_weight", PROP_FLOAT, PROP_NONE);
532         RNA_def_property_float_sdna(prop, NULL, "orientweight");
533         RNA_def_property_range(prop, 0.01, 1.f);
534         RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target");
535         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
536
537         prop= RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
538         RNA_def_property_int_sdna(prop, NULL, "rootbone");
539         RNA_def_property_range(prop, 0, 255);
540         RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones");
541         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
542
543         prop= RNA_def_property(srna, "use_tail", PROP_BOOLEAN, PROP_NONE);
544         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_TIP);
545         RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain");
546         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
547
548         prop= RNA_def_property(srna, "reference_axis", PROP_ENUM, PROP_NONE);
549         RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
550         RNA_def_property_enum_items(prop, constraint_ik_axisref_items);
551         RNA_def_property_ui_text(prop, "Axis Reference", "Constraint axis Lock options relative to Bone or Target reference");
552         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
553
554         prop= RNA_def_property(srna, "use_location", PROP_BOOLEAN, PROP_NONE);
555         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_POS);
556         RNA_def_property_ui_text(prop, "Position", "Chain follows position of target");
557         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
558
559         prop= RNA_def_property(srna, "lock_location_x", PROP_BOOLEAN, PROP_NONE);
560         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_X);
561         RNA_def_property_ui_text(prop, "Lock X Pos", "Constraint position along X axis");
562         RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
563
564         prop= RNA_def_property(srna, "lock_location_y", PROP_BOOLEAN, PROP_NONE);
565         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Y);
566         RNA_def_property_ui_text(prop, "Lock Y Pos", "Constraint position along Y axis");
567         RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
568
569         prop= RNA_def_property(srna, "lock_location_z", PROP_BOOLEAN, PROP_NONE);
570         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Z);
571         RNA_def_property_ui_text(prop, "Lock Z Pos", "Constraint position along Z axis");
572         RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
573
574         prop= RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
575         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_ROT);
576         RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target");
577         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
578
579         prop= RNA_def_property(srna, "lock_rotation_x", PROP_BOOLEAN, PROP_NONE);
580         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_X);
581         RNA_def_property_ui_text(prop, "Lock X Rot", "Constraint rotation along X axis");
582         RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
583
584         prop= RNA_def_property(srna, "lock_rotation_y", PROP_BOOLEAN, PROP_NONE);
585         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Y);
586         RNA_def_property_ui_text(prop, "Lock Y Rot", "Constraint rotation along Y axis");
587         RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
588
589         prop= RNA_def_property(srna, "lock_rotation_z", PROP_BOOLEAN, PROP_NONE);
590         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Z);
591         RNA_def_property_ui_text(prop, "Lock Z Rot", "Constraint rotation along Z axis");
592         RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
593
594         prop= RNA_def_property(srna, "use_target", PROP_BOOLEAN, PROP_NONE);
595         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_AUTO);
596         RNA_def_property_ui_text(prop, "Target", "Disable for targetless IK");
597         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
598
599         prop= RNA_def_property(srna, "use_stretch", PROP_BOOLEAN, PROP_NONE);
600         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_STRETCH);
601         RNA_def_property_ui_text(prop, "Stretch", "Enable IK Stretching");
602         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
603
604         prop= RNA_def_property(srna, "ik_type", PROP_ENUM, PROP_NONE);
605         RNA_def_property_enum_sdna(prop, NULL, "type");
606         RNA_def_property_enum_funcs(prop, NULL, "rna_Constraint_ik_type_set", NULL);
607         RNA_def_property_enum_items(prop, constraint_ik_type_items);
608         RNA_def_property_ui_text(prop, "IK Type", "");
609         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
610
611         prop= RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
612         RNA_def_property_enum_sdna(prop, NULL, "mode");
613         RNA_def_property_enum_items(prop, constraint_distance_items);
614         RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow");
615         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
616
617         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
618         RNA_def_property_float_sdna(prop, NULL, "dist");
619         RNA_def_property_range(prop, 0.0, 100.f);
620         RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere");
621         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
622 }
623
624 static void rna_def_constraint_track_to(BlenderRNA *brna)
625 {
626         StructRNA *srna;
627         PropertyRNA *prop;
628
629         static EnumPropertyItem track_items[] = {
630                 {TRACK_X, "TRACK_X", 0, "X", ""},
631                 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
632                 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
633                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
634                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
635                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
636                 {0, NULL, 0, NULL, NULL}};
637
638         static EnumPropertyItem up_items[] = {
639                 {TRACK_X, "UP_X", 0, "X", ""},
640                 {TRACK_Y, "UP_Y", 0, "Y", ""},
641                 {TRACK_Z, "UP_Z", 0, "Z", ""},
642                 {0, NULL, 0, NULL, NULL}};
643
644         srna= RNA_def_struct(brna, "TrackToConstraint", "Constraint");
645         RNA_def_struct_ui_text(srna, "Track To Constraint", "Aims the constrained object toward the target");
646
647         prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
648         RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
649         RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
650         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
651
652         RNA_def_struct_sdna_from(srna, "bTrackToConstraint", "data");
653
654         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
655         RNA_def_property_pointer_sdna(prop, NULL, "tar");
656         RNA_def_property_ui_text(prop, "Target", "Target Object");
657         RNA_def_property_flag(prop, PROP_EDITABLE);
658         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
659
660         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
661         RNA_def_property_string_sdna(prop, NULL, "subtarget");
662         RNA_def_property_ui_text(prop, "Sub-Target", "");
663         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
664
665         prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
666         RNA_def_property_enum_sdna(prop, NULL, "reserved1");
667         RNA_def_property_enum_items(prop, track_items);
668         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
669         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
670
671         prop= RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
672         RNA_def_property_enum_sdna(prop, NULL, "reserved2");
673         RNA_def_property_enum_items(prop, up_items);
674         RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
675         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
676
677         prop= RNA_def_property(srna, "use_target_z", PROP_BOOLEAN, PROP_NONE);
678         RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
679         RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction");
680         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
681 }
682
683 static void rna_def_constraint_locate_like(BlenderRNA *brna)
684 {
685         StructRNA *srna;
686         PropertyRNA *prop;
687
688         srna= RNA_def_struct(brna, "CopyLocationConstraint", "Constraint");
689         RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target");
690
691         prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
692         RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
693         RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
694         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
695
696         RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "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_flag(prop, PROP_EDITABLE);
701         RNA_def_property_ui_text(prop, "Target", "Target Object");
702         RNA_def_property_flag(prop, PROP_EDITABLE);
703         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
704
705         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
706         RNA_def_property_string_sdna(prop, NULL, "subtarget");
707         RNA_def_property_ui_text(prop, "Sub-Target", "");
708         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
709
710         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
711         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
712         RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X location");
713         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
714
715         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
716         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);
717         RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y location");
718         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
719
720         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
721         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z);
722         RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z location");
723         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
724
725         prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
726         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X_INVERT);
727         RNA_def_property_ui_text(prop, "Invert X", "Invert the X location");
728         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
729
730         prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
731         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y_INVERT);
732         RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y location");
733         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
734
735         prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
736         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z_INVERT);
737         RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z location");
738         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
739
740         prop= RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
741         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
742         RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location");
743         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
744 }
745
746 static void rna_def_constraint_rotate_like(BlenderRNA *brna)
747 {
748         StructRNA *srna;
749         PropertyRNA *prop;
750
751         srna= RNA_def_struct(brna, "CopyRotationConstraint", "Constraint");
752         RNA_def_struct_ui_text(srna, "Copy Rotation Constraint", "Copies the rotation of the target");
753         RNA_def_struct_sdna_from(srna, "bRotateLikeConstraint", "data");
754
755         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
756         RNA_def_property_pointer_sdna(prop, NULL, "tar");
757         RNA_def_property_ui_text(prop, "Target", "Target Object");
758         RNA_def_property_flag(prop, PROP_EDITABLE);
759         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
760
761         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
762         RNA_def_property_string_sdna(prop, NULL, "subtarget");
763         RNA_def_property_ui_text(prop, "Sub-Target", "");
764         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
765
766         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
767         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
768         RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X rotation");
769         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
770
771         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
772         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y);
773         RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y rotation");
774         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
775
776         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
777         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z);
778         RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z rotation");
779         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
780
781         prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
782         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X_INVERT);
783         RNA_def_property_ui_text(prop, "Invert X", "Invert the X rotation");
784         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
785
786         prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
787         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y_INVERT);
788         RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y rotation");
789         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
790
791         prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
792         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z_INVERT);
793         RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation");
794         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
795
796         prop= RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
797         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET);
798         RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation");
799         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
800 }
801
802 static void rna_def_constraint_size_like(BlenderRNA *brna)
803 {
804         StructRNA *srna;
805         PropertyRNA *prop;
806
807         srna= RNA_def_struct(brna, "CopyScaleConstraint", "Constraint");
808         RNA_def_struct_ui_text(srna, "Copy Scale Constraint", "Copies the scale of the target");
809         RNA_def_struct_sdna_from(srna, "bSizeLikeConstraint", "data");
810
811         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
812         RNA_def_property_pointer_sdna(prop, NULL, "tar");
813         RNA_def_property_flag(prop, PROP_EDITABLE);
814         RNA_def_property_ui_text(prop, "Target", "Target Object");
815         RNA_def_property_flag(prop, PROP_EDITABLE);
816         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
817
818         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
819         RNA_def_property_string_sdna(prop, NULL, "subtarget");
820         RNA_def_property_ui_text(prop, "Sub-Target", "");
821         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
822
823         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
824         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_X);
825         RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X scale");
826         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
827
828         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
829         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Y);
830         RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y scale");
831         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
832
833         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
834         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Z);
835         RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z scale");
836         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
837
838         prop= RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
839         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET);
840         RNA_def_property_ui_text(prop, "Offset", "Add original scale into copied scale");
841         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
842 }
843
844 static void rna_def_constraint_same_volume(BlenderRNA *brna)
845 {
846         StructRNA *srna;
847         PropertyRNA *prop;
848
849         static EnumPropertyItem volume_items[] = {
850         {SAMEVOL_X, "SAMEVOL_X", 0, "X", ""},
851         {SAMEVOL_Y, "SAMEVOL_Y", 0, "Y", ""},
852         {SAMEVOL_Z, "SAMEVOL_Z", 0, "Z", ""},
853         {0, NULL, 0, NULL, NULL}};
854
855         srna= RNA_def_struct(brna, "MaintainVolumeConstraint", "Constraint");
856         RNA_def_struct_ui_text(srna, "Maintain Volume Constraint", "Maintains a constant volume along a single scaling axis");
857         RNA_def_struct_sdna_from(srna, "bSameVolumeConstraint", "data");
858
859         prop= RNA_def_property(srna, "free_axis", PROP_ENUM, PROP_NONE);
860         RNA_def_property_enum_sdna(prop, NULL, "flag");
861         RNA_def_property_enum_items(prop, volume_items);
862         RNA_def_property_ui_text(prop, "Free Axis", "The free scaling axis of the object");
863         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
864
865         prop= RNA_def_property(srna, "volume", PROP_FLOAT, PROP_DISTANCE);
866         RNA_def_property_range(prop, 0.001, 100.f);
867         RNA_def_property_ui_text(prop, "Volume", "Volume of the bone at rest");
868         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
869
870 }
871
872 static void rna_def_constraint_transform_like(BlenderRNA *brna)
873 {
874         StructRNA *srna;
875         PropertyRNA *prop;
876
877         srna= RNA_def_struct(brna, "CopyTransformsConstraint", "Constraint");
878         RNA_def_struct_ui_text(srna, "Copy Transforms Constraint", "Copies all the transforms of the target");
879         
880         prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
881         RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
882         RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
883         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
884
885         RNA_def_struct_sdna_from(srna, "bTransLikeConstraint", "data");
886
887         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
888         RNA_def_property_pointer_sdna(prop, NULL, "tar");
889         RNA_def_property_ui_text(prop, "Target", "Target Object");
890         RNA_def_property_flag(prop, PROP_EDITABLE);
891         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
892
893         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
894         RNA_def_property_string_sdna(prop, NULL, "subtarget");
895         RNA_def_property_ui_text(prop, "Sub-Target", "");
896         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
897 }
898
899 static void rna_def_constraint_minmax(BlenderRNA *brna)
900 {
901         StructRNA *srna;
902         PropertyRNA *prop;
903
904         static EnumPropertyItem minmax_items[] = {
905                 {TRACK_X, "FLOOR_X", 0, "X", ""},
906                 {TRACK_Y, "FLOOR_Y", 0, "Y", ""},
907                 {TRACK_Z, "FLOOR_Z", 0, "Z", ""},
908                 {TRACK_nX, "FLOOR_NEGATIVE_X", 0, "-X", ""},
909                 {TRACK_nY, "FLOOR_NEGATIVE_Y", 0, "-Y", ""},
910                 {TRACK_nZ, "FLOOR_NEGATIVE_Z", 0, "-Z", ""},
911                 {0, NULL, 0, NULL, NULL}};
912
913         srna= RNA_def_struct(brna, "FloorConstraint", "Constraint");
914         RNA_def_struct_ui_text(srna, "Floor Constraint", "Uses the target object for location limitation");
915         RNA_def_struct_sdna_from(srna, "bMinMaxConstraint","data");
916
917         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
918         RNA_def_property_pointer_sdna(prop, NULL, "tar");
919         RNA_def_property_ui_text(prop, "Target", "Target Object");
920         RNA_def_property_flag(prop, PROP_EDITABLE);
921         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
922
923         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
924         RNA_def_property_string_sdna(prop, NULL, "subtarget");
925         RNA_def_property_ui_text(prop, "Sub-Target", "");
926         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
927
928         prop= RNA_def_property(srna, "floor_location", PROP_ENUM, PROP_NONE);
929         RNA_def_property_enum_sdna(prop, NULL, "minmaxflag");
930         RNA_def_property_enum_items(prop, minmax_items);
931         RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through");
932         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
933
934         prop= RNA_def_property(srna, "use_sticky", PROP_BOOLEAN, PROP_NONE);
935         RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
936         RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained");
937         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
938
939         prop= RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
940         RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_USEROT);
941         RNA_def_property_ui_text(prop, "Use Rotation", "Use the target's rotation to determine floor");
942         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
943
944         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
945         RNA_def_property_range(prop, 0.0, 100.f);
946         RNA_def_property_ui_text(prop, "Offset", "Offset of floor from object origin");
947         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
948 }
949
950 static void rna_def_constraint_action(BlenderRNA *brna)
951 {
952         StructRNA *srna;
953         PropertyRNA *prop;
954
955         static EnumPropertyItem transform_channel_items[] = {
956                 {20, "LOCATION_X", 0, "Location X", ""},
957                 {21, "LOCATION_Y", 0, "Location Y", ""},
958                 {22, "LOCATION_Z", 0, "Location Z", ""},
959                 {00, "ROTATION_X", 0, "Rotation X", ""},
960                 {01, "ROTATION_Y", 0, "Rotation Y", ""},
961                 {02, "ROTATION_Z", 0, "Rotation Z", ""},
962                 {10, "SCALE_X", 0, "Scale X", ""},
963                 {11, "SCALE_Y", 0, "Scale Y", ""},
964                 {12, "SCALE_Z", 0, "Scale Z", ""},
965                 {0, NULL, 0, NULL, NULL}};
966
967         srna= RNA_def_struct(brna, "ActionConstraint", "Constraint");
968         RNA_def_struct_ui_text(srna, "Action Constraint", "Map an action to the transform axes of a bone");
969         RNA_def_struct_sdna_from(srna, "bActionConstraint", "data");
970
971         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
972         RNA_def_property_pointer_sdna(prop, NULL, "tar");
973         RNA_def_property_ui_text(prop, "Target", "Target Object");
974         RNA_def_property_flag(prop, PROP_EDITABLE);
975         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
976
977         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
978         RNA_def_property_string_sdna(prop, NULL, "subtarget");
979         RNA_def_property_ui_text(prop, "Sub-Target", "");
980         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
981
982         prop= RNA_def_property(srna, "transform_channel", PROP_ENUM, PROP_NONE);
983         RNA_def_property_enum_sdna(prop, NULL, "type");
984         RNA_def_property_enum_items(prop, transform_channel_items);
985         RNA_def_property_ui_text(prop, "Transform Channel", "Transformation channel from the target that is used to key the Action");
986         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
987
988         prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
989         RNA_def_property_pointer_sdna(prop, NULL, "act");
990         RNA_def_property_ui_text(prop, "Action", "The constraining action");
991         RNA_def_property_flag(prop, PROP_EDITABLE);
992         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
993
994         prop= RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
995         RNA_def_property_int_sdna(prop, NULL, "start");
996         RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
997         RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use");
998         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
999
1000         prop= RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
1001         RNA_def_property_int_sdna(prop, NULL, "end");
1002         RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
1003         RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use");
1004         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1005
1006         prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
1007         RNA_def_property_float_sdna(prop, NULL, "max");
1008         RNA_def_property_range(prop, -1000.f, 1000.f);
1009         RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range");
1010         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1011         RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
1012
1013         prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
1014         RNA_def_property_float_sdna(prop, NULL, "min");
1015         RNA_def_property_range(prop, -1000.f, 1000.f);
1016         RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range");
1017         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1018         RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
1019 }
1020
1021 static void rna_def_constraint_locked_track(BlenderRNA *brna)
1022 {
1023         StructRNA *srna;
1024         PropertyRNA *prop;
1025
1026         static EnumPropertyItem locktrack_items[] = {
1027                 {TRACK_X, "TRACK_X", 0, "X", ""},
1028                 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
1029                 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
1030                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
1031                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
1032                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
1033                 {0, NULL, 0, NULL, NULL}};
1034
1035         static EnumPropertyItem lock_items[] = {
1036                 {TRACK_X, "LOCK_X", 0, "X", ""},
1037                 {TRACK_Y, "LOCK_Y", 0, "Y", ""},
1038                 {TRACK_Z, "LOCK_Z", 0, "Z", ""},
1039                 {0, NULL, 0, NULL, NULL}};
1040
1041         srna= RNA_def_struct(brna, "LockedTrackConstraint", "Constraint");
1042         RNA_def_struct_ui_text(srna, "Locked Track Constraint", "Points toward the target along the track axis, while locking the other axis");
1043         RNA_def_struct_sdna_from(srna, "bLockTrackConstraint", "data");
1044
1045         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1046         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1047         RNA_def_property_ui_text(prop, "Target", "Target Object");
1048         RNA_def_property_flag(prop, PROP_EDITABLE);
1049         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1050
1051         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1052         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1053         RNA_def_property_ui_text(prop, "Sub-Target", "");
1054         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1055
1056         prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
1057         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
1058         RNA_def_property_enum_items(prop, locktrack_items);
1059         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
1060         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1061
1062         prop= RNA_def_property(srna, "lock_axis", PROP_ENUM, PROP_NONE);
1063         RNA_def_property_enum_sdna(prop, NULL, "lockflag");
1064         RNA_def_property_enum_items(prop, lock_items);
1065         RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward");
1066         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1067 }
1068
1069 static void rna_def_constraint_follow_path(BlenderRNA *brna)
1070 {
1071         StructRNA *srna;
1072         PropertyRNA *prop;
1073
1074         static EnumPropertyItem forwardpath_items[] = {
1075                 {TRACK_X, "FORWARD_X", 0, "X", ""},
1076                 {TRACK_Y, "FORWARD_Y", 0, "Y", ""},
1077                 {TRACK_Z, "FORWARD_Z", 0, "Z", ""},
1078                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
1079                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
1080                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
1081                 {0, NULL, 0, NULL, NULL}};
1082
1083         static EnumPropertyItem pathup_items[] = {
1084                 {TRACK_X, "UP_X", 0, "X", ""},
1085                 {TRACK_Y, "UP_Y", 0, "Y", ""},
1086                 {TRACK_Z, "UP_Z", 0, "Z", ""},
1087                 {0, NULL, 0, NULL, NULL}};
1088
1089         srna= RNA_def_struct(brna, "FollowPathConstraint", "Constraint");
1090         RNA_def_struct_ui_text(srna, "Follow Path Constraint", "Locks motion to the target path");
1091         RNA_def_struct_sdna_from(srna, "bFollowPathConstraint", "data");
1092
1093         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1094         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1095         RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
1096         RNA_def_property_ui_text(prop, "Target", "Target Object");
1097         RNA_def_property_flag(prop, PROP_EDITABLE);
1098         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1099
1100         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TIME);
1101         RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
1102         RNA_def_property_ui_text(prop, "Offset", "Offset from the position corresponding to the time frame");
1103         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1104         
1105         prop= RNA_def_property(srna, "offset_factor", PROP_FLOAT, PROP_FACTOR);
1106         RNA_def_property_float_sdna(prop, NULL, "offset_fac");
1107         RNA_def_property_range(prop, 0.0f, 1.0f);
1108         RNA_def_property_ui_text(prop, "Offset Factor", "Percentage value defining target position along length of bone");
1109         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1110
1111         prop= RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
1112         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
1113         RNA_def_property_enum_items(prop, forwardpath_items);
1114         RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path");
1115         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1116
1117         prop= RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
1118         RNA_def_property_enum_sdna(prop, NULL, "upflag");
1119         RNA_def_property_enum_items(prop, pathup_items);
1120         RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
1121         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1122
1123         prop= RNA_def_property(srna, "use_curve_follow", PROP_BOOLEAN, PROP_NONE);
1124         RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_FOLLOW);
1125         RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve");
1126         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1127         
1128         prop= RNA_def_property(srna, "use_fixed_location", PROP_BOOLEAN, PROP_NONE);
1129         RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_STATIC);
1130         RNA_def_property_ui_text(prop, "Fixed Position", "Object will stay locked to a single point somewhere along the length of the curve regardless of time");
1131         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1132
1133         prop= RNA_def_property(srna, "use_curve_radius", PROP_BOOLEAN, PROP_NONE);
1134         RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_RADIUS);
1135         RNA_def_property_ui_text(prop, "Curve Radius", "Objects scale by the curve radius");
1136         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1137 }
1138
1139 static void rna_def_constraint_stretch_to(BlenderRNA *brna)
1140 {
1141         StructRNA *srna;
1142         PropertyRNA *prop;
1143
1144         static EnumPropertyItem volume_items[] = {
1145                 {VOLUME_XZ, "VOLUME_XZX", 0, "XZ", ""},
1146                 {VOLUME_X, "VOLUME_X", 0, "X", ""},
1147                 {VOLUME_Z, "VOLUME_Z", 0, "Z", ""},
1148                 {NO_VOLUME, "NO_VOLUME", 0, "None", ""},
1149                 {0, NULL, 0, NULL, NULL}};
1150
1151         static EnumPropertyItem plane_items[] = {
1152                 {PLANE_X, "PLANE_X", 0, "X", "Keep X Axis"},
1153                 {PLANE_Z, "PLANE_Z", 0, "Z", "Keep Z Axis"},
1154                 {0, NULL, 0, NULL, NULL}};
1155
1156         srna= RNA_def_struct(brna, "StretchToConstraint", "Constraint");
1157         RNA_def_struct_ui_text(srna, "Stretch To Constraint", "Stretches to meet the target object");
1158
1159         prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
1160         RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
1161         RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
1162         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1163
1164         RNA_def_struct_sdna_from(srna, "bStretchToConstraint", "data");
1165
1166         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1167         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1168         RNA_def_property_ui_text(prop, "Target", "Target Object");
1169         RNA_def_property_flag(prop, PROP_EDITABLE);
1170         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1171         
1172         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1173         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1174         RNA_def_property_ui_text(prop, "Sub-Target", "");
1175         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1176
1177         prop= RNA_def_property(srna, "volume", PROP_ENUM, PROP_NONE);
1178         RNA_def_property_enum_sdna(prop, NULL, "volmode");
1179         RNA_def_property_enum_items(prop, volume_items);
1180         RNA_def_property_ui_text(prop, "Maintain Volume", "Maintain the object's volume as it stretches");
1181         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1182
1183         prop= RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
1184         RNA_def_property_enum_sdna(prop, NULL, "plane");
1185         RNA_def_property_enum_items(prop, plane_items);
1186         RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch");
1187         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1188
1189         prop= RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_DISTANCE);
1190         RNA_def_property_float_sdna(prop, NULL, "orglength");
1191         RNA_def_property_range(prop, 0.0, 100.f);
1192         RNA_def_property_ui_text(prop, "Original Length", "Length at rest position");
1193         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1194
1195         prop= RNA_def_property(srna, "bulge", PROP_FLOAT, PROP_NONE);
1196         RNA_def_property_range(prop, 0.0, 100.f);
1197         RNA_def_property_ui_text(prop, "Volume Variation", "Factor between volume variation and stretching");
1198         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1199 }
1200
1201 static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
1202 {
1203         StructRNA *srna;
1204         PropertyRNA *prop;
1205
1206         static EnumPropertyItem pivot_items[] = {
1207                 {CONSTRAINT_RB_BALL, "BALL", 0, "Ball", "Allows rotations around all axes"},
1208                 {CONSTRAINT_RB_HINGE, "HINGE", 0, "Hinge", "Works in one plane, allows rotations around one axis only"},
1209                 {CONSTRAINT_RB_CONETWIST, "CONE_TWIST", 0, "Cone Twist", "Allows rotations around all axes with limits for the cone and twist axes"},
1210                 {CONSTRAINT_RB_GENERIC6DOF, "GENERIC_6_DOF", 0, "Generic 6 DoF", "No constraints by default, limits can be set individually"},
1211                 {0, NULL, 0, NULL, NULL}};
1212
1213         srna= RNA_def_struct(brna, "RigidBodyJointConstraint", "Constraint");
1214         RNA_def_struct_ui_text(srna, "Rigid Body Joint Constraint", "For use with the Game Engine");
1215         RNA_def_struct_sdna_from(srna, "bRigidBodyJointConstraint", "data");
1216
1217         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1218         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1219         RNA_def_property_ui_text(prop, "Target", "Target Object");
1220         RNA_def_property_flag(prop, PROP_EDITABLE);
1221         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1222
1223         prop= RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
1224         RNA_def_property_ui_text(prop, "Child Object", "Child object");
1225         RNA_def_property_flag(prop, PROP_EDITABLE);
1226         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1227
1228         prop= RNA_def_property(srna, "pivot_type", PROP_ENUM, PROP_NONE);
1229         RNA_def_property_enum_sdna(prop, NULL, "type");
1230         RNA_def_property_enum_items(prop, pivot_items);
1231         RNA_def_property_ui_text(prop, "Pivot Type", "");
1232         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1233
1234         prop= RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_DISTANCE);
1235         RNA_def_property_float_sdna(prop, NULL, "pivX");
1236         RNA_def_property_range(prop, -1000.0, 1000.f);
1237         RNA_def_property_ui_text(prop, "Pivot X", "Offset pivot on X");
1238         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1239
1240         prop= RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_DISTANCE);
1241         RNA_def_property_float_sdna(prop, NULL, "pivY");
1242         RNA_def_property_range(prop, -1000.0, 1000.f);
1243         RNA_def_property_ui_text(prop, "Pivot Y", "Offset pivot on Y");
1244         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1245
1246         prop= RNA_def_property(srna, "pivot_z", PROP_FLOAT, PROP_DISTANCE);
1247         RNA_def_property_float_sdna(prop, NULL, "pivZ");
1248         RNA_def_property_range(prop, -1000.0, 1000.f);
1249         RNA_def_property_ui_text(prop, "Pivot Z", "Offset pivot on Z");
1250         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1251
1252         prop= RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_ANGLE);
1253         RNA_def_property_float_sdna(prop, NULL, "axX");
1254         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1255         RNA_def_property_ui_text(prop, "Axis X", "Rotate pivot on X axis in degrees");
1256         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1257
1258         prop= RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_ANGLE);
1259         RNA_def_property_float_sdna(prop, NULL, "axY");
1260         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1261         RNA_def_property_ui_text(prop, "Axis Y", "Rotate pivot on Y axis in degrees");
1262         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1263
1264         prop= RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_ANGLE);
1265         RNA_def_property_float_sdna(prop, NULL, "axZ");
1266         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1267         RNA_def_property_ui_text(prop, "Axis Z", "Rotate pivot on Z axis in degrees");
1268         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1269
1270         prop= RNA_def_property(srna, "use_linked_collision", PROP_BOOLEAN, PROP_NONE);
1271         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
1272         RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies");
1273         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1274
1275         prop= RNA_def_property(srna, "show_pivot", PROP_BOOLEAN, PROP_NONE);
1276         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
1277         RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view");
1278         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1279         
1280         
1281         /* Limits */
1282         /* Limit Min/Max */
1283         prop= RNA_def_property(srna, "limit_min_x", PROP_FLOAT, PROP_NONE);
1284         RNA_def_property_float_sdna(prop, NULL, "minLimit[0]");
1285         RNA_def_property_ui_text(prop, "Minimum Limit X", "");
1286
1287         prop= RNA_def_property(srna, "limit_min_y", PROP_FLOAT, PROP_NONE);
1288         RNA_def_property_float_sdna(prop, NULL, "minLimit[1]");
1289         RNA_def_property_ui_text(prop, "Minimum Limit Y", "");
1290
1291         prop= RNA_def_property(srna, "limit_min_z", PROP_FLOAT, PROP_NONE);
1292         RNA_def_property_float_sdna(prop, NULL, "minLimit[2]");
1293         RNA_def_property_ui_text(prop, "Minimum Limit Z", "");
1294
1295         prop= RNA_def_property(srna, "limit_max_x", PROP_FLOAT, PROP_NONE);
1296         RNA_def_property_float_sdna(prop, NULL, "maxLimit[0]");
1297         RNA_def_property_ui_text(prop, "Maximum Limit X", "");
1298
1299         prop= RNA_def_property(srna, "limit_max_y", PROP_FLOAT, PROP_NONE);
1300         RNA_def_property_float_sdna(prop, NULL, "maxLimit[1]");
1301         RNA_def_property_ui_text(prop, "Maximum Limit Y", "");
1302
1303         prop= RNA_def_property(srna, "limit_max_z", PROP_FLOAT, PROP_NONE);
1304         RNA_def_property_float_sdna(prop, NULL, "maxLimit[2]");
1305         RNA_def_property_ui_text(prop, "Maximum Limit Z", "");
1306
1307         /* Limit Min/Max for angle */
1308         prop= RNA_def_property(srna, "limit_angle_min_x", PROP_FLOAT, PROP_ANGLE);
1309         RNA_def_property_float_sdna(prop, NULL, "minLimit[3]");
1310         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1311         RNA_def_property_ui_text(prop, "Minimum Angular Limit X", "");
1312
1313         prop= RNA_def_property(srna, "limit_angle_min_y", PROP_FLOAT, PROP_ANGLE);
1314         RNA_def_property_float_sdna(prop, NULL, "minLimit[4]");
1315         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1316         RNA_def_property_ui_text(prop, "Minimum Angular Limit Y", "");
1317
1318         prop= RNA_def_property(srna, "limit_angle_min_z", PROP_FLOAT, PROP_ANGLE);
1319         RNA_def_property_float_sdna(prop, NULL, "minLimit[5]");
1320         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1321         RNA_def_property_ui_text(prop, "Minimum Angular Limit Z", "");
1322
1323         prop= RNA_def_property(srna, "limit_angle_max_x", PROP_FLOAT, PROP_ANGLE);
1324         RNA_def_property_float_sdna(prop, NULL, "maxLimit[3]");
1325         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1326         RNA_def_property_ui_text(prop, "Maximum Angular Limit X", "");
1327         
1328         prop= RNA_def_property(srna, "limit_angle_max_y", PROP_FLOAT, PROP_ANGLE);
1329         RNA_def_property_float_sdna(prop, NULL, "maxLimit[4]");
1330         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1331         RNA_def_property_ui_text(prop, "Maximum Angular Limit Y", "");
1332
1333         prop= RNA_def_property(srna, "limit_angle_max_z", PROP_FLOAT, PROP_ANGLE);
1334         RNA_def_property_float_sdna(prop, NULL, "maxLimit[5]");
1335         RNA_def_property_range(prop, -M_PI*2, M_PI*2);
1336         RNA_def_property_ui_text(prop, "Maximum Angular Limit Z", "");
1337
1338         /* Limit Booleans */
1339         prop= RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
1340         RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
1341         RNA_def_property_ui_text(prop, "Limit X", "Use minimum/maximum x limit");
1342         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1343         
1344         prop= RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
1345         RNA_def_property_boolean_sdna(prop, NULL, "flag", 2);
1346         RNA_def_property_ui_text(prop, "Limit Y", "Use minimum/maximum y limit");
1347         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1348         
1349         prop= RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
1350         RNA_def_property_boolean_sdna(prop, NULL, "flag", 4);
1351         RNA_def_property_ui_text(prop, "Limit Z", "Use minimum/maximum z limit");
1352         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1353
1354         prop= RNA_def_property(srna, "use_angular_limit_x", PROP_BOOLEAN, PROP_NONE);
1355         RNA_def_property_boolean_sdna(prop, NULL, "flag", 8);
1356         RNA_def_property_ui_text(prop, "Angular X Limit", "Use minimum/maximum x angular limit");
1357         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1358         
1359         prop= RNA_def_property(srna, "use_angular_limit_y", PROP_BOOLEAN, PROP_NONE);
1360         RNA_def_property_boolean_sdna(prop, NULL, "flag", 16);
1361         RNA_def_property_ui_text(prop, "Angular Y Limit", "Use minimum/maximum y angular limit");
1362         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1363         
1364         prop= RNA_def_property(srna, "use_angular_limit_z", PROP_BOOLEAN, PROP_NONE);
1365         RNA_def_property_boolean_sdna(prop, NULL, "flag", 32);
1366         RNA_def_property_ui_text(prop, "Angular Z Limit", "Use minimum/maximum z angular limit");
1367         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1368 }
1369
1370 static void rna_def_constraint_clamp_to(BlenderRNA *brna)
1371 {
1372         StructRNA *srna;
1373         PropertyRNA *prop;
1374
1375         static EnumPropertyItem clamp_items[] = {
1376                 {CLAMPTO_AUTO, "CLAMPTO_AUTO", 0, "Auto", ""},
1377                 {CLAMPTO_X, "CLAMPTO_X", 0, "X", ""},
1378                 {CLAMPTO_Y, "CLAMPTO_Y", 0, "Y", ""},
1379                 {CLAMPTO_Z, "CLAMPTO_Z", 0, "Z", ""},
1380                 {0, NULL, 0, NULL, NULL}};
1381
1382         srna= RNA_def_struct(brna, "ClampToConstraint", "Constraint");
1383         RNA_def_struct_ui_text(srna, "Clamp To Constraint", "Constrains an object's location to the nearest point along the target path");
1384         RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
1385
1386         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1387         RNA_def_property_pointer_sdna(prop, NULL, "tar"); // TODO: curve only for set function!
1388         RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
1389         RNA_def_property_ui_text(prop, "Target", "Target Object");
1390         RNA_def_property_flag(prop, PROP_EDITABLE);
1391         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1392
1393         prop= RNA_def_property(srna, "main_axis", PROP_ENUM, PROP_NONE);
1394         RNA_def_property_enum_sdna(prop, NULL, "flag");
1395         RNA_def_property_enum_items(prop, clamp_items);
1396         RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement");
1397         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1398
1399         prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
1400         RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
1401         RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box");
1402         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1403 }
1404
1405 static void rna_def_constraint_transform(BlenderRNA *brna)
1406 {
1407         StructRNA *srna;
1408         PropertyRNA *prop;
1409
1410         static EnumPropertyItem transform_items[] = {
1411                 {0, "LOCATION", 0, "Loc", ""},
1412                 {1, "ROTATION", 0, "Rot", ""},
1413                 {2, "SCALE", 0, "Scale", ""},
1414                 {0, NULL, 0, NULL, NULL}};
1415
1416         static EnumPropertyItem axis_map_items[] = {
1417                 {0, "X", 0, "X", ""},
1418                 {1, "Y", 0, "Y", ""},
1419                 {2, "Z", 0, "Z", ""},
1420                 {0, NULL, 0, NULL, NULL}};
1421
1422         srna= RNA_def_struct(brna, "TransformConstraint", "Constraint");
1423         RNA_def_struct_ui_text(srna, "Transformation Constraint", "Maps transformations of the target to the object");
1424         RNA_def_struct_sdna_from(srna, "bTransformConstraint", "data");
1425
1426         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1427         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1428         RNA_def_property_ui_text(prop, "Target", "Target Object");
1429         RNA_def_property_flag(prop, PROP_EDITABLE);
1430         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1431
1432         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1433         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1434         RNA_def_property_ui_text(prop, "Sub-Target", "");
1435         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1436
1437         prop= RNA_def_property(srna, "map_from", PROP_ENUM, PROP_NONE);
1438         RNA_def_property_enum_sdna(prop, NULL, "from");
1439         RNA_def_property_enum_items(prop, transform_items);
1440         RNA_def_property_ui_text(prop, "Map From", "The transformation type to use from the target");
1441         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1442
1443         prop= RNA_def_property(srna, "map_to", PROP_ENUM, PROP_NONE);
1444         RNA_def_property_enum_sdna(prop, NULL, "to");
1445         RNA_def_property_enum_items(prop, transform_items);
1446         RNA_def_property_ui_text(prop, "Map To", "The transformation type to affect of the constrained object");
1447         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1448
1449         prop= RNA_def_property(srna, "map_to_x_from", PROP_ENUM, PROP_NONE);
1450         RNA_def_property_enum_sdna(prop, NULL, "map[0]");
1451         RNA_def_property_enum_items(prop, axis_map_items);
1452         RNA_def_property_ui_text(prop, "Map To X From", "The source axis constrained object's X axis uses");
1453         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1454
1455         prop= RNA_def_property(srna, "map_to_y_from", PROP_ENUM, PROP_NONE);
1456         RNA_def_property_enum_sdna(prop, NULL, "map[1]");
1457         RNA_def_property_enum_items(prop, axis_map_items);
1458         RNA_def_property_ui_text(prop, "Map To Y From", "The source axis constrained object's Y axis uses");
1459         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1460
1461         prop= RNA_def_property(srna, "map_to_z_from", PROP_ENUM, PROP_NONE);
1462         RNA_def_property_enum_sdna(prop, NULL, "map[2]");
1463         RNA_def_property_enum_items(prop, axis_map_items);
1464         RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses");
1465         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1466
1467         prop= RNA_def_property(srna, "use_motion_extrapolate", PROP_BOOLEAN, PROP_NONE);
1468         RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
1469         RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges");
1470         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1471
1472         prop= RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_DISTANCE);
1473         RNA_def_property_float_sdna(prop, NULL, "from_min[0]");
1474         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1475         RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion");
1476         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1477
1478         prop= RNA_def_property(srna, "from_min_y", PROP_FLOAT, PROP_DISTANCE);
1479         RNA_def_property_float_sdna(prop, NULL, "from_min[1]");
1480         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1481         RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion");
1482         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1483
1484         prop= RNA_def_property(srna, "from_min_z", PROP_FLOAT, PROP_DISTANCE);
1485         RNA_def_property_float_sdna(prop, NULL, "from_min[2]");
1486         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1487         RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion");
1488         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1489
1490         prop= RNA_def_property(srna, "from_max_x", PROP_FLOAT, PROP_DISTANCE);
1491         RNA_def_property_float_sdna(prop, NULL, "from_max[0]");
1492         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1493         RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion");
1494         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1495
1496         prop= RNA_def_property(srna, "from_max_y", PROP_FLOAT, PROP_DISTANCE);
1497         RNA_def_property_float_sdna(prop, NULL, "from_max[1]");
1498         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1499         RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion");
1500         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1501
1502         prop= RNA_def_property(srna, "from_max_z", PROP_FLOAT, PROP_DISTANCE);
1503         RNA_def_property_float_sdna(prop, NULL, "from_max[2]");
1504         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1505         RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source motion");
1506         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1507
1508         prop= RNA_def_property(srna, "to_min_x", PROP_FLOAT, PROP_DISTANCE);
1509         RNA_def_property_float_sdna(prop, NULL, "to_min[0]");
1510         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1511         RNA_def_property_ui_text(prop, "To Minimum X", "Bottom range of X axis destination motion");
1512         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1513
1514         prop= RNA_def_property(srna, "to_min_y", PROP_FLOAT, PROP_DISTANCE);
1515         RNA_def_property_float_sdna(prop, NULL, "to_min[1]");
1516         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1517         RNA_def_property_ui_text(prop, "To Minimum Y", "Bottom range of Y axis destination motion");
1518         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1519
1520         prop= RNA_def_property(srna, "to_min_z", PROP_FLOAT, PROP_DISTANCE);
1521         RNA_def_property_float_sdna(prop, NULL, "to_min[2]");
1522         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1523         RNA_def_property_ui_text(prop, "To Minimum Z", "Bottom range of Z axis destination motion");
1524         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1525
1526         prop= RNA_def_property(srna, "to_max_x", PROP_FLOAT, PROP_DISTANCE);
1527         RNA_def_property_float_sdna(prop, NULL, "to_max[0]");
1528         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1529         RNA_def_property_ui_text(prop, "To Maximum X", "Top range of X axis destination motion");
1530         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1531
1532         prop= RNA_def_property(srna, "to_max_y", PROP_FLOAT, PROP_DISTANCE);
1533         RNA_def_property_float_sdna(prop, NULL, "to_max[1]");
1534         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1535         RNA_def_property_ui_text(prop, "To Maximum Y", "Top range of Y axis destination motion");
1536         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1537
1538         prop= RNA_def_property(srna, "to_max_z", PROP_FLOAT, PROP_DISTANCE);
1539         RNA_def_property_float_sdna(prop, NULL, "to_max[2]");
1540         RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
1541         RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion");
1542         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1543 }
1544
1545 static void rna_def_constraint_location_limit(BlenderRNA *brna)
1546 {
1547         StructRNA *srna;
1548         PropertyRNA *prop;
1549
1550         srna= RNA_def_struct(brna, "LimitLocationConstraint", "Constraint");
1551         RNA_def_struct_ui_text(srna, "Limit Location Constraint", "Limits the location of the constrained object");
1552         RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
1553
1554         prop= RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
1555         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1556         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
1557         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1558
1559         prop= RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
1560         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1561         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
1562         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1563
1564         prop= RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
1565         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1566         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
1567         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1568
1569         prop= RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
1570         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1571         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
1572         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1573
1574         prop= RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
1575         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1576         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
1577         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1578
1579         prop= RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
1580         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1581         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
1582         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1583
1584         prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_DISTANCE);
1585         RNA_def_property_float_sdna(prop, NULL, "xmin");
1586         RNA_def_property_range(prop, -1000.0, 1000.f);
1587         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
1588         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1589
1590         prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_DISTANCE);
1591         RNA_def_property_float_sdna(prop, NULL, "ymin");
1592         RNA_def_property_range(prop, -1000.0, 1000.f);
1593         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
1594         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1595
1596         prop= RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_DISTANCE);
1597         RNA_def_property_float_sdna(prop, NULL, "zmin");
1598         RNA_def_property_range(prop, -1000.0, 1000.f);
1599         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
1600         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1601
1602         prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_DISTANCE);
1603         RNA_def_property_float_sdna(prop, NULL, "xmax");
1604         RNA_def_property_range(prop, -1000.0, 1000.f);
1605         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
1606         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1607
1608         prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_DISTANCE);
1609         RNA_def_property_float_sdna(prop, NULL, "ymax");
1610         RNA_def_property_range(prop, -1000.0, 1000.f);
1611         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
1612         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1613
1614         prop= RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_DISTANCE);
1615         RNA_def_property_float_sdna(prop, NULL, "zmax");
1616         RNA_def_property_range(prop, -1000.0, 1000.f);
1617         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
1618         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1619
1620         prop= RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
1621         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1622         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
1623         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1624 }
1625
1626 static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
1627 {
1628         StructRNA *srna;
1629         PropertyRNA *prop;
1630
1631         srna= RNA_def_struct(brna, "LimitRotationConstraint", "Constraint");
1632         RNA_def_struct_ui_text(srna, "Limit Rotation Constraint", "Limits the rotation of the constrained object");
1633         RNA_def_struct_sdna_from(srna, "bRotLimitConstraint", "data");
1634
1635         prop= RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
1636         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XROT);
1637         RNA_def_property_ui_text(prop, "Limit X", "Use the minimum X value");
1638         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1639
1640         prop= RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
1641         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YROT);
1642         RNA_def_property_ui_text(prop, "Limit Y", "Use the minimum Y value");
1643         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1644
1645         prop= RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
1646         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZROT);
1647         RNA_def_property_ui_text(prop, "Limit Z", "Use the minimum Z value");
1648         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1649
1650         prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_ANGLE);
1651         RNA_def_property_float_sdna(prop, NULL, "xmin");
1652         RNA_def_property_range(prop, -1000.0, 1000.f);
1653         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
1654         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1655
1656         prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_ANGLE);
1657         RNA_def_property_float_sdna(prop, NULL, "ymin");
1658         RNA_def_property_range(prop, -1000.0, 1000.f);
1659         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
1660         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1661
1662         prop= RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_ANGLE);
1663         RNA_def_property_float_sdna(prop, NULL, "zmin");
1664         RNA_def_property_range(prop, -1000.0, 1000.f);
1665         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
1666         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1667
1668         prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_ANGLE);
1669         RNA_def_property_float_sdna(prop, NULL, "xmax");
1670         RNA_def_property_range(prop, -1000.0, 1000.f);
1671         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
1672         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1673
1674         prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_ANGLE);
1675         RNA_def_property_float_sdna(prop, NULL, "ymax");
1676         RNA_def_property_range(prop, -1000.0, 1000.f);
1677         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
1678         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1679
1680         prop= RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_ANGLE);
1681         RNA_def_property_float_sdna(prop, NULL, "zmax");
1682         RNA_def_property_range(prop, -1000.0, 1000.f);
1683         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
1684         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1685
1686         prop= RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
1687         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1688         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
1689         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1690 }
1691
1692 static void rna_def_constraint_size_limit(BlenderRNA *brna)
1693 {
1694         StructRNA *srna;
1695         PropertyRNA *prop;
1696
1697         srna= RNA_def_struct(brna, "LimitScaleConstraint", "Constraint");
1698         RNA_def_struct_ui_text(srna, "Limit Size Constraint", "Limits the scaling of the constrained object");
1699         RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
1700
1701         prop= RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
1702         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1703         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
1704         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1705
1706         prop= RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
1707         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1708         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
1709         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1710
1711         prop= RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
1712         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1713         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
1714         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1715
1716         prop= RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
1717         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1718         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
1719         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1720
1721         prop= RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
1722         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1723         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
1724         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1725
1726         prop= RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
1727         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1728         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
1729         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1730
1731         prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_NONE);
1732         RNA_def_property_float_sdna(prop, NULL, "xmin");
1733         RNA_def_property_range(prop, -1000.0, 1000.f);
1734         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
1735         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1736
1737         prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_NONE);
1738         RNA_def_property_float_sdna(prop, NULL, "ymin");
1739         RNA_def_property_range(prop, -1000.0, 1000.f);
1740         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
1741         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1742
1743         prop= RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_NONE);
1744         RNA_def_property_float_sdna(prop, NULL, "zmin");
1745         RNA_def_property_range(prop, -1000.0, 1000.f);
1746         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
1747         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1748
1749         prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_NONE);
1750         RNA_def_property_float_sdna(prop, NULL, "xmax");
1751         RNA_def_property_range(prop, -1000.0, 1000.f);
1752         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
1753         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1754
1755         prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_NONE);
1756         RNA_def_property_float_sdna(prop, NULL, "ymax");
1757         RNA_def_property_range(prop, -1000.0, 1000.f);
1758         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
1759         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1760
1761         prop= RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_NONE);
1762         RNA_def_property_float_sdna(prop, NULL, "zmax");
1763         RNA_def_property_range(prop, -1000.0, 1000.f);
1764         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
1765         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1766
1767         prop= RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
1768         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1769         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
1770         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1771 }
1772
1773 static void rna_def_constraint_distance_limit(BlenderRNA *brna)
1774 {
1775         StructRNA *srna;
1776         PropertyRNA *prop;
1777
1778         srna= RNA_def_struct(brna, "LimitDistanceConstraint", "Constraint");
1779         RNA_def_struct_ui_text(srna, "Limit Distance Constraint", "Limits the distance from target object");
1780         RNA_def_struct_sdna_from(srna, "bDistLimitConstraint", "data");
1781
1782         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1783         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1784         RNA_def_property_ui_text(prop, "Target", "Target Object");
1785         RNA_def_property_flag(prop, PROP_EDITABLE);
1786         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1787
1788         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1789         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1790         RNA_def_property_ui_text(prop, "Sub-Target", "");
1791         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1792
1793         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
1794         RNA_def_property_float_sdna(prop, NULL, "dist");
1795         RNA_def_property_range(prop, 0.0, 100.f);
1796         RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere");
1797         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1798
1799         prop= RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
1800         RNA_def_property_enum_sdna(prop, NULL, "mode");
1801         RNA_def_property_enum_items(prop, constraint_distance_items);
1802         RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow");
1803         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1804 }
1805
1806 static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
1807 {
1808         StructRNA *srna;
1809         PropertyRNA *prop;
1810         
1811         static EnumPropertyItem type_items[] = {
1812                 {MOD_SHRINKWRAP_NEAREST_SURFACE, "NEAREST_SURFACE", 0, "Nearest Surface Point", "Shrinks the location to the nearest target surface"},
1813                 {MOD_SHRINKWRAP_PROJECT, "PROJECT", 0, "Project", "Shrinks the location to the nearest target surface along a given axis"},
1814                 {MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex", "Shrinks the location to the nearest target vertex"},
1815                 {0, NULL, 0, NULL, NULL}};
1816         
1817         srna= RNA_def_struct(brna, "ShrinkwrapConstraint", "Constraint"); 
1818         RNA_def_struct_ui_text(srna, "Shrinkwrap Constraint", "Creates constraint-based shrinkwrap relationship"); 
1819         RNA_def_struct_sdna_from(srna, "bShrinkwrapConstraint", "data");
1820         
1821         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1822         RNA_def_property_pointer_sdna(prop, NULL, "target"); /* TODO, mesh type */
1823         RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
1824         RNA_def_property_ui_text(prop, "Target", "Target Object");
1825         RNA_def_property_flag(prop, PROP_EDITABLE);
1826         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1827         
1828         prop= RNA_def_property(srna, "shrinkwrap_type", PROP_ENUM, PROP_NONE);
1829         RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
1830         RNA_def_property_enum_items(prop, type_items);
1831         RNA_def_property_ui_text(prop, "Shrinkwrap Type", "Selects type of shrinkwrap algorithm for target position");
1832         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1833         
1834         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
1835         RNA_def_property_float_sdna(prop, NULL, "dist");
1836         RNA_def_property_range(prop, 0.0, 100.f);
1837         RNA_def_property_ui_text(prop, "Distance", "Distance to Target");
1838         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1839         
1840         prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
1841         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
1842         RNA_def_property_ui_text(prop, "Axis X", "Projection over X Axis");
1843         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1844         
1845         prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
1846         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
1847         RNA_def_property_ui_text(prop, "Axis Y", "Projection over Y Axis");
1848         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1849         
1850         prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
1851         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
1852         RNA_def_property_ui_text(prop, "Axis Z", "Projection over Z Axis");
1853         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1854 }
1855
1856 static void rna_def_constraint_damped_track(BlenderRNA *brna)
1857 {
1858         StructRNA *srna;
1859         PropertyRNA *prop;
1860
1861         static EnumPropertyItem damptrack_items[] = {
1862                 {TRACK_X, "TRACK_X", 0, "X", ""},
1863                 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
1864                 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
1865                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
1866                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
1867                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
1868                 {0, NULL, 0, NULL, NULL}};
1869
1870         srna= RNA_def_struct(brna, "DampedTrackConstraint", "Constraint");
1871         RNA_def_struct_ui_text(srna, "Damped Track Constraint", "Points toward target by taking the shortest rotation path");
1872         RNA_def_struct_sdna_from(srna, "bDampTrackConstraint", "data");
1873
1874         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1875         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1876         RNA_def_property_ui_text(prop, "Target", "Target Object");
1877         RNA_def_property_flag(prop, PROP_EDITABLE);
1878         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1879
1880         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1881         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1882         RNA_def_property_ui_text(prop, "Sub-Target", "");
1883         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1884
1885         prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
1886         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
1887         RNA_def_property_enum_items(prop, damptrack_items);
1888         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
1889         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1890 }
1891
1892 static void rna_def_constraint_spline_ik(BlenderRNA *brna)
1893 {
1894         StructRNA *srna;
1895         PropertyRNA *prop;
1896         
1897         static EnumPropertyItem splineik_xz_scale_mode[] = {
1898                 {CONSTRAINT_SPLINEIK_XZS_NONE, "NONE", 0, "None", "Don't scale the X and Z axes (Default)"},
1899                 {CONSTRAINT_SPLINEIK_XZS_ORIGINAL, "BONE_ORIGINAL", 0, "Bone Original", "Use the original scaling of the bones"},
1900                 {CONSTRAINT_SPLINEIK_XZS_VOLUMETRIC, "VOLUME_PRESERVE", 0, "Volume Preservation", "Scale of the X and Z axes is the inverse of the Y-Scale"},
1901                 {0, NULL, 0, NULL, NULL}};
1902
1903         srna= RNA_def_struct(brna, "SplineIKConstraint", "Constraint");
1904         RNA_def_struct_ui_text(srna, "Spline IK Constraint", "Align 'n' bones along a curve");
1905         RNA_def_struct_sdna_from(srna, "bSplineIKConstraint", "data");
1906         
1907         /* target chain */
1908         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1909         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1910         RNA_def_property_ui_text(prop, "Target", "Curve that controls this relationship");
1911         RNA_def_property_flag(prop, PROP_EDITABLE);
1912         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1913         
1914         prop= RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
1915         RNA_def_property_int_sdna(prop, NULL, "chainlen");
1916         RNA_def_property_range(prop, 1, 255); // TODO: this should really check the max length of the chain the constraint is attached to
1917         RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the chain");
1918         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1919         
1920         /* direct access to bindings */
1921         // NOTE: only to be used by experienced users
1922         prop= RNA_def_property(srna, "joint_bindings", PROP_FLOAT, PROP_FACTOR);
1923         RNA_def_property_array(prop, 32); // XXX this is the maximum value allowed
1924         RNA_def_property_flag(prop, PROP_DYNAMIC);
1925         RNA_def_property_dynamic_array_funcs(prop, "rna_SplineIKConstraint_joint_bindings_get_length");
1926         RNA_def_property_float_funcs(prop, "rna_SplineIKConstraint_joint_bindings_get", "rna_SplineIKConstraint_joint_bindings_set", NULL);
1927         RNA_def_property_ui_text(prop, "Joint Bindings", "(EXPERIENCED USERS ONLY) The relative positions of the joints along the chain as percentages");
1928         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1929         
1930         /* settings */
1931         prop= RNA_def_property(srna, "use_chain_offset", PROP_BOOLEAN, PROP_NONE);
1932         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_ROOT);
1933         RNA_def_property_ui_text(prop, "Chain Offset", "Offset the entire chain relative to the root joint");
1934         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1935         
1936         prop= RNA_def_property(srna, "use_even_divisions", PROP_BOOLEAN, PROP_NONE);
1937         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_EVENSPLITS);
1938         RNA_def_property_ui_text(prop, "Even Divisions", "Ignore the relative lengths of the bones when fitting to the curve");
1939         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1940         
1941         prop= RNA_def_property(srna, "use_y_stretch", PROP_BOOLEAN, PROP_NONE);
1942         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_SCALE_LIMITED);
1943         RNA_def_property_ui_text(prop, "Y Stretch", "Stretch the Y axis of the bones to fit the curve");
1944         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1945         
1946         prop= RNA_def_property(srna, "use_curve_radius", PROP_BOOLEAN, PROP_NONE);
1947         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_CURVERAD);
1948         RNA_def_property_ui_text(prop, "Use Curve Radius", "Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode");
1949         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1950         
1951         prop= RNA_def_property(srna, "xz_scale_mode", PROP_ENUM, PROP_NONE);
1952         RNA_def_property_enum_sdna(prop, NULL, "xzScaleMode");
1953         RNA_def_property_enum_items(prop, splineik_xz_scale_mode);
1954         RNA_def_property_ui_text(prop, "XZ Scale Mode", "Method used for determining the scaling of the X and Z axes of the bones");
1955         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1956 }
1957
1958 static void rna_def_constraint_pivot(BlenderRNA *brna)
1959 {
1960         StructRNA *srna;
1961         PropertyRNA *prop;
1962
1963         static EnumPropertyItem pivot_rotAxis_items[] = {
1964                 {PIVOTCON_AXIS_NONE, "ALWAYS_ACTIVE", 0, "Always", "Use the pivot point in every rotation"},
1965                 {PIVOTCON_AXIS_X_NEG, "NX", 0, "-X Rot", "Use the pivot point in the negative rotation range around the X-axis"},
1966                 {PIVOTCON_AXIS_Y_NEG, "NY", 0, "-Y Rot", "Use the pivot point in the negative rotation range around the Y-axis"},
1967                 {PIVOTCON_AXIS_Z_NEG, "NZ", 0, "-Z Rot", "Use the pivot point in the negative rotation range around the Z-axis"},
1968                 {PIVOTCON_AXIS_X, "X", 0, "X Rot", "Use the pivot point in the positive rotation range around the X-axis"},
1969                 {PIVOTCON_AXIS_Y, "Y", 0, "Y Rot", "Use the pivot point in the positive rotation range around the Y-axis"},
1970                 {PIVOTCON_AXIS_Z, "Z", 0, "Z Rot", "Use the pivot point in the positive rotation range around the Z-axis"},
1971                 {0, NULL, 0, NULL, NULL}};
1972
1973         srna= RNA_def_struct(brna, "PivotConstraint", "Constraint");
1974         RNA_def_struct_ui_text(srna, "Pivot Constraint", "Rotate around a different point");
1975         
1976         prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
1977         RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
1978         RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
1979         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1980         
1981         RNA_def_struct_sdna_from(srna, "bPivotConstraint", "data");
1982         
1983         /* target-defined pivot */
1984         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1985         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1986         RNA_def_property_ui_text(prop, "Target", "Target Object, defining the position of the pivot when defined");
1987         RNA_def_property_flag(prop, PROP_EDITABLE);
1988         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1989         
1990         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1991         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1992         RNA_def_property_ui_text(prop, "Sub-Target", "");
1993         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1994         
1995         /* pivot offset */
1996         prop= RNA_def_property(srna, "use_relative_location", PROP_BOOLEAN, PROP_NONE);
1997         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", PIVOTCON_FLAG_OFFSET_ABS);
1998         RNA_def_property_ui_text(prop, "Use Relative Offset", "Offset will be an absolute point in space instead of relative to the target");
1999         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
2000         
2001         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_XYZ);
2002         RNA_def_property_float_sdna(prop, NULL, "offset");
2003         RNA_def_property_ui_text(prop, "Offset", "Offset of pivot from target (when set), or from owner's location (when Fixed Position is off), or the absolute pivot point");
2004         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
2005         
2006         /* rotation-based activation */
2007         prop= RNA_def_property(srna, "rotation_range", PROP_ENUM, PROP_NONE);
2008         RNA_def_property_enum_sdna(prop, NULL, "rotAxis");
2009         RNA_def_property_enum_items(prop, pivot_rotAxis_items);
2010         RNA_def_property_ui_text(prop, "Enabled Rotation Range", "Rotation range on which pivoting should occur");
2011         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
2012 }
2013
2014 static void rna_def_constraint_follow_track(BlenderRNA *brna)
2015 {
2016         StructRNA *srna;
2017         PropertyRNA *prop;
2018
2019         static EnumPropertyItem reference_items[] = {
2020                 {FOLLOWTRACK_TRACK, "TRACK", 0, "Track", "Use 2D track position as reference"},
2021                 {FOLLOWTRACK_BUNDLE, "BUNDLE", 0, "Bundle", "Use 3D reconstructed bundle position as reference"},
2022                 {0, NULL, 0, NULL, NULL}};
2023
2024         srna= RNA_def_struct(brna, "FollowTrackConstraint", "Constraint");
2025         RNA_def_struct_ui_text(srna, "Follow Track Constraint", "Locks motion to the target motion track");
2026         RNA_def_struct_sdna_from(srna, "bFollowTrackConstraint", "data");
2027
2028         /* movie clip */
2029         prop= RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
2030         RNA_def_property_pointer_sdna(prop, NULL, "clip");
2031         RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
2032         RNA_def_property_flag(prop, PROP_EDITABLE);
2033         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
2034
2035         /* track */
2036         prop= RNA_def_property(srna, "track", PROP_STRING, PROP_NONE);
2037         RNA_def_property_string_sdna(prop, NULL, "track");
2038         RNA_def_property_ui_text(prop, "Track", "Movie tracking track to follow");
2039         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
2040
2041         /* reference */
2042         prop= RNA_def_property(srna, "reference", PROP_ENUM, PROP_NONE);
2043         RNA_def_property_enum_sdna(prop, NULL, "reference");
2044         RNA_def_property_enum_items(prop, reference_items);
2045         RNA_def_property_ui_text(prop, "Reference", "Reference source to follow");
2046         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
2047
2048         /* use default clip */
2049         prop= RNA_def_property(srna, "use_default_clip", PROP_BOOLEAN, PROP_NONE);
2050         RNA_def_property_boolean_sdna(prop, NULL, "flag", FOLLOWTRACK_DEFAULTCLIP);
2051         RNA_def_property_ui_text(prop, "Default Clip", "Use default clip defined in scene");
2052         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
2053 }
2054
2055 static void rna_def_constraint_camera_solver(BlenderRNA *brna)
2056 {
2057         StructRNA *srna;
2058         PropertyRNA *prop;
2059
2060         srna= RNA_def_struct(brna, "CameraSolverConstraint", "Constraint");
2061         RNA_def_struct_ui_text(srna, "Follow Track Constraint", "Locks motion to the reconstructed camera movenment");
2062         RNA_def_struct_sdna_from(srna, "bCameraSolverConstraint", "data");
2063
2064         /* movie clip */
2065         prop= RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
2066         RNA_def_property_pointer_sdna(prop, NULL, "clip");
2067         RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
2068         RNA_def_property_flag(prop, PROP_EDITABLE);
2069         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
2070
2071         /* use default clip */
2072         prop= RNA_def_property(srna, "use_default_clip", PROP_BOOLEAN, PROP_NONE);
2073         RNA_def_property_boolean_sdna(prop, NULL, "flag", CAMERASOLVER_DEFAULTCLIP);
2074         RNA_def_property_ui_text(prop, "Default Clip", "Use default clip defined in scene");
2075         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
2076 }
2077
2078 /* base struct for constraints */
2079 void RNA_def_constraint(BlenderRNA *brna)
2080 {
2081         StructRNA *srna;
2082         PropertyRNA *prop;
2083         
2084         /* data */
2085         srna= RNA_def_struct(brna, "Constraint", NULL );
2086         RNA_def_struct_ui_text(srna, "Constraint", "Constraint modifying the transformation of objects and bones");
2087         RNA_def_struct_refine_func(srna, "rna_ConstraintType_refine");
2088         RNA_def_struct_path_func(srna, "rna_Constraint_path");
2089         RNA_def_struct_sdna(srna, "bConstraint");
2090         
2091         /* strings */
2092         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2093         RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Constraint_name_set");
2094         RNA_def_property_ui_text(prop, "Name", "Constraint name");
2095         RNA_def_struct_name_property(srna, prop);
2096         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT|NA_RENAME, NULL);
2097         
2098         /* enums */
2099         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2100         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2101         RNA_def_property_enum_sdna(prop, NULL, "type");
2102         RNA_def_property_enum_items(prop, constraint_type_items);
2103         RNA_def_property_ui_text(prop, "Type", "");
2104
2105         prop= RNA_def_property(srna, "owner_space", PROP_ENUM, PROP_NONE);
2106         RNA_def_property_enum_sdna(prop, NULL, "ownspace");
2107         RNA_def_property_enum_items(prop, owner_space_pchan_items);
2108         RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_owner_space_itemf");
2109         RNA_def_property_ui_text(prop, "Owner Space", "Space that owner is evaluated in");
2110
2111         prop= RNA_def_property(srna, "target_space", PROP_ENUM, PROP_NONE);
2112         RNA_def_property_enum_sdna(prop, NULL, "tarspace");
2113         RNA_def_property_enum_items(prop, target_space_pchan_items);
2114         RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_target_space_itemf");
2115         RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in");
2116
2117         /* flags */
2118         prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
2119         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
2120         RNA_def_property_ui_text(prop, "Disable", "Enable/Disable Constraint");
2121         
2122         prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
2123         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
2124         RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
2125         RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
2126
2127                 // XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
2128         prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
2129         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2130         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
2131         RNA_def_property_ui_text(prop, "Valid", "Constraint has valid settings and can be evaluated");
2132         
2133                 // TODO: setting this to true must ensure that all others in stack are turned off too...
2134         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
2135         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
2136         RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
2137         
2138         prop= RNA_def_property(srna, "is_proxy_local", PROP_BOOLEAN, PROP_NONE);
2139         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
2140         RNA_def_property_ui_text(prop, "Proxy Local", "Constraint was added in this proxy instance (i.e. did not belong to source Armature)");
2141         
2142         /* values */
2143         prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR);
2144         RNA_def_property_float_sdna(prop, NULL, "enforce");
2145         RNA_def_property_range(prop, 0.0f, 1.0f);
2146         RNA_def_property_ui_text(prop, "Influence", "Amount of influence constraint will have on the final solution");
2147         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_influence_update");
2148
2149         /* readonly values */
2150         prop= RNA_def_property(srna, "error_location", PROP_FLOAT, PROP_NONE);
2151         RNA_def_property_float_sdna(prop, NULL, "lin_error");
2152         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2153         RNA_def_property_ui_text(prop, "Lin error", "Amount of residual error in Blender space unit for constraints that work on position");
2154
2155         prop= RNA_def_property(srna, "error_rotation", PROP_FLOAT, PROP_NONE);
2156         RNA_def_property_float_sdna(prop, NULL, "rot_error");
2157         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2158         RNA_def_property_ui_text(prop, "Rot error", "Amount of residual error in radiant for constraints that work on orientation");
2159
2160         /* pointers */
2161         rna_def_constrainttarget(brna);
2162
2163         rna_def_constraint_childof(brna);
2164         rna_def_constraint_python(brna);
2165         rna_def_constraint_stretch_to(brna);
2166         rna_def_constraint_follow_path(brna);
2167         rna_def_constraint_locked_track(brna);
2168         rna_def_constraint_action(brna);
2169         rna_def_constraint_size_like(brna);
2170         rna_def_constraint_same_volume(brna);
2171         rna_def_constraint_locate_like(brna);
2172         rna_def_constraint_rotate_like(brna);
2173         rna_def_constraint_transform_like(brna);
2174         rna_def_constraint_minmax(brna);
2175         rna_def_constraint_track_to(brna);
2176         rna_def_constraint_kinematic(brna);
2177         rna_def_constraint_rigid_body_joint(brna);
2178         rna_def_constraint_clamp_to(brna);
2179         rna_def_constraint_distance_limit(brna);
2180         rna_def_constraint_size_limit(brna);
2181         rna_def_constraint_rotation_limit(brna);
2182         rna_def_constraint_location_limit(brna);
2183         rna_def_constraint_transform(brna);
2184         rna_def_constraint_shrinkwrap(brna);
2185         rna_def_constraint_damped_track(brna);
2186         rna_def_constraint_spline_ik(brna);
2187         rna_def_constraint_pivot(brna);
2188         rna_def_constraint_follow_track(brna);
2189         rna_def_constraint_camera_solver(brna);
2190 }
2191
2192 #endif
2193