RNA
[blender.git] / source / blender / makesrna / intern / rna_constraint.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008), Joshua Leung, Roland Hess
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "DNA_action_types.h"
31 #include "DNA_constraint_types.h"
32 #include "DNA_modifier_types.h"
33 #include "DNA_object_types.h"
34 #include "DNA_scene_types.h"
35
36 #include "WM_types.h"
37
38 EnumPropertyItem constraint_type_items[] ={
39         {CONSTRAINT_TYPE_CHILDOF, "CHILD_OF", 0, "Child Of", ""},
40         {CONSTRAINT_TYPE_TRANSFORM, "TRANSFORM", 0, "Transformation", ""},
41         {0, "", 0, NULL, NULL},
42         {CONSTRAINT_TYPE_LOCLIKE, "COPY_LOCATION", 0, "Copy Location", ""},
43         {CONSTRAINT_TYPE_ROTLIKE, "COPY_ROTATION", 0, "Copy Rotation", ""},
44         {CONSTRAINT_TYPE_SIZELIKE, "COPY_SCALE", 0, "Copy Scale", ""},
45         {0, "", 0, NULL, NULL},
46         {CONSTRAINT_TYPE_LOCLIMIT, "LIMIT_LOCATION", 0, "Limit Location", ""},
47         {CONSTRAINT_TYPE_ROTLIMIT, "LIMIT_ROTATION", 0, "Limit Rotation", ""},
48         {CONSTRAINT_TYPE_SIZELIMIT, "LIMIT_SCALE", 0, "Limit Scale", ""},
49         {CONSTRAINT_TYPE_DISTLIMIT, "LIMIT_DISTANCE", 0, "Limit Distance", ""},
50         {0, "", 0, NULL, NULL},
51         {CONSTRAINT_TYPE_TRACKTO, "TRACK_TO", 0, "Track To", ""},
52         {CONSTRAINT_TYPE_LOCKTRACK, "LOCKED_TRACK", 0, "Locked Track", ""},
53         {0, "", 0, NULL, NULL},
54         {CONSTRAINT_TYPE_MINMAX, "FLOOR", 0, "Floor", ""},
55         {CONSTRAINT_TYPE_SHRINKWRAP, "SHRINKWRAP", 0, "Shrinkwrap", ""},
56         {CONSTRAINT_TYPE_FOLLOWPATH, "FOLLOW_PATH", 0, "Follow Path", ""},
57         {0, "", 0, NULL, NULL},
58         {CONSTRAINT_TYPE_CLAMPTO, "CLAMP_TO", 0, "Clamp To", ""},
59         {CONSTRAINT_TYPE_STRETCHTO, "STRETCH_TO", 0, "Stretch To", ""},
60         {0, "", 0, NULL, NULL},
61         {CONSTRAINT_TYPE_KINEMATIC, "IK", 0, "IK", ""},
62         {CONSTRAINT_TYPE_RIGIDBODYJOINT, "RIGID_BODY_JOINT", 0, "Rigid Body Joint", ""},
63         {0, "", 0, NULL, NULL},
64         {CONSTRAINT_TYPE_ACTION, "ACTION", 0, "Action", ""},
65         {0, "", 0, NULL, NULL},
66         {CONSTRAINT_TYPE_PYTHON, "SCRIPT", 0, "Script", ""},
67         {0, "", 0, NULL, NULL},
68         {CONSTRAINT_TYPE_NULL, "NULL", 0, "Null", ""},
69         {0, NULL, 0, NULL, NULL}};
70
71 EnumPropertyItem space_pchan_items[] = {
72         {0, "WORLD", 0, "World Space", ""},
73         {2, "POSE", 0, "Pose Space", ""},
74         {3, "LOCAL_WITH_PARENT", 0, "Local With Parent", ""},
75         {1, "LOCAL", 0, "Local Space", ""},
76         {0, NULL, 0, NULL, NULL}};
77
78 EnumPropertyItem space_object_items[] = {
79         {0, "WORLD", 0, "World Space", ""},
80         {1, "LOCAL", 0, "Local (Without Parent) Space", ""},
81         {0, NULL, 0, NULL, NULL}};
82
83 #ifdef RNA_RUNTIME
84
85 #include "BKE_action.h"
86 #include "BKE_constraint.h"
87 #include "BKE_context.h"
88 #include "BKE_depsgraph.h"
89
90 #include "ED_object.h"
91
92 StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr)
93 {
94         bConstraint *con= (bConstraint*)ptr->data;
95
96         switch(con->type) {
97                 case CONSTRAINT_TYPE_CHILDOF:
98                         return &RNA_ChildOfConstraint;
99                 case CONSTRAINT_TYPE_TRACKTO:
100                         return &RNA_TrackToConstraint;
101                 case CONSTRAINT_TYPE_KINEMATIC:
102                         return &RNA_KinematicConstraint;
103                 case CONSTRAINT_TYPE_FOLLOWPATH:
104                         return &RNA_FollowPathConstraint;
105                 case CONSTRAINT_TYPE_ROTLIKE:
106                         return &RNA_CopyRotationConstraint;
107                 case CONSTRAINT_TYPE_LOCLIKE:
108                         return &RNA_CopyLocationConstraint;
109                 case CONSTRAINT_TYPE_SIZELIKE:
110                         return &RNA_CopyScaleConstraint;
111                 case CONSTRAINT_TYPE_PYTHON:
112                         return &RNA_PythonConstraint;
113                 case CONSTRAINT_TYPE_ACTION:
114                         return &RNA_ActionConstraint;
115                 case CONSTRAINT_TYPE_LOCKTRACK:
116                         return &RNA_LockedTrackConstraint;
117                 case CONSTRAINT_TYPE_STRETCHTO:
118                         return &RNA_StretchToConstraint;
119                 case CONSTRAINT_TYPE_MINMAX:
120                         return &RNA_FloorConstraint;
121                 case CONSTRAINT_TYPE_RIGIDBODYJOINT:
122                         return &RNA_RigidBodyJointConstraint;
123                 case CONSTRAINT_TYPE_CLAMPTO:
124                         return &RNA_ClampToConstraint;                  
125                 case CONSTRAINT_TYPE_TRANSFORM:
126                         return &RNA_TransformConstraint;
127                 case CONSTRAINT_TYPE_ROTLIMIT:
128                         return &RNA_LimitRotationConstraint;
129                 case CONSTRAINT_TYPE_LOCLIMIT:
130                         return &RNA_LimitLocationConstraint;
131                 case CONSTRAINT_TYPE_SIZELIMIT:
132                         return &RNA_LimitScaleConstraint;
133                 case CONSTRAINT_TYPE_DISTLIMIT:
134                         return &RNA_LimitDistanceConstraint;
135                 case CONSTRAINT_TYPE_SHRINKWRAP:
136                         return &RNA_ShrinkwrapConstraint;
137                 default:
138                         return &RNA_UnknownType;
139         }
140 }
141
142 static char *rna_Constraint_path(PointerRNA *ptr)
143 {
144         return BLI_sprintfN("constraints[%s]", ((bConstraint*)ptr->data)->name);
145 }
146
147 static void rna_Constraint_update(bContext *C, PointerRNA *ptr)
148 {
149         Scene *scene= CTX_data_scene(C);
150         Object *ob= ptr->id.data;
151
152         if(ob->pose) update_pose_constraint_flags(ob->pose);
153
154         object_test_constraints(ob);
155
156         if(ob->type==OB_ARMATURE) DAG_object_flush_update(scene, ob, OB_RECALC_DATA|OB_RECALC_OB);
157         else DAG_object_flush_update(scene, ob, OB_RECALC_OB);
158 }
159
160 static void rna_Constraint_dependency_update(bContext *C, PointerRNA *ptr)
161 {
162         Object *ob= ptr->id.data;
163
164         rna_Constraint_update(C, ptr);
165
166         if(ob->pose) ob->pose->flag |= POSE_RECALC;     // checks & sorts pose channels
167     DAG_scene_sort(CTX_data_scene(C));
168 }
169
170 static void rna_Constraint_influence_update(bContext *C, PointerRNA *ptr)
171 {
172         Object *ob= ptr->id.data;
173
174         if(ob->pose)
175                 ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK);
176         
177         rna_Constraint_update(C, ptr);
178 }
179
180 static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *C, PointerRNA *ptr, int *free)
181 {
182         Object *ob= (Object*)ptr->id.data;
183         bConstraint *con= (bConstraint*)ptr->data;
184
185         if(BLI_findindex(&ob->constraints, con) == -1)
186                 return space_pchan_items;
187         else /* object */
188                 return space_object_items;
189 }
190
191 static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *C, PointerRNA *ptr, int *free)
192 {
193         bConstraint *con= (bConstraint*)ptr->data;
194         bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
195         ListBase targets = {NULL, NULL};
196         bConstraintTarget *ct;
197         
198         if(cti && cti->get_constraint_targets) {
199                 cti->get_constraint_targets(con, &targets);
200                 
201                 for(ct=targets.first; ct; ct= ct->next)
202                         if(ct->tar && ct->tar->type == OB_ARMATURE)
203                                 break;
204                 
205                 if(cti->flush_constraint_targets)
206                         cti->flush_constraint_targets(con, &targets, 1);
207
208                 if(ct)
209                         return space_pchan_items;
210         }
211
212         return space_object_items;
213 }
214
215 #else
216
217 static void rna_def_constrainttarget(BlenderRNA *brna)
218 {
219         StructRNA *srna;
220         PropertyRNA *prop;
221
222         srna= RNA_def_struct(brna, "ConstraintTarget", NULL);
223         RNA_def_struct_ui_text(srna, "Constraint Target", "Target object for multi-target constraints.");
224         RNA_def_struct_sdna(srna, "bConstraintTarget");
225
226         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
227         RNA_def_property_pointer_sdna(prop, NULL, "tar");
228         RNA_def_property_ui_text(prop, "Target", "Target Object");
229         RNA_def_property_flag(prop, PROP_EDITABLE);
230         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
231
232         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
233         RNA_def_property_string_sdna(prop, NULL, "subtarget");
234         RNA_def_property_ui_text(prop, "Sub-Target", "");
235         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
236
237         // space, flag and type still to do 
238 }
239
240 static void rna_def_constraint_childof(BlenderRNA *brna)
241 {
242         StructRNA *srna;
243         PropertyRNA *prop;
244
245         srna= RNA_def_struct(brna, "ChildOfConstraint", "Constraint"); 
246         RNA_def_struct_ui_text(srna, "Child Of Constraint", "Creates constraint-based parent-child relationship."); 
247         RNA_def_struct_sdna_from(srna, "bChildOfConstraint", "data"); 
248
249         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
250         RNA_def_property_pointer_sdna(prop, NULL, "tar");
251         RNA_def_property_ui_text(prop, "Target", "Target Object");
252         RNA_def_property_flag(prop, PROP_EDITABLE);
253         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
254
255         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
256         RNA_def_property_string_sdna(prop, NULL, "subtarget");
257         RNA_def_property_ui_text(prop, "Sub-Target", "");
258         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
259
260         prop= RNA_def_property(srna, "locationx", PROP_BOOLEAN, PROP_NONE);
261         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCX);
262         RNA_def_property_ui_text(prop, "Location X", "Use X Location of Parent.");
263         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
264
265         prop= RNA_def_property(srna, "locationy", PROP_BOOLEAN, PROP_NONE);
266         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCY);
267         RNA_def_property_ui_text(prop, "Location Y", "Use Y Location of Parent.");
268         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
269
270         prop= RNA_def_property(srna, "locationz", PROP_BOOLEAN, PROP_NONE);
271         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCZ);
272         RNA_def_property_ui_text(prop, "Location Z", "Use Z Location of Parent.");
273         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
274
275         prop= RNA_def_property(srna, "rotationx", PROP_BOOLEAN, PROP_NONE);
276         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTX);
277         RNA_def_property_ui_text(prop, "Rotation X", "Use X Rotation of Parent.");
278         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
279
280         prop= RNA_def_property(srna, "rotationy", PROP_BOOLEAN, PROP_NONE);
281         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTY);
282         RNA_def_property_ui_text(prop, "Rotation Y", "Use Y Rotation of Parent.");
283         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
284
285         prop= RNA_def_property(srna, "rotationz", PROP_BOOLEAN, PROP_NONE);
286         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTZ);
287         RNA_def_property_ui_text(prop, "Rotation Z", "Use Z Rotation of Parent.");
288         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
289
290         prop= RNA_def_property(srna, "sizex", PROP_BOOLEAN, PROP_NONE);
291         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEX);
292         RNA_def_property_ui_text(prop, "Size X", "Use X Scale of Parent.");
293         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
294
295         prop= RNA_def_property(srna, "sizey", PROP_BOOLEAN, PROP_NONE);
296         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEY);
297         RNA_def_property_ui_text(prop, "Size Y", "Use Y Scale of Parent.");
298         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
299
300         prop= RNA_def_property(srna, "sizez", PROP_BOOLEAN, PROP_NONE);
301         RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEZ);
302         RNA_def_property_ui_text(prop, "Size Z", "Use Z Scale of Parent.");
303         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
304 }
305
306 static void rna_def_constraint_python(BlenderRNA *brna)
307 {
308         StructRNA *srna;
309         PropertyRNA *prop;
310
311         srna= RNA_def_struct(brna, "PythonConstraint", "Constraint");
312         RNA_def_struct_ui_text(srna, "Python Constraint", "Uses Python script for constraint evaluation.");
313         RNA_def_struct_sdna_from(srna, "bPythonConstraint", "data");
314
315         prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
316         RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
317         RNA_def_property_struct_type(prop, "ConstraintTarget");
318         RNA_def_property_ui_text(prop, "Targets", "Target Objects.");
319
320         prop= RNA_def_property(srna, "number_of_targets", PROP_INT, PROP_NONE);
321         RNA_def_property_int_sdna(prop, NULL, "tarnum");
322         RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed.");
323         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
324
325         prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
326         RNA_def_property_ui_text(prop, "Script", "The text object that contains the Python script.");
327         RNA_def_property_flag(prop, PROP_EDITABLE);
328         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
329
330         prop= RNA_def_property(srna, "use_targets", PROP_BOOLEAN, PROP_NONE);
331         RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_USETARGETS);
332         RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel.");
333         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
334
335         prop= RNA_def_property(srna, "script_error", PROP_BOOLEAN, PROP_NONE);
336         RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
337         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
338         RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error.");
339 }
340
341 static void rna_def_constraint_kinematic(BlenderRNA *brna)
342 {
343         StructRNA *srna;
344         PropertyRNA *prop;
345
346         srna= RNA_def_struct(brna, "KinematicConstraint", "Constraint");
347         RNA_def_struct_ui_text(srna, "Kinematic Constraint", "Inverse Kinematics.");
348         RNA_def_struct_sdna_from(srna, "bKinematicConstraint", "data");
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         prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
362         RNA_def_property_range(prop, 1, 10000);
363         RNA_def_property_ui_text(prop, "Iterations", "Maximum number of solving iterations.");
364         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
365
366         prop= RNA_def_property(srna, "pole_target", PROP_POINTER, PROP_NONE);
367         RNA_def_property_pointer_sdna(prop, NULL, "poletar");
368         RNA_def_property_ui_text(prop, "Pole Target", "Object for pole rotation.");
369         RNA_def_property_flag(prop, PROP_EDITABLE);
370         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
371
372         prop= RNA_def_property(srna, "pole_subtarget", PROP_STRING, PROP_NONE);
373         RNA_def_property_string_sdna(prop, NULL, "polesubtarget");
374         RNA_def_property_ui_text(prop, "Pole Sub-Target", "");
375         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
376
377         prop= RNA_def_property(srna, "pole_angle", PROP_FLOAT, PROP_NONE);
378         RNA_def_property_float_sdna(prop, NULL, "poleangle");
379         RNA_def_property_range(prop, 0.0, 180.f);
380         RNA_def_property_ui_text(prop, "Pole Angle", "Pole rotation offset.");
381         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
382
383         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
384         RNA_def_property_range(prop, 0.01, 1.f);
385         RNA_def_property_ui_text(prop, "Weight", "For Tree-IK: Weight of position control for this target.");
386
387         prop= RNA_def_property(srna, "orient_weight", PROP_FLOAT, PROP_NONE);
388         RNA_def_property_float_sdna(prop, NULL, "orientweight");
389         RNA_def_property_range(prop, 0.01, 1.f);
390         RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target.");
391         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
392
393         prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
394         RNA_def_property_int_sdna(prop, NULL, "rootbone");
395         RNA_def_property_range(prop, 0, 255);
396         RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones.");
397         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
398
399         prop= RNA_def_property(srna, "tail", PROP_BOOLEAN, PROP_NONE);
400         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_TIP);
401         RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain.");
402         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
403
404         prop= RNA_def_property(srna, "rotation", PROP_BOOLEAN, PROP_NONE);
405         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_ROT);
406         RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target.");
407         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
408
409         prop= RNA_def_property(srna, "targetless", PROP_BOOLEAN, PROP_NONE);
410         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_AUTO);
411         RNA_def_property_ui_text(prop, "Targetless", "Use targetless IK.");
412         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
413
414         prop= RNA_def_property(srna, "stretch", PROP_BOOLEAN, PROP_NONE);
415         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_STRETCH);
416         RNA_def_property_ui_text(prop, "Stretch", "Enable IK Stretching.");
417         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
418 }
419
420 static void rna_def_constraint_track_to(BlenderRNA *brna)
421 {
422         StructRNA *srna;
423         PropertyRNA *prop;
424
425         static EnumPropertyItem track_items[] = {
426                 {TRACK_X, "TRACK_X", 0, "X", ""},
427                 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
428                 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
429                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
430                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
431                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
432                 {0, NULL, 0, NULL, NULL}};
433
434         static EnumPropertyItem up_items[] = {
435                 {TRACK_X, "UP_X", 0, "X", ""},
436                 {TRACK_Y, "UP_Y", 0, "Y", ""},
437                 {TRACK_Z, "UP_Z", 0, "Z", ""},
438                 {0, NULL, 0, NULL, NULL}};
439
440         srna= RNA_def_struct(brna, "TrackToConstraint", "Constraint");
441         RNA_def_struct_ui_text(srna, "Track To Constraint", "Aims the constrained object toward the target.");
442         RNA_def_struct_sdna_from(srna, "bTrackToConstraint", "data");
443
444         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
445         RNA_def_property_pointer_sdna(prop, NULL, "tar");
446         RNA_def_property_ui_text(prop, "Target", "Target Object");
447         RNA_def_property_flag(prop, PROP_EDITABLE);
448         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
449
450         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
451         RNA_def_property_string_sdna(prop, NULL, "subtarget");
452         RNA_def_property_ui_text(prop, "Sub-Target", "");
453         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
454
455         prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
456         RNA_def_property_enum_sdna(prop, NULL, "reserved1");
457         RNA_def_property_enum_items(prop, track_items);
458         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object.");
459         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
460
461         prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
462         RNA_def_property_enum_sdna(prop, NULL, "reserved2");
463         RNA_def_property_enum_items(prop, up_items);
464         RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward.");
465         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
466
467         prop= RNA_def_property(srna, "target_z", PROP_BOOLEAN, PROP_NONE);
468         RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
469         RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction.");
470         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
471 }
472
473 static void rna_def_constraint_rotate_like(BlenderRNA *brna)
474 {
475         StructRNA *srna;
476         PropertyRNA *prop;
477
478         srna= RNA_def_struct(brna, "CopyRotationConstraint", "Constraint");
479         RNA_def_struct_ui_text(srna, "Copy Rotation Constraint", "Copies the rotation of the target.");
480         RNA_def_struct_sdna_from(srna, "bRotateLikeConstraint", "data");
481
482         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
483         RNA_def_property_pointer_sdna(prop, NULL, "tar");
484         RNA_def_property_ui_text(prop, "Target", "Target Object");
485         RNA_def_property_flag(prop, PROP_EDITABLE);
486         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
487
488         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
489         RNA_def_property_string_sdna(prop, NULL, "subtarget");
490         RNA_def_property_ui_text(prop, "Sub-Target", "");
491         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
492
493         prop= RNA_def_property(srna, "rotate_like_x", PROP_BOOLEAN, PROP_NONE);
494         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
495         RNA_def_property_ui_text(prop, "Like X", "Copy the target's X rotation.");
496         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
497
498         prop= RNA_def_property(srna, "rotate_like_y", PROP_BOOLEAN, PROP_NONE);
499         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y);
500         RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y rotation.");
501         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
502
503         prop= RNA_def_property(srna, "rotate_like_z", PROP_BOOLEAN, PROP_NONE);
504         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z);
505         RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z rotation.");
506         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
507
508         prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
509         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X_INVERT);
510         RNA_def_property_ui_text(prop, "Invert X", "Invert the X rotation.");
511         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
512
513         prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
514         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y_INVERT);
515         RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y rotation.");
516         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
517
518         prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
519         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z_INVERT);
520         RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation.");
521         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
522
523         prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
524         RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET);
525         RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation.");
526         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
527 }
528
529 static void rna_def_constraint_locate_like(BlenderRNA *brna)
530 {
531         StructRNA *srna;
532         PropertyRNA *prop;
533
534         srna= RNA_def_struct(brna, "CopyLocationConstraint", "Constraint");
535         RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target.");
536
537         prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_PERCENTAGE);
538         RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
539         RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1.");
540         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
541
542         RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "data");
543
544         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
545         RNA_def_property_pointer_sdna(prop, NULL, "tar");
546         RNA_def_property_flag(prop, PROP_EDITABLE);
547         RNA_def_property_ui_text(prop, "Target", "Target Object");
548         RNA_def_property_flag(prop, PROP_EDITABLE);
549         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
550
551         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
552         RNA_def_property_string_sdna(prop, NULL, "subtarget");
553         RNA_def_property_ui_text(prop, "Sub-Target", "");
554         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
555
556         prop= RNA_def_property(srna, "locate_like_x", PROP_BOOLEAN, PROP_NONE);
557         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
558         RNA_def_property_ui_text(prop, "Like X", "Copy the target's X location.");
559         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
560
561         prop= RNA_def_property(srna, "locate_like_y", PROP_BOOLEAN, PROP_NONE);
562         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);
563         RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y location.");
564         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
565
566         prop= RNA_def_property(srna, "locate_like_z", PROP_BOOLEAN, PROP_NONE);
567         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z);
568         RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z location.");
569         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
570
571         prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
572         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X_INVERT);
573         RNA_def_property_ui_text(prop, "Invert X", "Invert the X location.");
574         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
575
576         prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
577         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y_INVERT);
578         RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y location.");
579         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
580
581         prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
582         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z_INVERT);
583         RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z location.");
584         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
585
586         prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
587         RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
588         RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location.");
589         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
590 }
591
592 static void rna_def_constraint_minmax(BlenderRNA *brna)
593 {
594         StructRNA *srna;
595         PropertyRNA *prop;
596
597         static EnumPropertyItem minmax_items[] = {
598                 {LOCLIKE_X, "FLOOR_X", 0, "X", ""},
599                 {LOCLIKE_Y, "FLOOR_Y", 0, "Y", ""},
600                 {LOCLIKE_Z, "FLOOR_Z", 0, "Z", ""},
601                 {LOCLIKE_X_INVERT, "FLOOR_NEGATIVE_X", 0, "-X", ""},
602                 {LOCLIKE_Y_INVERT, "FLOOR_NEGATIVE_Y", 0, "-Y", ""},
603                 {LOCLIKE_Z_INVERT, "FLOOR_NEGATIVE_Z", 0, "-Z", ""},
604                 {0, NULL, 0, NULL, NULL}};
605
606         srna= RNA_def_struct(brna, "FloorConstraint", "Constraint");
607         RNA_def_struct_ui_text(srna, "Floor Constraint", "Uses the target object for location limitation.");
608         RNA_def_struct_sdna_from(srna, "bMinMaxConstraint","data");
609
610         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
611         RNA_def_property_pointer_sdna(prop, NULL, "tar");
612         RNA_def_property_ui_text(prop, "Target", "Target Object");
613         RNA_def_property_flag(prop, PROP_EDITABLE);
614         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
615
616         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
617         RNA_def_property_string_sdna(prop, NULL, "subtarget");
618         RNA_def_property_ui_text(prop, "Sub-Target", "");
619         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
620
621         prop= RNA_def_property(srna, "floor_location", PROP_ENUM, PROP_NONE);
622         RNA_def_property_enum_sdna(prop, NULL, "minmaxflag");
623         RNA_def_property_enum_items(prop, minmax_items);
624         RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through.");
625         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
626
627         prop= RNA_def_property(srna, "sticky", PROP_BOOLEAN, PROP_NONE);
628         RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
629         RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained.");
630         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
631
632         prop= RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
633         RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_USEROT);
634         RNA_def_property_ui_text(prop, "Use Rotation", "Use the target's rotation to determine floor.");
635         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
636
637         prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
638         RNA_def_property_range(prop, 0.0, 100.f);
639         RNA_def_property_ui_text(prop, "Offset", "Offset of floor from object center.");
640         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
641 }
642
643 static void rna_def_constraint_size_like(BlenderRNA *brna)
644 {
645         StructRNA *srna;
646         PropertyRNA *prop;
647
648         srna= RNA_def_struct(brna, "CopyScaleConstraint", "Constraint");
649         RNA_def_struct_ui_text(srna, "Copy Scale Constraint", "Copies the scale of the target.");
650         RNA_def_struct_sdna_from(srna, "bSizeLikeConstraint", "data");
651
652         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
653         RNA_def_property_pointer_sdna(prop, NULL, "tar");
654         RNA_def_property_flag(prop, PROP_EDITABLE);
655         RNA_def_property_ui_text(prop, "Target", "Target Object");
656         RNA_def_property_flag(prop, PROP_EDITABLE);
657         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
658
659         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
660         RNA_def_property_string_sdna(prop, NULL, "subtarget");
661         RNA_def_property_ui_text(prop, "Sub-Target", "");
662         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
663
664         prop= RNA_def_property(srna, "size_like_x", PROP_BOOLEAN, PROP_NONE);
665         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_X);
666         RNA_def_property_ui_text(prop, "Like X", "Copy the target's X scale.");
667         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
668
669         prop= RNA_def_property(srna, "size_like_y", PROP_BOOLEAN, PROP_NONE);
670         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Y);
671         RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y scale.");
672         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
673
674         prop= RNA_def_property(srna, "size_like_z", PROP_BOOLEAN, PROP_NONE);
675         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Z);
676         RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z scale.");
677         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
678
679         prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
680         RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET);
681         RNA_def_property_ui_text(prop, "Offset", "Add original scale into copied scale.");
682         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
683 }
684
685 static void rna_def_constraint_action(BlenderRNA *brna)
686 {
687         StructRNA *srna;
688         PropertyRNA *prop;
689
690         static EnumPropertyItem transform_channel_items[] = {
691                 {00, "ROTATION_X", 0, "Rotation X", ""},
692                 {01, "ROTATION_Y", 0, "Rotation Y", ""},
693                 {02, "ROTATION_Z", 0, "Rotation Z", ""},
694                 {10, "SIZE_X", 0, "Scale X", ""},
695                 {11, "SIZE_Y", 0, "Scale Y", ""},
696                 {12, "SIZE_Z", 0, "Scale Z", ""},
697                 {20, "LOCATION_X", 0, "Location X", ""},
698                 {21, "LOCATION_Y", 0, "Location Y", ""},
699                 {22, "LOCATION_Z", 0, "Location Z", ""},
700                 {0, NULL, 0, NULL, NULL}};
701
702         srna= RNA_def_struct(brna, "ActionConstraint", "Constraint");
703         RNA_def_struct_ui_text(srna, "Action Constraint", "Map an action to the transform axes of a bone.");
704         RNA_def_struct_sdna_from(srna, "bActionConstraint", "data");
705
706         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
707         RNA_def_property_pointer_sdna(prop, NULL, "tar");
708         RNA_def_property_ui_text(prop, "Target", "Target Object");
709         RNA_def_property_flag(prop, PROP_EDITABLE);
710         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
711
712         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
713         RNA_def_property_string_sdna(prop, NULL, "subtarget");
714         RNA_def_property_ui_text(prop, "Sub-Target", "");
715         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
716
717         prop= RNA_def_property(srna, "transform_channel", PROP_ENUM, PROP_NONE);
718         RNA_def_property_enum_sdna(prop, NULL, "type");
719         RNA_def_property_enum_items(prop, transform_channel_items);
720         RNA_def_property_ui_text(prop, "Transform Channel", "Transformation channel from the target that is used to key the Action.");
721         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
722
723         prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
724         RNA_def_property_pointer_sdna(prop, NULL, "act");
725         RNA_def_property_ui_text(prop, "Action", "");
726         RNA_def_property_flag(prop, PROP_EDITABLE);
727         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
728
729         prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_NONE);
730         RNA_def_property_int_sdna(prop, NULL, "start");
731         RNA_def_property_range(prop, MINFRAME, MAXFRAME);
732         RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use.");
733         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
734
735         prop= RNA_def_property(srna, "end_frame", PROP_INT, PROP_NONE);
736         RNA_def_property_int_sdna(prop, NULL, "end");
737         RNA_def_property_range(prop, MINFRAME, MAXFRAME);
738         RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use.");
739         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
740
741         prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
742         RNA_def_property_float_sdna(prop, NULL, "max");
743         RNA_def_property_range(prop, 0.0, 1000.f);
744         RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range.");
745         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
746
747         prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
748         RNA_def_property_float_sdna(prop, NULL, "min");
749         RNA_def_property_range(prop, 0.0, 1000.f);
750         RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range.");
751         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
752 }
753
754 static void rna_def_constraint_locked_track(BlenderRNA *brna)
755 {
756         StructRNA *srna;
757         PropertyRNA *prop;
758
759         static EnumPropertyItem locktrack_items[] = {
760                 {TRACK_X, "TRACK_X", 0, "X", ""},
761                 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
762                 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
763                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
764                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
765                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
766                 {0, NULL, 0, NULL, NULL}};
767
768         static EnumPropertyItem lock_items[] = {
769                 {TRACK_X, "LOCK_X", 0, "X", ""},
770                 {TRACK_Y, "LOCK_Y", 0, "Y", ""},
771                 {TRACK_Z, "LOCK_Z", 0, "Z", ""},
772                 {0, NULL, 0, NULL, NULL}};
773
774         srna= RNA_def_struct(brna, "LockedTrackConstraint", "Constraint");
775         RNA_def_struct_ui_text(srna, "Locked Track Constraint", "Points toward the target along the track axis, while locking the other axis.");
776         RNA_def_struct_sdna_from(srna, "bLockTrackConstraint", "data");
777
778         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
779         RNA_def_property_pointer_sdna(prop, NULL, "tar");
780         RNA_def_property_ui_text(prop, "Target", "Target Object");
781         RNA_def_property_flag(prop, PROP_EDITABLE);
782         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
783
784         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
785         RNA_def_property_string_sdna(prop, NULL, "subtarget");
786         RNA_def_property_ui_text(prop, "Sub-Target", "");
787         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
788
789         prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
790         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
791         RNA_def_property_enum_items(prop, locktrack_items);
792         RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object.");
793         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
794
795         prop= RNA_def_property(srna, "locked", PROP_ENUM, PROP_NONE);
796         RNA_def_property_enum_sdna(prop, NULL, "lockflag");
797         RNA_def_property_enum_items(prop, lock_items);
798         RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward.");
799         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
800 }
801
802 static void rna_def_constraint_follow_path(BlenderRNA *brna)
803 {
804         StructRNA *srna;
805         PropertyRNA *prop;
806
807         static EnumPropertyItem forwardpath_items[] = {
808                 {TRACK_X, "FORWARD_X", 0, "X", ""},
809                 {TRACK_Y, "FORWARD_Y", 0, "Y", ""},
810                 {TRACK_Z, "FORWARD_Z", 0, "Z", ""},
811                 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
812                 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
813                 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
814                 {0, NULL, 0, NULL, NULL}};
815
816         static EnumPropertyItem pathup_items[] = {
817                 {TRACK_X, "UP_X", 0, "X", ""},
818                 {TRACK_Y, "UP_Y", 0, "Y", ""},
819                 {TRACK_Z, "UP_Z", 0, "Z", ""},
820                 {0, NULL, 0, NULL, NULL}};
821
822         srna= RNA_def_struct(brna, "FollowPathConstraint", "Constraint");
823         RNA_def_struct_ui_text(srna, "Follow Path Constraint", "Locks motion to the target path.");
824         RNA_def_struct_sdna_from(srna, "bFollowPathConstraint", "data");
825
826         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
827         RNA_def_property_pointer_sdna(prop, NULL, "tar");
828         RNA_def_property_ui_text(prop, "Target", "Target Object");
829         RNA_def_property_flag(prop, PROP_EDITABLE);
830         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
831
832         prop= RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
833         RNA_def_property_range(prop, -300000.0, 300000.f);
834         RNA_def_property_ui_text(prop, "Offset", "Offset from the position corresponding to the time frame.");
835         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
836
837         prop= RNA_def_property(srna, "forward", PROP_ENUM, PROP_NONE);
838         RNA_def_property_enum_sdna(prop, NULL, "trackflag");
839         RNA_def_property_enum_items(prop, forwardpath_items);
840         RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path.");
841         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
842
843         prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
844         RNA_def_property_enum_sdna(prop, NULL, "upflag");
845         RNA_def_property_enum_items(prop, pathup_items);
846         RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward.");
847         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
848
849         prop= RNA_def_property(srna, "curve_follow", PROP_BOOLEAN, PROP_NONE);
850         RNA_def_property_boolean_sdna(prop, NULL, "followflag", 1);
851         RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve.");
852         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
853 }
854
855 static void rna_def_constraint_stretch_to(BlenderRNA *brna)
856 {
857         StructRNA *srna;
858         PropertyRNA *prop;
859
860         static EnumPropertyItem volume_items[] = {
861                 {VOLUME_XZ, "VOLUME_XZX", 0, "XZ", ""},
862                 {VOLUME_X, "VOLUME_X", 0, "Y", ""},
863                 {VOLUME_Z, "VOLUME_Z", 0, "Z", ""},
864                 {NO_VOLUME, "NO_VOLUME", 0, "None", ""},
865                 {0, NULL, 0, NULL, NULL}};
866
867         static EnumPropertyItem plane_items[] = {
868                 {PLANE_X, "PLANE_X", 0, "X", "Keep X Axis"},
869                 {PLANE_Z, "PLANE_Z", 0, "Z", "Keep Z Axis"},
870                 {0, NULL, 0, NULL, NULL}};
871
872         srna= RNA_def_struct(brna, "StretchToConstraint", "Constraint");
873         RNA_def_struct_ui_text(srna, "Stretch To Constraint", "Stretches to meet the target object.");
874         RNA_def_struct_sdna_from(srna, "bStretchToConstraint", "data");
875
876         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
877         RNA_def_property_pointer_sdna(prop, NULL, "tar");
878         RNA_def_property_ui_text(prop, "Target", "Target Object");
879         RNA_def_property_flag(prop, PROP_EDITABLE);
880         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
881
882         prop= RNA_def_property(srna, "volume", PROP_ENUM, PROP_NONE);
883         RNA_def_property_enum_sdna(prop, NULL, "volmode");
884         RNA_def_property_enum_items(prop, volume_items);
885         RNA_def_property_ui_text(prop, "Maintain Volume", "Maintain the object's volume as it stretches.");
886         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
887
888         prop= RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
889         RNA_def_property_enum_sdna(prop, NULL, "plane");
890         RNA_def_property_enum_items(prop, plane_items);
891         RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch.");
892         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
893
894         prop= RNA_def_property(srna, "original_length", PROP_FLOAT, PROP_NONE);
895         RNA_def_property_float_sdna(prop, NULL, "orglength");
896         RNA_def_property_range(prop, 0.0, 100.f);
897         RNA_def_property_ui_text(prop, "Original Length", "Length at rest position.");
898         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
899
900         prop= RNA_def_property(srna, "bulge", PROP_FLOAT, PROP_NONE);
901         RNA_def_property_range(prop, 0.0, 100.f);
902         RNA_def_property_ui_text(prop, "Volume Variation", "Factor between volume variation and stretching.");
903         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
904 }
905
906 static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
907 {
908         StructRNA *srna;
909         PropertyRNA *prop;
910
911         static EnumPropertyItem pivot_items[] = {
912                 {CONSTRAINT_RB_BALL, "BALL", 0, "Ball", ""},
913                 {CONSTRAINT_RB_HINGE, "HINGE", 0, "Hinge", ""},
914                 {CONSTRAINT_RB_CONETWIST, "CONE_TWIST", 0, "Cone Twist", ""},
915                 {CONSTRAINT_RB_GENERIC6DOF, "GENERIC_6_DOF", 0, "Generic 6 DoF", ""},
916                 {0, NULL, 0, NULL, NULL}};
917
918         srna= RNA_def_struct(brna, "RigidBodyJointConstraint", "Constraint");
919         RNA_def_struct_ui_text(srna, "Rigid Body Joint Constraint", "For use with the Game Engine.");
920         RNA_def_struct_sdna_from(srna, "bRigidBodyJointConstraint", "data");
921
922         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
923         RNA_def_property_pointer_sdna(prop, NULL, "tar");
924         RNA_def_property_ui_text(prop, "Target", "Target Object.");
925         RNA_def_property_flag(prop, PROP_EDITABLE);
926         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
927
928         prop= RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
929         RNA_def_property_ui_text(prop, "Child Object", "Child object.");
930         RNA_def_property_flag(prop, PROP_EDITABLE);
931         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
932
933         prop= RNA_def_property(srna, "pivot_type", PROP_ENUM, PROP_NONE);
934         RNA_def_property_enum_sdna(prop, NULL, "type");
935         RNA_def_property_enum_items(prop, pivot_items);
936         RNA_def_property_ui_text(prop, "Pivot Type", "");
937         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
938
939         prop= RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_NONE);
940         RNA_def_property_float_sdna(prop, NULL, "pivX");
941         RNA_def_property_range(prop, -1000.0, 1000.f);
942         RNA_def_property_ui_text(prop, "Pivot X", "Offset pivot on X.");
943         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
944
945         prop= RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_NONE);
946         RNA_def_property_float_sdna(prop, NULL, "pivY");
947         RNA_def_property_range(prop, -1000.0, 1000.f);
948         RNA_def_property_ui_text(prop, "Pivot Y", "Offset pivot on Y.");
949         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
950
951         prop= RNA_def_property(srna, "pivot_z", PROP_FLOAT, PROP_NONE);
952         RNA_def_property_float_sdna(prop, NULL, "pivZ");
953         RNA_def_property_range(prop, -1000.0, 1000.f);
954         RNA_def_property_ui_text(prop, "Pivot Z", "Offset pivot on Z.");
955         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
956
957         prop= RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_NONE);
958         RNA_def_property_float_sdna(prop, NULL, "axX");
959         RNA_def_property_range(prop, -360.0, 360.f);
960         RNA_def_property_ui_text(prop, "Axis X", "Rotate pivot on X axis in degrees.");
961         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
962
963         prop= RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_NONE);
964         RNA_def_property_float_sdna(prop, NULL, "axY");
965         RNA_def_property_range(prop, -360.0, 360.f);
966         RNA_def_property_ui_text(prop, "Axis Y", "Rotate pivot on Y axis in degrees.");
967         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
968
969         prop= RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_NONE);
970         RNA_def_property_float_sdna(prop, NULL, "axZ");
971         RNA_def_property_range(prop, -360.0, 360.f);
972         RNA_def_property_ui_text(prop, "Axis Z", "Rotate pivot on Z axis in degrees.");
973         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
974         
975         /* XXX not sure how to wrap the two 6 element arrays for the generic joint */
976         //float       minLimit[6];
977         //float       maxLimit[6];
978         
979         prop= RNA_def_property(srna, "disable_linked_collision", PROP_BOOLEAN, PROP_NONE);
980         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
981         RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies.");
982         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
983
984         prop= RNA_def_property(srna, "draw_pivot", PROP_BOOLEAN, PROP_NONE);
985         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
986         RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view.");
987         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
988 }
989
990 static void rna_def_constraint_clamp_to(BlenderRNA *brna)
991 {
992         StructRNA *srna;
993         PropertyRNA *prop;
994
995         static EnumPropertyItem clamp_items[] = {
996                 {CLAMPTO_AUTO, "CLAMPTO_AUTO", 0, "Auto", ""},
997                 {CLAMPTO_X, "CLAMPTO_X", 0, "X", ""},
998                 {CLAMPTO_Y, "CLAMPTO_Y", 0, "Y", ""},
999                 {CLAMPTO_Z, "CLAMPTO_Z", 0, "Z", ""},
1000                 {0, NULL, 0, NULL, NULL}};
1001
1002         srna= RNA_def_struct(brna, "ClampToConstraint", "Constraint");
1003         RNA_def_struct_ui_text(srna, "Clamp To Constraint", "Constrains an object's location to the nearest point along the target path.");
1004         RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
1005
1006         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1007         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1008         RNA_def_property_ui_text(prop, "Target", "Target Object");
1009         RNA_def_property_flag(prop, PROP_EDITABLE);
1010         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1011
1012         prop= RNA_def_property(srna, "main_axis", PROP_ENUM, PROP_NONE);
1013         RNA_def_property_enum_sdna(prop, NULL, "flag");
1014         RNA_def_property_enum_items(prop, clamp_items);
1015         RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement.");
1016         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1017
1018         prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
1019         RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
1020         RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box.");
1021         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1022 }
1023
1024 static void rna_def_constraint_transform(BlenderRNA *brna)
1025 {
1026         StructRNA *srna;
1027         PropertyRNA *prop;
1028
1029         static EnumPropertyItem transform_items[] = {
1030                 {0, "LOCATION", 0, "Loc", ""},
1031                 {1, "ROTATION", 0, "Rot", ""},
1032                 {2, "SCALE", 0, "Scale", ""},
1033                 {0, NULL, 0, NULL, NULL}};
1034
1035         static EnumPropertyItem axis_map_items[] = {
1036                 {0, "X", 0, "X", ""},
1037                 {1, "Y", 0, "Y", ""},
1038                 {2, "Z", 0, "Z", ""},
1039                 {0, NULL, 0, NULL, NULL}};
1040
1041         srna= RNA_def_struct(brna, "TransformConstraint", "Constraint");
1042         RNA_def_struct_ui_text(srna, "Transformation Constraint", "Maps transformations of the target to the object.");
1043         RNA_def_struct_sdna_from(srna, "bTransformConstraint", "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, "map_from", PROP_ENUM, PROP_NONE);
1057         RNA_def_property_enum_sdna(prop, NULL, "from");
1058         RNA_def_property_enum_items(prop, transform_items);
1059         RNA_def_property_ui_text(prop, "Map From", "The transformation type to use from the target.");
1060         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1061
1062         prop= RNA_def_property(srna, "map_to", PROP_ENUM, PROP_NONE);
1063         RNA_def_property_enum_sdna(prop, NULL, "to");
1064         RNA_def_property_enum_items(prop, transform_items);
1065         RNA_def_property_ui_text(prop, "Map To", "The transformation type to affect of the constrained object.");
1066         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1067
1068         prop= RNA_def_property(srna, "map_to_x_from", PROP_ENUM, PROP_NONE);
1069         RNA_def_property_enum_sdna(prop, NULL, "map[0]");
1070         RNA_def_property_enum_items(prop, axis_map_items);
1071         RNA_def_property_ui_text(prop, "Map To X From", "The source axis constrained object's X axis uses.");
1072         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1073
1074         prop= RNA_def_property(srna, "map_to_y_from", PROP_ENUM, PROP_NONE);
1075         RNA_def_property_enum_sdna(prop, NULL, "map[1]");
1076         RNA_def_property_enum_items(prop, axis_map_items);
1077         RNA_def_property_ui_text(prop, "Map To Y From", "The source axis constrained object's Y axis uses.");
1078         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1079
1080         prop= RNA_def_property(srna, "map_to_z_from", PROP_ENUM, PROP_NONE);
1081         RNA_def_property_enum_sdna(prop, NULL, "map[2]");
1082         RNA_def_property_enum_items(prop, axis_map_items);
1083         RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses.");
1084         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1085
1086         prop= RNA_def_property(srna, "extrapolate_motion", PROP_BOOLEAN, PROP_NONE);
1087         RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
1088         RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges.");
1089         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1090
1091         prop= RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_NONE);
1092         RNA_def_property_float_sdna(prop, NULL, "from_min[0]");
1093         RNA_def_property_range(prop, 0.0, 1000.f);
1094         RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion.");
1095         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1096
1097         prop= RNA_def_property(srna, "from_min_y", PROP_FLOAT, PROP_NONE);
1098         RNA_def_property_float_sdna(prop, NULL, "from_min[1]");
1099         RNA_def_property_range(prop, 0.0, 1000.f);
1100         RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion.");
1101         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1102
1103         prop= RNA_def_property(srna, "from_min_z", PROP_FLOAT, PROP_NONE);
1104         RNA_def_property_float_sdna(prop, NULL, "from_min[2]");
1105         RNA_def_property_range(prop, 0.0, 1000.f);
1106         RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion.");
1107         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1108
1109         prop= RNA_def_property(srna, "from_max_x", PROP_FLOAT, PROP_NONE);
1110         RNA_def_property_float_sdna(prop, NULL, "from_max[0]");
1111         RNA_def_property_range(prop, 0.0, 1000.f);
1112         RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion.");
1113         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1114
1115         prop= RNA_def_property(srna, "from_max_y", PROP_FLOAT, PROP_NONE);
1116         RNA_def_property_float_sdna(prop, NULL, "from_max[1]");
1117         RNA_def_property_range(prop, 0.0, 1000.f);
1118         RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion.");
1119         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1120
1121         prop= RNA_def_property(srna, "from_max_z", PROP_FLOAT, PROP_NONE);
1122         RNA_def_property_float_sdna(prop, NULL, "from_max[2]");
1123         RNA_def_property_range(prop, 0.0, 1000.f);
1124         RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source motion.");
1125         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1126
1127         prop= RNA_def_property(srna, "to_min_x", PROP_FLOAT, PROP_NONE);
1128         RNA_def_property_float_sdna(prop, NULL, "to_min[0]");
1129         RNA_def_property_range(prop, 0.0, 1000.f);
1130         RNA_def_property_ui_text(prop, "To Minimum X", "Bottom range of X axis destination motion.");
1131         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1132
1133         prop= RNA_def_property(srna, "to_min_y", PROP_FLOAT, PROP_NONE);
1134         RNA_def_property_float_sdna(prop, NULL, "to_min[1]");
1135         RNA_def_property_range(prop, 0.0, 1000.f);
1136         RNA_def_property_ui_text(prop, "To Minimum Y", "Bottom range of Y axis destination motion.");
1137         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1138
1139         prop= RNA_def_property(srna, "to_min_z", PROP_FLOAT, PROP_NONE);
1140         RNA_def_property_float_sdna(prop, NULL, "to_min[2]");
1141         RNA_def_property_range(prop, 0.0, 1000.f);
1142         RNA_def_property_ui_text(prop, "To Minimum Z", "Bottom range of Z axis destination motion.");
1143         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1144
1145         prop= RNA_def_property(srna, "to_max_x", PROP_FLOAT, PROP_NONE);
1146         RNA_def_property_float_sdna(prop, NULL, "to_max[0]");
1147         RNA_def_property_range(prop, 0.0, 1000.f);
1148         RNA_def_property_ui_text(prop, "To Maximum X", "Top range of X axis destination motion.");
1149         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1150
1151         prop= RNA_def_property(srna, "to_max_y", PROP_FLOAT, PROP_NONE);
1152         RNA_def_property_float_sdna(prop, NULL, "to_max[1]");
1153         RNA_def_property_range(prop, 0.0, 1000.f);
1154         RNA_def_property_ui_text(prop, "To Maximum Y", "Top range of Y axis destination motion.");
1155         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1156
1157         prop= RNA_def_property(srna, "to_max_z", PROP_FLOAT, PROP_NONE);
1158         RNA_def_property_float_sdna(prop, NULL, "to_max[2]");
1159         RNA_def_property_range(prop, 0.0, 1000.f);
1160         RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion.");
1161         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1162 }
1163
1164 static void rna_def_constraint_location_limit(BlenderRNA *brna)
1165 {
1166         StructRNA *srna;
1167         PropertyRNA *prop;
1168
1169         srna= RNA_def_struct(brna, "LimitLocationConstraint", "Constraint");
1170         RNA_def_struct_ui_text(srna, "Limit Location Constraint", "Limits the location of the constrained object.");
1171         RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
1172
1173         prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
1174         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1175         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
1176         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1177
1178         prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
1179         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1180         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
1181         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1182
1183         prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
1184         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1185         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
1186         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1187
1188         prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
1189         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1190         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
1191         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1192
1193         prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
1194         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1195         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
1196         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1197
1198         prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
1199         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1200         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
1201         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1202
1203         prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
1204         RNA_def_property_float_sdna(prop, NULL, "xmin");
1205         RNA_def_property_range(prop, -1000.0, 1000.f);
1206         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1207         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1208
1209         prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
1210         RNA_def_property_float_sdna(prop, NULL, "ymin");
1211         RNA_def_property_range(prop, -1000.0, 1000.f);
1212         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1213         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1214
1215         prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
1216         RNA_def_property_float_sdna(prop, NULL, "zmin");
1217         RNA_def_property_range(prop, -1000.0, 1000.f);
1218         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1219         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1220
1221         prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
1222         RNA_def_property_float_sdna(prop, NULL, "xmax");
1223         RNA_def_property_range(prop, -1000.0, 1000.f);
1224         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1225         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1226
1227         prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
1228         RNA_def_property_float_sdna(prop, NULL, "ymax");
1229         RNA_def_property_range(prop, -1000.0, 1000.f);
1230         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1231         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1232
1233         prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
1234         RNA_def_property_float_sdna(prop, NULL, "zmax");
1235         RNA_def_property_range(prop, -1000.0, 1000.f);
1236         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1237         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1238
1239         prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1240         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1241         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1242         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1243 }
1244
1245 static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
1246 {
1247         StructRNA *srna;
1248         PropertyRNA *prop;
1249
1250         srna= RNA_def_struct(brna, "LimitRotationConstraint", "Constraint");
1251         RNA_def_struct_ui_text(srna, "Limit Rotation Constraint", "Limits the rotation of the constrained object.");
1252         RNA_def_struct_sdna_from(srna, "bRotLimitConstraint", "data");
1253
1254         prop= RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
1255         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XROT);
1256         RNA_def_property_ui_text(prop, "Limit X", "Use the minimum X value.");
1257         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1258
1259         prop= RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
1260         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YROT);
1261         RNA_def_property_ui_text(prop, "Limit Y", "Use the minimum Y value.");
1262         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1263
1264         prop= RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
1265         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZROT);
1266         RNA_def_property_ui_text(prop, "Limit Z", "Use the minimum Z value.");
1267         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1268
1269         prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
1270         RNA_def_property_float_sdna(prop, NULL, "xmin");
1271         RNA_def_property_range(prop, -1000.0, 1000.f);
1272         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1273         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1274
1275         prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
1276         RNA_def_property_float_sdna(prop, NULL, "ymin");
1277         RNA_def_property_range(prop, -1000.0, 1000.f);
1278         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1279         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1280
1281         prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
1282         RNA_def_property_float_sdna(prop, NULL, "zmin");
1283         RNA_def_property_range(prop, -1000.0, 1000.f);
1284         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1285         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1286
1287         prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
1288         RNA_def_property_float_sdna(prop, NULL, "xmax");
1289         RNA_def_property_range(prop, -1000.0, 1000.f);
1290         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1291         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1292
1293         prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
1294         RNA_def_property_float_sdna(prop, NULL, "ymax");
1295         RNA_def_property_range(prop, -1000.0, 1000.f);
1296         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1297         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1298
1299         prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
1300         RNA_def_property_float_sdna(prop, NULL, "zmax");
1301         RNA_def_property_range(prop, -1000.0, 1000.f);
1302         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1303         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1304
1305         prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1306         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1307         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1308         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1309 }
1310
1311 static void rna_def_constraint_size_limit(BlenderRNA *brna)
1312 {
1313         StructRNA *srna;
1314         PropertyRNA *prop;
1315
1316         srna= RNA_def_struct(brna, "LimitScaleConstraint", "Constraint");
1317         RNA_def_struct_ui_text(srna, "Limit Size Constraint", "Limits the scaling of the constrained object.");
1318         RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
1319
1320         prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
1321         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1322         RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
1323         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1324
1325         prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
1326         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1327         RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
1328         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1329
1330         prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
1331         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1332         RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
1333         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1334
1335         prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
1336         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1337         RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
1338         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1339
1340         prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
1341         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1342         RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
1343         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1344
1345         prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
1346         RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1347         RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
1348         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1349
1350         prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
1351         RNA_def_property_float_sdna(prop, NULL, "xmin");
1352         RNA_def_property_range(prop, -1000.0, 1000.f);
1353         RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1354         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1355
1356         prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
1357         RNA_def_property_float_sdna(prop, NULL, "ymin");
1358         RNA_def_property_range(prop, -1000.0, 1000.f);
1359         RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1360         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1361
1362         prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
1363         RNA_def_property_float_sdna(prop, NULL, "zmin");
1364         RNA_def_property_range(prop, -1000.0, 1000.f);
1365         RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1366         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1367
1368         prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
1369         RNA_def_property_float_sdna(prop, NULL, "xmax");
1370         RNA_def_property_range(prop, -1000.0, 1000.f);
1371         RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1372         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1373
1374         prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
1375         RNA_def_property_float_sdna(prop, NULL, "ymax");
1376         RNA_def_property_range(prop, -1000.0, 1000.f);
1377         RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1378         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1379
1380         prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
1381         RNA_def_property_float_sdna(prop, NULL, "zmax");
1382         RNA_def_property_range(prop, -1000.0, 1000.f);
1383         RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1384         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1385
1386         prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1387         RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1388         RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1389         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1390 }
1391
1392 static void rna_def_constraint_distance_limit(BlenderRNA *brna)
1393 {
1394         StructRNA *srna;
1395         PropertyRNA *prop;
1396
1397         static EnumPropertyItem distance_items[] = {
1398                 {LIMITDIST_INSIDE, "LIMITDIST_INSIDE", 0, "Inside", ""},
1399                 {LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", 0, "Outside", ""},
1400                 {LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", 0, "On Surface", ""},
1401                 {0, NULL, 0, NULL, NULL}};
1402
1403         srna= RNA_def_struct(brna, "LimitDistanceConstraint", "Constraint");
1404         RNA_def_struct_ui_text(srna, "Limit Distance Constraint", "Limits the distance from target object.");
1405         RNA_def_struct_sdna_from(srna, "bDistLimitConstraint", "data");
1406
1407         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1408         RNA_def_property_pointer_sdna(prop, NULL, "tar");
1409         RNA_def_property_ui_text(prop, "Target", "Target Object");
1410         RNA_def_property_flag(prop, PROP_EDITABLE);
1411         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1412
1413         prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1414         RNA_def_property_string_sdna(prop, NULL, "subtarget");
1415         RNA_def_property_ui_text(prop, "Sub-Target", "");
1416         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1417
1418         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
1419         RNA_def_property_float_sdna(prop, NULL, "dist");
1420         RNA_def_property_range(prop, 0.0, 100.f);
1421         RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere.");
1422         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1423
1424         prop= RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
1425         RNA_def_property_enum_sdna(prop, NULL, "mode");
1426         RNA_def_property_enum_items(prop, distance_items);
1427         RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow.");
1428         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1429 }
1430
1431 static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
1432 {
1433         StructRNA *srna;
1434         PropertyRNA *prop;
1435         
1436         static EnumPropertyItem type_items[] = {
1437                 {MOD_SHRINKWRAP_NEAREST_SURFACE, "NEAREST_SURFACE", 0, "Nearest Surface Point", ""},
1438                 {MOD_SHRINKWRAP_PROJECT, "PROJECT", 0, "Project", ""},
1439                 {MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex", ""},
1440                 {0, NULL, 0, NULL, NULL}};
1441         
1442         srna= RNA_def_struct(brna, "ShrinkwrapConstraint", "Constraint"); 
1443         RNA_def_struct_ui_text(srna, "Shrinkwrap Constraint", "Creates constraint-based shrinkwrap relationship."); 
1444         RNA_def_struct_sdna_from(srna, "bShrinkwrapConstraint", "data");
1445         
1446         prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1447         RNA_def_property_pointer_sdna(prop, NULL, "target");
1448         RNA_def_property_ui_text(prop, "Target", "Target Object");
1449         RNA_def_property_flag(prop, PROP_EDITABLE);
1450         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1451         
1452         prop= RNA_def_property(srna, "shrinkwrap_type", PROP_ENUM, PROP_NONE);
1453         RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
1454         RNA_def_property_enum_items(prop, type_items);
1455         RNA_def_property_ui_text(prop, "Shrinkwrap Type", "Selects type of shrinkwrap algorithm for target position");
1456         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1457         
1458         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
1459         RNA_def_property_float_sdna(prop, NULL, "dist");
1460         RNA_def_property_range(prop, 0.0, 100.f);
1461         RNA_def_property_ui_text(prop, "Distance", "Distance to Target.");
1462         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1463         
1464         prop= RNA_def_property(srna, "axis_x", PROP_BOOLEAN, PROP_NONE);
1465         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
1466         RNA_def_property_ui_text(prop, "Axis X", "Projection over X Axis");
1467         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1468         
1469         prop= RNA_def_property(srna, "axis_y", PROP_BOOLEAN, PROP_NONE);
1470         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
1471         RNA_def_property_ui_text(prop, "Axis Y", "Projection over Y Axis");
1472         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1473         
1474         prop= RNA_def_property(srna, "axis_z", PROP_BOOLEAN, PROP_NONE);
1475         RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
1476         RNA_def_property_ui_text(prop, "Axis Z", "Projection over Z Axis");
1477         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1478 }
1479
1480 /* base struct for constraints */
1481 void RNA_def_constraint(BlenderRNA *brna)
1482 {
1483         StructRNA *srna;
1484         PropertyRNA *prop;
1485         
1486         /* data */
1487         srna= RNA_def_struct(brna, "Constraint", NULL );
1488         RNA_def_struct_ui_text(srna, "Constraint", "Constraint modifying the transformation of objects and bones.");
1489         RNA_def_struct_refine_func(srna, "rna_ConstraintType_refine");
1490         RNA_def_struct_path_func(srna, "rna_Constraint_path");
1491         RNA_def_struct_sdna(srna, "bConstraint");
1492         
1493         /* strings */
1494         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1495         RNA_def_property_ui_text(prop, "Name", "");
1496         RNA_def_struct_name_property(srna, prop);
1497         
1498         /* enums */
1499         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1500         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1501         RNA_def_property_enum_sdna(prop, NULL, "type");
1502         RNA_def_property_enum_items(prop, constraint_type_items);
1503         RNA_def_property_ui_text(prop, "Type", "");
1504
1505         prop= RNA_def_property(srna, "owner_space", PROP_ENUM, PROP_NONE);
1506         RNA_def_property_enum_sdna(prop, NULL, "ownspace");
1507         RNA_def_property_enum_items(prop, space_pchan_items);
1508         RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_owner_space_itemf");
1509         RNA_def_property_ui_text(prop, "Owner Space", "Space that owner is evaluated in.");
1510
1511         prop= RNA_def_property(srna, "target_space", PROP_ENUM, PROP_NONE);
1512         RNA_def_property_enum_sdna(prop, NULL, "tarspace");
1513         RNA_def_property_enum_items(prop, space_pchan_items);
1514         RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_target_space_itemf");
1515         RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in.");
1516
1517         /* flags */
1518                 // XXX do we want to wrap this?
1519         prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
1520         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
1521         RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI.");
1522         
1523                 // XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
1524         prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
1525         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1526         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
1527         RNA_def_property_ui_text(prop, "Disabled", "Constraint has invalid settings and will not be evaluated.");
1528         
1529                 // TODO: setting this to true must ensure that all others in stack are turned off too...
1530         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
1531         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
1532         RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
1533         
1534         prop= RNA_def_property(srna, "proxy_local", PROP_BOOLEAN, PROP_NONE);
1535         RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
1536         RNA_def_property_ui_text(prop, "Proxy Local", "Constraint was added in this proxy instance (i.e. did not belong to source Armature).");
1537         
1538         /* values */
1539         prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_PERCENTAGE);
1540         RNA_def_property_float_sdna(prop, NULL, "enforce");
1541         RNA_def_property_range(prop, 0.0f, 1.0f);
1542         RNA_def_property_ui_text(prop, "Influence", "Amount of influence constraint will have on the final solution.");
1543         RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_influence_update");
1544         
1545         /* pointers */
1546         rna_def_constrainttarget(brna);
1547
1548         rna_def_constraint_childof(brna);
1549         rna_def_constraint_python(brna);
1550         rna_def_constraint_stretch_to(brna);
1551         rna_def_constraint_follow_path(brna);
1552         rna_def_constraint_locked_track(brna);
1553         rna_def_constraint_action(brna);
1554         rna_def_constraint_size_like(brna);
1555         rna_def_constraint_locate_like(brna);
1556         rna_def_constraint_rotate_like(brna);
1557         rna_def_constraint_minmax(brna);
1558         rna_def_constraint_track_to(brna);
1559         rna_def_constraint_kinematic(brna);
1560         rna_def_constraint_rigid_body_joint(brna);
1561         rna_def_constraint_clamp_to(brna);
1562         rna_def_constraint_distance_limit(brna);
1563         rna_def_constraint_size_limit(brna);
1564         rna_def_constraint_rotation_limit(brna);
1565         rna_def_constraint_location_limit(brna);
1566         rna_def_constraint_transform(brna);
1567         rna_def_constraint_shrinkwrap(brna);
1568 }
1569
1570 #endif
1571