4 * ***** BEGIN GPL LICENSE BLOCK *****
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.
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.
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.
20 * Contributor(s): Blender Foundation (2008), Joshua Leung, Roland Hess
22 * ***** END GPL LICENSE BLOCK *****
27 #include "RNA_define.h"
28 #include "RNA_types.h"
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"
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}};
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}};
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}};
85 #include "BKE_action.h"
86 #include "BKE_constraint.h"
87 #include "BKE_context.h"
88 #include "BKE_depsgraph.h"
90 #include "ED_object.h"
92 StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr)
94 bConstraint *con= (bConstraint*)ptr->data;
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;
138 return &RNA_UnknownType;
142 static char *rna_Constraint_path(PointerRNA *ptr)
144 Object *ob= ptr->id.data;
145 bConstraint *con= ptr->data;
146 bPoseChannel *pchan= get_active_posechannel(ob);
147 ListBase *actlist= get_active_constraints(ob);
150 /* check if constraint is in the given list */
152 inList= (BLI_findindex(actlist, con) != -1);
154 /* if constraint is in the list, the list is for the active bone... */
155 if ((inList) && (actlist != &ob->constraints) && (pchan))
156 return BLI_sprintfN("pose.pose_channels[\"%s\"].constraints[\"%s\"]", pchan->name, con->name);
158 return BLI_sprintfN("constraints[\"%s\"]", con->name);
161 static void rna_Constraint_update(bContext *C, PointerRNA *ptr)
163 Scene *scene= CTX_data_scene(C);
164 Object *ob= ptr->id.data;
166 if(ob->pose) update_pose_constraint_flags(ob->pose);
168 object_test_constraints(ob);
170 if(ob->type==OB_ARMATURE) DAG_object_flush_update(scene, ob, OB_RECALC_DATA|OB_RECALC_OB);
171 else DAG_object_flush_update(scene, ob, OB_RECALC_OB);
174 static void rna_Constraint_dependency_update(bContext *C, PointerRNA *ptr)
176 Object *ob= ptr->id.data;
178 rna_Constraint_update(C, ptr);
180 if(ob->pose) ob->pose->flag |= POSE_RECALC; // checks & sorts pose channels
181 DAG_scene_sort(CTX_data_scene(C));
184 static void rna_Constraint_influence_update(bContext *C, PointerRNA *ptr)
186 Object *ob= ptr->id.data;
189 ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK);
191 rna_Constraint_update(C, ptr);
194 static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *C, PointerRNA *ptr, int *free)
196 Object *ob= (Object*)ptr->id.data;
197 bConstraint *con= (bConstraint*)ptr->data;
200 EnumPropertyItem *item= NULL;
203 /* needed for doc generation */
204 RNA_enum_items_add(&item, &totitem, space_object_items);
205 RNA_enum_items_add(&item, &totitem, space_pchan_items);
206 RNA_enum_item_end(&item, &totitem);
213 if(BLI_findindex(&ob->constraints, con) == -1)
214 return space_pchan_items;
216 return space_object_items;
219 static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *C, PointerRNA *ptr, int *free)
221 bConstraint *con= (bConstraint*)ptr->data;
222 bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
223 ListBase targets = {NULL, NULL};
224 bConstraintTarget *ct;
227 EnumPropertyItem *item= NULL;
230 /* needed for doc generation */
231 RNA_enum_items_add(&item, &totitem, space_object_items);
232 RNA_enum_items_add(&item, &totitem, space_pchan_items);
233 RNA_enum_item_end(&item, &totitem);
240 if(cti && cti->get_constraint_targets) {
241 cti->get_constraint_targets(con, &targets);
243 for(ct=targets.first; ct; ct= ct->next)
244 if(ct->tar && ct->tar->type == OB_ARMATURE)
247 if(cti->flush_constraint_targets)
248 cti->flush_constraint_targets(con, &targets, 1);
251 return space_pchan_items;
254 return space_object_items;
259 static void rna_def_constrainttarget(BlenderRNA *brna)
264 srna= RNA_def_struct(brna, "ConstraintTarget", NULL);
265 RNA_def_struct_ui_text(srna, "Constraint Target", "Target object for multi-target constraints.");
266 RNA_def_struct_sdna(srna, "bConstraintTarget");
268 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
269 RNA_def_property_pointer_sdna(prop, NULL, "tar");
270 RNA_def_property_ui_text(prop, "Target", "Target Object");
271 RNA_def_property_flag(prop, PROP_EDITABLE);
272 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
274 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
275 RNA_def_property_string_sdna(prop, NULL, "subtarget");
276 RNA_def_property_ui_text(prop, "Sub-Target", "");
277 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
279 // space, flag and type still to do
282 static void rna_def_constraint_childof(BlenderRNA *brna)
287 srna= RNA_def_struct(brna, "ChildOfConstraint", "Constraint");
288 RNA_def_struct_ui_text(srna, "Child Of Constraint", "Creates constraint-based parent-child relationship.");
289 RNA_def_struct_sdna_from(srna, "bChildOfConstraint", "data");
291 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
292 RNA_def_property_pointer_sdna(prop, NULL, "tar");
293 RNA_def_property_ui_text(prop, "Target", "Target Object");
294 RNA_def_property_flag(prop, PROP_EDITABLE);
295 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
297 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
298 RNA_def_property_string_sdna(prop, NULL, "subtarget");
299 RNA_def_property_ui_text(prop, "Sub-Target", "");
300 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
302 prop= RNA_def_property(srna, "locationx", PROP_BOOLEAN, PROP_NONE);
303 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCX);
304 RNA_def_property_ui_text(prop, "Location X", "Use X Location of Parent.");
305 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
307 prop= RNA_def_property(srna, "locationy", PROP_BOOLEAN, PROP_NONE);
308 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCY);
309 RNA_def_property_ui_text(prop, "Location Y", "Use Y Location of Parent.");
310 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
312 prop= RNA_def_property(srna, "locationz", PROP_BOOLEAN, PROP_NONE);
313 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCZ);
314 RNA_def_property_ui_text(prop, "Location Z", "Use Z Location of Parent.");
315 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
317 prop= RNA_def_property(srna, "rotationx", PROP_BOOLEAN, PROP_NONE);
318 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTX);
319 RNA_def_property_ui_text(prop, "Rotation X", "Use X Rotation of Parent.");
320 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
322 prop= RNA_def_property(srna, "rotationy", PROP_BOOLEAN, PROP_NONE);
323 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTY);
324 RNA_def_property_ui_text(prop, "Rotation Y", "Use Y Rotation of Parent.");
325 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
327 prop= RNA_def_property(srna, "rotationz", PROP_BOOLEAN, PROP_NONE);
328 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTZ);
329 RNA_def_property_ui_text(prop, "Rotation Z", "Use Z Rotation of Parent.");
330 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
332 prop= RNA_def_property(srna, "sizex", PROP_BOOLEAN, PROP_NONE);
333 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEX);
334 RNA_def_property_ui_text(prop, "Size X", "Use X Scale of Parent.");
335 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
337 prop= RNA_def_property(srna, "sizey", PROP_BOOLEAN, PROP_NONE);
338 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEY);
339 RNA_def_property_ui_text(prop, "Size Y", "Use Y Scale of Parent.");
340 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
342 prop= RNA_def_property(srna, "sizez", PROP_BOOLEAN, PROP_NONE);
343 RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEZ);
344 RNA_def_property_ui_text(prop, "Size Z", "Use Z Scale of Parent.");
345 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
348 static void rna_def_constraint_python(BlenderRNA *brna)
353 srna= RNA_def_struct(brna, "PythonConstraint", "Constraint");
354 RNA_def_struct_ui_text(srna, "Python Constraint", "Uses Python script for constraint evaluation.");
355 RNA_def_struct_sdna_from(srna, "bPythonConstraint", "data");
357 prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
358 RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
359 RNA_def_property_struct_type(prop, "ConstraintTarget");
360 RNA_def_property_ui_text(prop, "Targets", "Target Objects.");
362 prop= RNA_def_property(srna, "number_of_targets", PROP_INT, PROP_NONE);
363 RNA_def_property_int_sdna(prop, NULL, "tarnum");
364 RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed.");
365 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
367 prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
368 RNA_def_property_ui_text(prop, "Script", "The text object that contains the Python script.");
369 RNA_def_property_flag(prop, PROP_EDITABLE);
370 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
372 prop= RNA_def_property(srna, "use_targets", PROP_BOOLEAN, PROP_NONE);
373 RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_USETARGETS);
374 RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel.");
375 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
377 prop= RNA_def_property(srna, "script_error", PROP_BOOLEAN, PROP_NONE);
378 RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
379 RNA_def_property_clear_flag(prop, PROP_EDITABLE);
380 RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error.");
383 static void rna_def_constraint_kinematic(BlenderRNA *brna)
388 srna= RNA_def_struct(brna, "KinematicConstraint", "Constraint");
389 RNA_def_struct_ui_text(srna, "Kinematic Constraint", "Inverse Kinematics.");
390 RNA_def_struct_sdna_from(srna, "bKinematicConstraint", "data");
392 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
393 RNA_def_property_pointer_sdna(prop, NULL, "tar");
394 RNA_def_property_ui_text(prop, "Target", "Target Object");
395 RNA_def_property_flag(prop, PROP_EDITABLE);
396 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
398 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
399 RNA_def_property_string_sdna(prop, NULL, "subtarget");
400 RNA_def_property_ui_text(prop, "Sub-Target", "");
401 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
403 prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
404 RNA_def_property_range(prop, 1, 10000);
405 RNA_def_property_ui_text(prop, "Iterations", "Maximum number of solving iterations.");
406 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
408 prop= RNA_def_property(srna, "pole_target", PROP_POINTER, PROP_NONE);
409 RNA_def_property_pointer_sdna(prop, NULL, "poletar");
410 RNA_def_property_ui_text(prop, "Pole Target", "Object for pole rotation.");
411 RNA_def_property_flag(prop, PROP_EDITABLE);
412 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
414 prop= RNA_def_property(srna, "pole_subtarget", PROP_STRING, PROP_NONE);
415 RNA_def_property_string_sdna(prop, NULL, "polesubtarget");
416 RNA_def_property_ui_text(prop, "Pole Sub-Target", "");
417 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
419 prop= RNA_def_property(srna, "pole_angle", PROP_FLOAT, PROP_ANGLE); // XXX - todo, convert to rad
420 RNA_def_property_float_sdna(prop, NULL, "poleangle");
421 RNA_def_property_range(prop, 0.0, 180.f);
422 RNA_def_property_ui_text(prop, "Pole Angle", "Pole rotation offset.");
423 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
425 prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
426 RNA_def_property_range(prop, 0.01, 1.f);
427 RNA_def_property_ui_text(prop, "Weight", "For Tree-IK: Weight of position control for this target.");
429 prop= RNA_def_property(srna, "orient_weight", PROP_FLOAT, PROP_NONE);
430 RNA_def_property_float_sdna(prop, NULL, "orientweight");
431 RNA_def_property_range(prop, 0.01, 1.f);
432 RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target.");
433 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
435 prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
436 RNA_def_property_int_sdna(prop, NULL, "rootbone");
437 RNA_def_property_range(prop, 0, 255);
438 RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones.");
439 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
441 prop= RNA_def_property(srna, "tail", PROP_BOOLEAN, PROP_NONE);
442 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_TIP);
443 RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain.");
444 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
446 prop= RNA_def_property(srna, "rotation", PROP_BOOLEAN, PROP_NONE);
447 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_ROT);
448 RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target.");
449 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
451 prop= RNA_def_property(srna, "targetless", PROP_BOOLEAN, PROP_NONE);
452 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_AUTO);
453 RNA_def_property_ui_text(prop, "Targetless", "Use targetless IK.");
454 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
456 prop= RNA_def_property(srna, "stretch", PROP_BOOLEAN, PROP_NONE);
457 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_STRETCH);
458 RNA_def_property_ui_text(prop, "Stretch", "Enable IK Stretching.");
459 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
462 static void rna_def_constraint_track_to(BlenderRNA *brna)
467 static EnumPropertyItem track_items[] = {
468 {TRACK_X, "TRACK_X", 0, "X", ""},
469 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
470 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
471 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
472 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
473 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
474 {0, NULL, 0, NULL, NULL}};
476 static EnumPropertyItem up_items[] = {
477 {TRACK_X, "UP_X", 0, "X", ""},
478 {TRACK_Y, "UP_Y", 0, "Y", ""},
479 {TRACK_Z, "UP_Z", 0, "Z", ""},
480 {0, NULL, 0, NULL, NULL}};
482 srna= RNA_def_struct(brna, "TrackToConstraint", "Constraint");
483 RNA_def_struct_ui_text(srna, "Track To Constraint", "Aims the constrained object toward the target.");
484 RNA_def_struct_sdna_from(srna, "bTrackToConstraint", "data");
486 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
487 RNA_def_property_pointer_sdna(prop, NULL, "tar");
488 RNA_def_property_ui_text(prop, "Target", "Target Object");
489 RNA_def_property_flag(prop, PROP_EDITABLE);
490 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
492 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
493 RNA_def_property_string_sdna(prop, NULL, "subtarget");
494 RNA_def_property_ui_text(prop, "Sub-Target", "");
495 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
497 prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
498 RNA_def_property_enum_sdna(prop, NULL, "reserved1");
499 RNA_def_property_enum_items(prop, track_items);
500 RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object.");
501 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
503 prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
504 RNA_def_property_enum_sdna(prop, NULL, "reserved2");
505 RNA_def_property_enum_items(prop, up_items);
506 RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward.");
507 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
509 prop= RNA_def_property(srna, "target_z", PROP_BOOLEAN, PROP_NONE);
510 RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
511 RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction.");
512 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
515 static void rna_def_constraint_rotate_like(BlenderRNA *brna)
520 srna= RNA_def_struct(brna, "CopyRotationConstraint", "Constraint");
521 RNA_def_struct_ui_text(srna, "Copy Rotation Constraint", "Copies the rotation of the target.");
522 RNA_def_struct_sdna_from(srna, "bRotateLikeConstraint", "data");
524 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
525 RNA_def_property_pointer_sdna(prop, NULL, "tar");
526 RNA_def_property_ui_text(prop, "Target", "Target Object");
527 RNA_def_property_flag(prop, PROP_EDITABLE);
528 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
530 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
531 RNA_def_property_string_sdna(prop, NULL, "subtarget");
532 RNA_def_property_ui_text(prop, "Sub-Target", "");
533 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
535 prop= RNA_def_property(srna, "rotate_like_x", PROP_BOOLEAN, PROP_NONE);
536 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
537 RNA_def_property_ui_text(prop, "Like X", "Copy the target's X rotation.");
538 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
540 prop= RNA_def_property(srna, "rotate_like_y", PROP_BOOLEAN, PROP_NONE);
541 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y);
542 RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y rotation.");
543 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
545 prop= RNA_def_property(srna, "rotate_like_z", PROP_BOOLEAN, PROP_NONE);
546 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z);
547 RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z rotation.");
548 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
550 prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
551 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X_INVERT);
552 RNA_def_property_ui_text(prop, "Invert X", "Invert the X rotation.");
553 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
555 prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
556 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y_INVERT);
557 RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y rotation.");
558 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
560 prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
561 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z_INVERT);
562 RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation.");
563 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
565 prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
566 RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET);
567 RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation.");
568 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
571 static void rna_def_constraint_locate_like(BlenderRNA *brna)
576 srna= RNA_def_struct(brna, "CopyLocationConstraint", "Constraint");
577 RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target.");
579 prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_PERCENTAGE);
580 RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
581 RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1.");
582 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
584 RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "data");
586 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
587 RNA_def_property_pointer_sdna(prop, NULL, "tar");
588 RNA_def_property_flag(prop, PROP_EDITABLE);
589 RNA_def_property_ui_text(prop, "Target", "Target Object");
590 RNA_def_property_flag(prop, PROP_EDITABLE);
591 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
593 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
594 RNA_def_property_string_sdna(prop, NULL, "subtarget");
595 RNA_def_property_ui_text(prop, "Sub-Target", "");
596 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
598 prop= RNA_def_property(srna, "locate_like_x", PROP_BOOLEAN, PROP_NONE);
599 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
600 RNA_def_property_ui_text(prop, "Like X", "Copy the target's X location.");
601 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
603 prop= RNA_def_property(srna, "locate_like_y", PROP_BOOLEAN, PROP_NONE);
604 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);
605 RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y location.");
606 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
608 prop= RNA_def_property(srna, "locate_like_z", PROP_BOOLEAN, PROP_NONE);
609 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z);
610 RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z location.");
611 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
613 prop= RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
614 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X_INVERT);
615 RNA_def_property_ui_text(prop, "Invert X", "Invert the X location.");
616 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
618 prop= RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
619 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y_INVERT);
620 RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y location.");
621 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
623 prop= RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
624 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z_INVERT);
625 RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z location.");
626 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
628 prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
629 RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
630 RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location.");
631 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
634 static void rna_def_constraint_minmax(BlenderRNA *brna)
639 static EnumPropertyItem minmax_items[] = {
640 {LOCLIKE_X, "FLOOR_X", 0, "X", ""},
641 {LOCLIKE_Y, "FLOOR_Y", 0, "Y", ""},
642 {LOCLIKE_Z, "FLOOR_Z", 0, "Z", ""},
643 {LOCLIKE_X_INVERT, "FLOOR_NEGATIVE_X", 0, "-X", ""},
644 {LOCLIKE_Y_INVERT, "FLOOR_NEGATIVE_Y", 0, "-Y", ""},
645 {LOCLIKE_Z_INVERT, "FLOOR_NEGATIVE_Z", 0, "-Z", ""},
646 {0, NULL, 0, NULL, NULL}};
648 srna= RNA_def_struct(brna, "FloorConstraint", "Constraint");
649 RNA_def_struct_ui_text(srna, "Floor Constraint", "Uses the target object for location limitation.");
650 RNA_def_struct_sdna_from(srna, "bMinMaxConstraint","data");
652 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
653 RNA_def_property_pointer_sdna(prop, NULL, "tar");
654 RNA_def_property_ui_text(prop, "Target", "Target Object");
655 RNA_def_property_flag(prop, PROP_EDITABLE);
656 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
658 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
659 RNA_def_property_string_sdna(prop, NULL, "subtarget");
660 RNA_def_property_ui_text(prop, "Sub-Target", "");
661 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
663 prop= RNA_def_property(srna, "floor_location", PROP_ENUM, PROP_NONE);
664 RNA_def_property_enum_sdna(prop, NULL, "minmaxflag");
665 RNA_def_property_enum_items(prop, minmax_items);
666 RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through.");
667 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
669 prop= RNA_def_property(srna, "sticky", PROP_BOOLEAN, PROP_NONE);
670 RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
671 RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained.");
672 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
674 prop= RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
675 RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_USEROT);
676 RNA_def_property_ui_text(prop, "Use Rotation", "Use the target's rotation to determine floor.");
677 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
679 prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
680 RNA_def_property_range(prop, 0.0, 100.f);
681 RNA_def_property_ui_text(prop, "Offset", "Offset of floor from object center.");
682 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
685 static void rna_def_constraint_size_like(BlenderRNA *brna)
690 srna= RNA_def_struct(brna, "CopyScaleConstraint", "Constraint");
691 RNA_def_struct_ui_text(srna, "Copy Scale Constraint", "Copies the scale of the target.");
692 RNA_def_struct_sdna_from(srna, "bSizeLikeConstraint", "data");
694 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
695 RNA_def_property_pointer_sdna(prop, NULL, "tar");
696 RNA_def_property_flag(prop, PROP_EDITABLE);
697 RNA_def_property_ui_text(prop, "Target", "Target Object");
698 RNA_def_property_flag(prop, PROP_EDITABLE);
699 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
701 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
702 RNA_def_property_string_sdna(prop, NULL, "subtarget");
703 RNA_def_property_ui_text(prop, "Sub-Target", "");
704 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
706 prop= RNA_def_property(srna, "size_like_x", PROP_BOOLEAN, PROP_NONE);
707 RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_X);
708 RNA_def_property_ui_text(prop, "Like X", "Copy the target's X scale.");
709 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
711 prop= RNA_def_property(srna, "size_like_y", PROP_BOOLEAN, PROP_NONE);
712 RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Y);
713 RNA_def_property_ui_text(prop, "Like Y", "Copy the target's Y scale.");
714 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
716 prop= RNA_def_property(srna, "size_like_z", PROP_BOOLEAN, PROP_NONE);
717 RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Z);
718 RNA_def_property_ui_text(prop, "Like Z", "Copy the target's Z scale.");
719 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
721 prop= RNA_def_property(srna, "offset", PROP_BOOLEAN, PROP_NONE);
722 RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET);
723 RNA_def_property_ui_text(prop, "Offset", "Add original scale into copied scale.");
724 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
727 static void rna_def_constraint_action(BlenderRNA *brna)
732 static EnumPropertyItem transform_channel_items[] = {
733 {20, "LOCATION_X", 0, "Location X", ""},
734 {21, "LOCATION_Y", 0, "Location Y", ""},
735 {22, "LOCATION_Z", 0, "Location Z", ""},
736 {00, "ROTATION_X", 0, "Rotation X", ""},
737 {01, "ROTATION_Y", 0, "Rotation Y", ""},
738 {02, "ROTATION_Z", 0, "Rotation Z", ""},
739 {10, "SCALE_X", 0, "Scale X", ""},
740 {11, "SCALE_Y", 0, "Scale Y", ""},
741 {12, "SCALE_Z", 0, "Scale Z", ""},
742 {0, NULL, 0, NULL, NULL}};
744 srna= RNA_def_struct(brna, "ActionConstraint", "Constraint");
745 RNA_def_struct_ui_text(srna, "Action Constraint", "Map an action to the transform axes of a bone.");
746 RNA_def_struct_sdna_from(srna, "bActionConstraint", "data");
748 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
749 RNA_def_property_pointer_sdna(prop, NULL, "tar");
750 RNA_def_property_ui_text(prop, "Target", "Target Object");
751 RNA_def_property_flag(prop, PROP_EDITABLE);
752 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
754 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
755 RNA_def_property_string_sdna(prop, NULL, "subtarget");
756 RNA_def_property_ui_text(prop, "Sub-Target", "");
757 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
759 prop= RNA_def_property(srna, "transform_channel", PROP_ENUM, PROP_NONE);
760 RNA_def_property_enum_sdna(prop, NULL, "type");
761 RNA_def_property_enum_items(prop, transform_channel_items);
762 RNA_def_property_ui_text(prop, "Transform Channel", "Transformation channel from the target that is used to key the Action.");
763 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
765 prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
766 RNA_def_property_pointer_sdna(prop, NULL, "act");
767 RNA_def_property_ui_text(prop, "Action", "");
768 RNA_def_property_flag(prop, PROP_EDITABLE);
769 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
771 prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_TIME);
772 RNA_def_property_int_sdna(prop, NULL, "start");
773 RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
774 RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use.");
775 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
777 prop= RNA_def_property(srna, "end_frame", PROP_INT, PROP_TIME);
778 RNA_def_property_int_sdna(prop, NULL, "end");
779 RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
780 RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use.");
781 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
783 prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
784 RNA_def_property_float_sdna(prop, NULL, "max");
785 RNA_def_property_range(prop, 0.0, 1000.f);
786 RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range.");
787 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
789 prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
790 RNA_def_property_float_sdna(prop, NULL, "min");
791 RNA_def_property_range(prop, 0.0, 1000.f);
792 RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range.");
793 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
796 static void rna_def_constraint_locked_track(BlenderRNA *brna)
801 static EnumPropertyItem locktrack_items[] = {
802 {TRACK_X, "TRACK_X", 0, "X", ""},
803 {TRACK_Y, "TRACK_Y", 0, "Y", ""},
804 {TRACK_Z, "TRACK_Z", 0, "Z", ""},
805 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
806 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
807 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
808 {0, NULL, 0, NULL, NULL}};
810 static EnumPropertyItem lock_items[] = {
811 {TRACK_X, "LOCK_X", 0, "X", ""},
812 {TRACK_Y, "LOCK_Y", 0, "Y", ""},
813 {TRACK_Z, "LOCK_Z", 0, "Z", ""},
814 {0, NULL, 0, NULL, NULL}};
816 srna= RNA_def_struct(brna, "LockedTrackConstraint", "Constraint");
817 RNA_def_struct_ui_text(srna, "Locked Track Constraint", "Points toward the target along the track axis, while locking the other axis.");
818 RNA_def_struct_sdna_from(srna, "bLockTrackConstraint", "data");
820 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
821 RNA_def_property_pointer_sdna(prop, NULL, "tar");
822 RNA_def_property_ui_text(prop, "Target", "Target Object");
823 RNA_def_property_flag(prop, PROP_EDITABLE);
824 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
826 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
827 RNA_def_property_string_sdna(prop, NULL, "subtarget");
828 RNA_def_property_ui_text(prop, "Sub-Target", "");
829 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
831 prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
832 RNA_def_property_enum_sdna(prop, NULL, "trackflag");
833 RNA_def_property_enum_items(prop, locktrack_items);
834 RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object.");
835 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
837 prop= RNA_def_property(srna, "locked", PROP_ENUM, PROP_NONE);
838 RNA_def_property_enum_sdna(prop, NULL, "lockflag");
839 RNA_def_property_enum_items(prop, lock_items);
840 RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward.");
841 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
844 static void rna_def_constraint_follow_path(BlenderRNA *brna)
849 static EnumPropertyItem forwardpath_items[] = {
850 {TRACK_X, "FORWARD_X", 0, "X", ""},
851 {TRACK_Y, "FORWARD_Y", 0, "Y", ""},
852 {TRACK_Z, "FORWARD_Z", 0, "Z", ""},
853 {TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
854 {TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
855 {TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
856 {0, NULL, 0, NULL, NULL}};
858 static EnumPropertyItem pathup_items[] = {
859 {TRACK_X, "UP_X", 0, "X", ""},
860 {TRACK_Y, "UP_Y", 0, "Y", ""},
861 {TRACK_Z, "UP_Z", 0, "Z", ""},
862 {0, NULL, 0, NULL, NULL}};
864 srna= RNA_def_struct(brna, "FollowPathConstraint", "Constraint");
865 RNA_def_struct_ui_text(srna, "Follow Path Constraint", "Locks motion to the target path.");
866 RNA_def_struct_sdna_from(srna, "bFollowPathConstraint", "data");
868 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
869 RNA_def_property_pointer_sdna(prop, NULL, "tar");
870 RNA_def_property_ui_text(prop, "Target", "Target Object");
871 RNA_def_property_flag(prop, PROP_EDITABLE);
872 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
874 prop= RNA_def_property(srna, "offset", PROP_INT, PROP_TIME);
875 RNA_def_property_range(prop, -300000.0, 300000.f);
876 RNA_def_property_ui_text(prop, "Offset", "Offset from the position corresponding to the time frame.");
877 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
879 prop= RNA_def_property(srna, "forward", PROP_ENUM, PROP_NONE);
880 RNA_def_property_enum_sdna(prop, NULL, "trackflag");
881 RNA_def_property_enum_items(prop, forwardpath_items);
882 RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path.");
883 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
885 prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
886 RNA_def_property_enum_sdna(prop, NULL, "upflag");
887 RNA_def_property_enum_items(prop, pathup_items);
888 RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward.");
889 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
891 prop= RNA_def_property(srna, "curve_follow", PROP_BOOLEAN, PROP_NONE);
892 RNA_def_property_boolean_sdna(prop, NULL, "followflag", 1);
893 RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve.");
894 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
897 static void rna_def_constraint_stretch_to(BlenderRNA *brna)
902 static EnumPropertyItem volume_items[] = {
903 {VOLUME_XZ, "VOLUME_XZX", 0, "XZ", ""},
904 {VOLUME_X, "VOLUME_X", 0, "Y", ""},
905 {VOLUME_Z, "VOLUME_Z", 0, "Z", ""},
906 {NO_VOLUME, "NO_VOLUME", 0, "None", ""},
907 {0, NULL, 0, NULL, NULL}};
909 static EnumPropertyItem plane_items[] = {
910 {PLANE_X, "PLANE_X", 0, "X", "Keep X Axis"},
911 {PLANE_Z, "PLANE_Z", 0, "Z", "Keep Z Axis"},
912 {0, NULL, 0, NULL, NULL}};
914 srna= RNA_def_struct(brna, "StretchToConstraint", "Constraint");
915 RNA_def_struct_ui_text(srna, "Stretch To Constraint", "Stretches to meet the target object.");
916 RNA_def_struct_sdna_from(srna, "bStretchToConstraint", "data");
918 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
919 RNA_def_property_pointer_sdna(prop, NULL, "tar");
920 RNA_def_property_ui_text(prop, "Target", "Target Object");
921 RNA_def_property_flag(prop, PROP_EDITABLE);
922 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
924 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
925 RNA_def_property_string_sdna(prop, NULL, "subtarget");
926 RNA_def_property_ui_text(prop, "Sub-Target", "");
927 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
929 prop= RNA_def_property(srna, "volume", PROP_ENUM, PROP_NONE);
930 RNA_def_property_enum_sdna(prop, NULL, "volmode");
931 RNA_def_property_enum_items(prop, volume_items);
932 RNA_def_property_ui_text(prop, "Maintain Volume", "Maintain the object's volume as it stretches.");
933 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
935 prop= RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
936 RNA_def_property_enum_sdna(prop, NULL, "plane");
937 RNA_def_property_enum_items(prop, plane_items);
938 RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch.");
939 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
941 prop= RNA_def_property(srna, "original_length", PROP_FLOAT, PROP_DISTANCE);
942 RNA_def_property_float_sdna(prop, NULL, "orglength");
943 RNA_def_property_range(prop, 0.0, 100.f);
944 RNA_def_property_ui_text(prop, "Original Length", "Length at rest position.");
945 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
947 prop= RNA_def_property(srna, "bulge", PROP_FLOAT, PROP_NONE);
948 RNA_def_property_range(prop, 0.0, 100.f);
949 RNA_def_property_ui_text(prop, "Volume Variation", "Factor between volume variation and stretching.");
950 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
953 static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
958 static EnumPropertyItem pivot_items[] = {
959 {CONSTRAINT_RB_BALL, "BALL", 0, "Ball", ""},
960 {CONSTRAINT_RB_HINGE, "HINGE", 0, "Hinge", ""},
961 {CONSTRAINT_RB_CONETWIST, "CONE_TWIST", 0, "Cone Twist", ""},
962 {CONSTRAINT_RB_GENERIC6DOF, "GENERIC_6_DOF", 0, "Generic 6 DoF", ""},
963 {0, NULL, 0, NULL, NULL}};
965 srna= RNA_def_struct(brna, "RigidBodyJointConstraint", "Constraint");
966 RNA_def_struct_ui_text(srna, "Rigid Body Joint Constraint", "For use with the Game Engine.");
967 RNA_def_struct_sdna_from(srna, "bRigidBodyJointConstraint", "data");
969 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
970 RNA_def_property_pointer_sdna(prop, NULL, "tar");
971 RNA_def_property_ui_text(prop, "Target", "Target Object.");
972 RNA_def_property_flag(prop, PROP_EDITABLE);
973 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
975 prop= RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
976 RNA_def_property_ui_text(prop, "Child Object", "Child object.");
977 RNA_def_property_flag(prop, PROP_EDITABLE);
978 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
980 prop= RNA_def_property(srna, "pivot_type", PROP_ENUM, PROP_NONE);
981 RNA_def_property_enum_sdna(prop, NULL, "type");
982 RNA_def_property_enum_items(prop, pivot_items);
983 RNA_def_property_ui_text(prop, "Pivot Type", "");
984 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
986 prop= RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_DISTANCE);
987 RNA_def_property_float_sdna(prop, NULL, "pivX");
988 RNA_def_property_range(prop, -1000.0, 1000.f);
989 RNA_def_property_ui_text(prop, "Pivot X", "Offset pivot on X.");
990 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
992 prop= RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_DISTANCE);
993 RNA_def_property_float_sdna(prop, NULL, "pivY");
994 RNA_def_property_range(prop, -1000.0, 1000.f);
995 RNA_def_property_ui_text(prop, "Pivot Y", "Offset pivot on Y.");
996 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
998 prop= RNA_def_property(srna, "pivot_z", PROP_FLOAT, PROP_DISTANCE);
999 RNA_def_property_float_sdna(prop, NULL, "pivZ");
1000 RNA_def_property_range(prop, -1000.0, 1000.f);
1001 RNA_def_property_ui_text(prop, "Pivot Z", "Offset pivot on Z.");
1002 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1004 prop= RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_ANGLE); // XXX - convert to radians
1005 RNA_def_property_float_sdna(prop, NULL, "axX");
1006 RNA_def_property_range(prop, -360.0, 360.f);
1007 RNA_def_property_ui_text(prop, "Axis X", "Rotate pivot on X axis in degrees.");
1008 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1010 prop= RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_ANGLE); // XXX - convert to radians
1011 RNA_def_property_float_sdna(prop, NULL, "axY");
1012 RNA_def_property_range(prop, -360.0, 360.f);
1013 RNA_def_property_ui_text(prop, "Axis Y", "Rotate pivot on Y axis in degrees.");
1014 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1016 prop= RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_ANGLE); // XXX - convert to radians
1017 RNA_def_property_float_sdna(prop, NULL, "axZ");
1018 RNA_def_property_range(prop, -360.0, 360.f);
1019 RNA_def_property_ui_text(prop, "Axis Z", "Rotate pivot on Z axis in degrees.");
1020 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1022 /* XXX not sure how to wrap the two 6 element arrays for the generic joint */
1023 //float minLimit[6];
1024 //float maxLimit[6];
1026 prop= RNA_def_property(srna, "disable_linked_collision", PROP_BOOLEAN, PROP_NONE);
1027 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
1028 RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies.");
1029 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1031 prop= RNA_def_property(srna, "draw_pivot", PROP_BOOLEAN, PROP_NONE);
1032 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
1033 RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view.");
1034 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1037 static void rna_def_constraint_clamp_to(BlenderRNA *brna)
1042 static EnumPropertyItem clamp_items[] = {
1043 {CLAMPTO_AUTO, "CLAMPTO_AUTO", 0, "Auto", ""},
1044 {CLAMPTO_X, "CLAMPTO_X", 0, "X", ""},
1045 {CLAMPTO_Y, "CLAMPTO_Y", 0, "Y", ""},
1046 {CLAMPTO_Z, "CLAMPTO_Z", 0, "Z", ""},
1047 {0, NULL, 0, NULL, NULL}};
1049 srna= RNA_def_struct(brna, "ClampToConstraint", "Constraint");
1050 RNA_def_struct_ui_text(srna, "Clamp To Constraint", "Constrains an object's location to the nearest point along the target path.");
1051 RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
1053 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1054 RNA_def_property_pointer_sdna(prop, NULL, "tar");
1055 RNA_def_property_ui_text(prop, "Target", "Target Object");
1056 RNA_def_property_flag(prop, PROP_EDITABLE);
1057 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1059 prop= RNA_def_property(srna, "main_axis", PROP_ENUM, PROP_NONE);
1060 RNA_def_property_enum_sdna(prop, NULL, "flag");
1061 RNA_def_property_enum_items(prop, clamp_items);
1062 RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement.");
1063 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1065 prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
1066 RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
1067 RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box.");
1068 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1071 static void rna_def_constraint_transform(BlenderRNA *brna)
1076 static EnumPropertyItem transform_items[] = {
1077 {0, "LOCATION", 0, "Loc", ""},
1078 {1, "ROTATION", 0, "Rot", ""},
1079 {2, "SCALE", 0, "Scale", ""},
1080 {0, NULL, 0, NULL, NULL}};
1082 static EnumPropertyItem axis_map_items[] = {
1083 {0, "X", 0, "X", ""},
1084 {1, "Y", 0, "Y", ""},
1085 {2, "Z", 0, "Z", ""},
1086 {0, NULL, 0, NULL, NULL}};
1088 srna= RNA_def_struct(brna, "TransformConstraint", "Constraint");
1089 RNA_def_struct_ui_text(srna, "Transformation Constraint", "Maps transformations of the target to the object.");
1090 RNA_def_struct_sdna_from(srna, "bTransformConstraint", "data");
1092 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1093 RNA_def_property_pointer_sdna(prop, NULL, "tar");
1094 RNA_def_property_ui_text(prop, "Target", "Target Object");
1095 RNA_def_property_flag(prop, PROP_EDITABLE);
1096 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1098 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1099 RNA_def_property_string_sdna(prop, NULL, "subtarget");
1100 RNA_def_property_ui_text(prop, "Sub-Target", "");
1101 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1103 prop= RNA_def_property(srna, "map_from", PROP_ENUM, PROP_NONE);
1104 RNA_def_property_enum_sdna(prop, NULL, "from");
1105 RNA_def_property_enum_items(prop, transform_items);
1106 RNA_def_property_ui_text(prop, "Map From", "The transformation type to use from the target.");
1107 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1109 prop= RNA_def_property(srna, "map_to", PROP_ENUM, PROP_NONE);
1110 RNA_def_property_enum_sdna(prop, NULL, "to");
1111 RNA_def_property_enum_items(prop, transform_items);
1112 RNA_def_property_ui_text(prop, "Map To", "The transformation type to affect of the constrained object.");
1113 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1115 prop= RNA_def_property(srna, "map_to_x_from", PROP_ENUM, PROP_NONE);
1116 RNA_def_property_enum_sdna(prop, NULL, "map[0]");
1117 RNA_def_property_enum_items(prop, axis_map_items);
1118 RNA_def_property_ui_text(prop, "Map To X From", "The source axis constrained object's X axis uses.");
1119 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1121 prop= RNA_def_property(srna, "map_to_y_from", PROP_ENUM, PROP_NONE);
1122 RNA_def_property_enum_sdna(prop, NULL, "map[1]");
1123 RNA_def_property_enum_items(prop, axis_map_items);
1124 RNA_def_property_ui_text(prop, "Map To Y From", "The source axis constrained object's Y axis uses.");
1125 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1127 prop= RNA_def_property(srna, "map_to_z_from", PROP_ENUM, PROP_NONE);
1128 RNA_def_property_enum_sdna(prop, NULL, "map[2]");
1129 RNA_def_property_enum_items(prop, axis_map_items);
1130 RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses.");
1131 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1133 prop= RNA_def_property(srna, "extrapolate_motion", PROP_BOOLEAN, PROP_NONE);
1134 RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
1135 RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges.");
1136 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1138 prop= RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_DISTANCE);
1139 RNA_def_property_float_sdna(prop, NULL, "from_min[0]");
1140 RNA_def_property_range(prop, 0.0, 1000.f);
1141 RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion.");
1142 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1144 prop= RNA_def_property(srna, "from_min_y", PROP_FLOAT, PROP_DISTANCE);
1145 RNA_def_property_float_sdna(prop, NULL, "from_min[1]");
1146 RNA_def_property_range(prop, 0.0, 1000.f);
1147 RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion.");
1148 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1150 prop= RNA_def_property(srna, "from_min_z", PROP_FLOAT, PROP_DISTANCE);
1151 RNA_def_property_float_sdna(prop, NULL, "from_min[2]");
1152 RNA_def_property_range(prop, 0.0, 1000.f);
1153 RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion.");
1154 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1156 prop= RNA_def_property(srna, "from_max_x", PROP_FLOAT, PROP_DISTANCE);
1157 RNA_def_property_float_sdna(prop, NULL, "from_max[0]");
1158 RNA_def_property_range(prop, 0.0, 1000.f);
1159 RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion.");
1160 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1162 prop= RNA_def_property(srna, "from_max_y", PROP_FLOAT, PROP_DISTANCE);
1163 RNA_def_property_float_sdna(prop, NULL, "from_max[1]");
1164 RNA_def_property_range(prop, 0.0, 1000.f);
1165 RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion.");
1166 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1168 prop= RNA_def_property(srna, "from_max_z", PROP_FLOAT, PROP_DISTANCE);
1169 RNA_def_property_float_sdna(prop, NULL, "from_max[2]");
1170 RNA_def_property_range(prop, 0.0, 1000.f);
1171 RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source motion.");
1172 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1174 prop= RNA_def_property(srna, "to_min_x", PROP_FLOAT, PROP_DISTANCE);
1175 RNA_def_property_float_sdna(prop, NULL, "to_min[0]");
1176 RNA_def_property_range(prop, 0.0, 1000.f);
1177 RNA_def_property_ui_text(prop, "To Minimum X", "Bottom range of X axis destination motion.");
1178 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1180 prop= RNA_def_property(srna, "to_min_y", PROP_FLOAT, PROP_DISTANCE);
1181 RNA_def_property_float_sdna(prop, NULL, "to_min[1]");
1182 RNA_def_property_range(prop, 0.0, 1000.f);
1183 RNA_def_property_ui_text(prop, "To Minimum Y", "Bottom range of Y axis destination motion.");
1184 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1186 prop= RNA_def_property(srna, "to_min_z", PROP_FLOAT, PROP_DISTANCE);
1187 RNA_def_property_float_sdna(prop, NULL, "to_min[2]");
1188 RNA_def_property_range(prop, 0.0, 1000.f);
1189 RNA_def_property_ui_text(prop, "To Minimum Z", "Bottom range of Z axis destination motion.");
1190 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1192 prop= RNA_def_property(srna, "to_max_x", PROP_FLOAT, PROP_DISTANCE);
1193 RNA_def_property_float_sdna(prop, NULL, "to_max[0]");
1194 RNA_def_property_range(prop, 0.0, 1000.f);
1195 RNA_def_property_ui_text(prop, "To Maximum X", "Top range of X axis destination motion.");
1196 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1198 prop= RNA_def_property(srna, "to_max_y", PROP_FLOAT, PROP_DISTANCE);
1199 RNA_def_property_float_sdna(prop, NULL, "to_max[1]");
1200 RNA_def_property_range(prop, 0.0, 1000.f);
1201 RNA_def_property_ui_text(prop, "To Maximum Y", "Top range of Y axis destination motion.");
1202 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1204 prop= RNA_def_property(srna, "to_max_z", PROP_FLOAT, PROP_DISTANCE);
1205 RNA_def_property_float_sdna(prop, NULL, "to_max[2]");
1206 RNA_def_property_range(prop, 0.0, 1000.f);
1207 RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion.");
1208 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1211 static void rna_def_constraint_location_limit(BlenderRNA *brna)
1216 srna= RNA_def_struct(brna, "LimitLocationConstraint", "Constraint");
1217 RNA_def_struct_ui_text(srna, "Limit Location Constraint", "Limits the location of the constrained object.");
1218 RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
1220 prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
1221 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1222 RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
1223 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1225 prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
1226 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1227 RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
1228 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1230 prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
1231 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1232 RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
1233 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1235 prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
1236 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1237 RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
1238 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1240 prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
1241 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1242 RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
1243 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1245 prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
1246 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1247 RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
1248 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1250 prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_DISTANCE);
1251 RNA_def_property_float_sdna(prop, NULL, "xmin");
1252 RNA_def_property_range(prop, -1000.0, 1000.f);
1253 RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1254 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1256 prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_DISTANCE);
1257 RNA_def_property_float_sdna(prop, NULL, "ymin");
1258 RNA_def_property_range(prop, -1000.0, 1000.f);
1259 RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1260 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1262 prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_DISTANCE);
1263 RNA_def_property_float_sdna(prop, NULL, "zmin");
1264 RNA_def_property_range(prop, -1000.0, 1000.f);
1265 RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1266 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1268 prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_DISTANCE);
1269 RNA_def_property_float_sdna(prop, NULL, "xmax");
1270 RNA_def_property_range(prop, -1000.0, 1000.f);
1271 RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1272 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1274 prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_DISTANCE);
1275 RNA_def_property_float_sdna(prop, NULL, "ymax");
1276 RNA_def_property_range(prop, -1000.0, 1000.f);
1277 RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1278 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1280 prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_DISTANCE);
1281 RNA_def_property_float_sdna(prop, NULL, "zmax");
1282 RNA_def_property_range(prop, -1000.0, 1000.f);
1283 RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1284 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1286 prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1287 RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1288 RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1289 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1292 static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
1297 srna= RNA_def_struct(brna, "LimitRotationConstraint", "Constraint");
1298 RNA_def_struct_ui_text(srna, "Limit Rotation Constraint", "Limits the rotation of the constrained object.");
1299 RNA_def_struct_sdna_from(srna, "bRotLimitConstraint", "data");
1301 prop= RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
1302 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XROT);
1303 RNA_def_property_ui_text(prop, "Limit X", "Use the minimum X value.");
1304 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1306 prop= RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
1307 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YROT);
1308 RNA_def_property_ui_text(prop, "Limit Y", "Use the minimum Y value.");
1309 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1311 prop= RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
1312 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZROT);
1313 RNA_def_property_ui_text(prop, "Limit Z", "Use the minimum Z value.");
1314 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1316 prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_ANGLE);
1317 RNA_def_property_float_sdna(prop, NULL, "xmin");
1318 RNA_def_property_range(prop, -1000.0, 1000.f);
1319 RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1320 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1322 prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_ANGLE);
1323 RNA_def_property_float_sdna(prop, NULL, "ymin");
1324 RNA_def_property_range(prop, -1000.0, 1000.f);
1325 RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1326 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1328 prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_ANGLE);
1329 RNA_def_property_float_sdna(prop, NULL, "zmin");
1330 RNA_def_property_range(prop, -1000.0, 1000.f);
1331 RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1332 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1334 prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_ANGLE);
1335 RNA_def_property_float_sdna(prop, NULL, "xmax");
1336 RNA_def_property_range(prop, -1000.0, 1000.f);
1337 RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1338 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1340 prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_ANGLE);
1341 RNA_def_property_float_sdna(prop, NULL, "ymax");
1342 RNA_def_property_range(prop, -1000.0, 1000.f);
1343 RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1344 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1346 prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_ANGLE);
1347 RNA_def_property_float_sdna(prop, NULL, "zmax");
1348 RNA_def_property_range(prop, -1000.0, 1000.f);
1349 RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1350 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1352 prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1353 RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1354 RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1355 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1358 static void rna_def_constraint_size_limit(BlenderRNA *brna)
1363 srna= RNA_def_struct(brna, "LimitScaleConstraint", "Constraint");
1364 RNA_def_struct_ui_text(srna, "Limit Size Constraint", "Limits the scaling of the constrained object.");
1365 RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
1367 prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
1368 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
1369 RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
1370 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1372 prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
1373 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
1374 RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
1375 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1377 prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
1378 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
1379 RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value.");
1380 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1382 prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
1383 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
1384 RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
1385 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1387 prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
1388 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
1389 RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
1390 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1392 prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
1393 RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
1394 RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value.");
1395 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1397 prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
1398 RNA_def_property_float_sdna(prop, NULL, "xmin");
1399 RNA_def_property_range(prop, -1000.0, 1000.f);
1400 RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
1401 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1403 prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
1404 RNA_def_property_float_sdna(prop, NULL, "ymin");
1405 RNA_def_property_range(prop, -1000.0, 1000.f);
1406 RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
1407 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1409 prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
1410 RNA_def_property_float_sdna(prop, NULL, "zmin");
1411 RNA_def_property_range(prop, -1000.0, 1000.f);
1412 RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow.");
1413 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1415 prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
1416 RNA_def_property_float_sdna(prop, NULL, "xmax");
1417 RNA_def_property_range(prop, -1000.0, 1000.f);
1418 RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
1419 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1421 prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
1422 RNA_def_property_float_sdna(prop, NULL, "ymax");
1423 RNA_def_property_range(prop, -1000.0, 1000.f);
1424 RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
1425 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1427 prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
1428 RNA_def_property_float_sdna(prop, NULL, "zmax");
1429 RNA_def_property_range(prop, -1000.0, 1000.f);
1430 RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow.");
1431 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1433 prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
1434 RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
1435 RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well.");
1436 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1439 static void rna_def_constraint_distance_limit(BlenderRNA *brna)
1444 static EnumPropertyItem distance_items[] = {
1445 {LIMITDIST_INSIDE, "LIMITDIST_INSIDE", 0, "Inside", ""},
1446 {LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", 0, "Outside", ""},
1447 {LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", 0, "On Surface", ""},
1448 {0, NULL, 0, NULL, NULL}};
1450 srna= RNA_def_struct(brna, "LimitDistanceConstraint", "Constraint");
1451 RNA_def_struct_ui_text(srna, "Limit Distance Constraint", "Limits the distance from target object.");
1452 RNA_def_struct_sdna_from(srna, "bDistLimitConstraint", "data");
1454 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1455 RNA_def_property_pointer_sdna(prop, NULL, "tar");
1456 RNA_def_property_ui_text(prop, "Target", "Target Object");
1457 RNA_def_property_flag(prop, PROP_EDITABLE);
1458 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1460 prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1461 RNA_def_property_string_sdna(prop, NULL, "subtarget");
1462 RNA_def_property_ui_text(prop, "Sub-Target", "");
1463 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1465 prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
1466 RNA_def_property_float_sdna(prop, NULL, "dist");
1467 RNA_def_property_range(prop, 0.0, 100.f);
1468 RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere.");
1469 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1471 prop= RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
1472 RNA_def_property_enum_sdna(prop, NULL, "mode");
1473 RNA_def_property_enum_items(prop, distance_items);
1474 RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow.");
1475 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1478 static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
1483 static EnumPropertyItem type_items[] = {
1484 {MOD_SHRINKWRAP_NEAREST_SURFACE, "NEAREST_SURFACE", 0, "Nearest Surface Point", ""},
1485 {MOD_SHRINKWRAP_PROJECT, "PROJECT", 0, "Project", ""},
1486 {MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex", ""},
1487 {0, NULL, 0, NULL, NULL}};
1489 srna= RNA_def_struct(brna, "ShrinkwrapConstraint", "Constraint");
1490 RNA_def_struct_ui_text(srna, "Shrinkwrap Constraint", "Creates constraint-based shrinkwrap relationship.");
1491 RNA_def_struct_sdna_from(srna, "bShrinkwrapConstraint", "data");
1493 prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1494 RNA_def_property_pointer_sdna(prop, NULL, "target");
1495 RNA_def_property_ui_text(prop, "Target", "Target Object");
1496 RNA_def_property_flag(prop, PROP_EDITABLE);
1497 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
1499 prop= RNA_def_property(srna, "shrinkwrap_type", PROP_ENUM, PROP_NONE);
1500 RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
1501 RNA_def_property_enum_items(prop, type_items);
1502 RNA_def_property_ui_text(prop, "Shrinkwrap Type", "Selects type of shrinkwrap algorithm for target position");
1503 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1505 prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
1506 RNA_def_property_float_sdna(prop, NULL, "dist");
1507 RNA_def_property_range(prop, 0.0, 100.f);
1508 RNA_def_property_ui_text(prop, "Distance", "Distance to Target.");
1509 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1511 prop= RNA_def_property(srna, "axis_x", PROP_BOOLEAN, PROP_NONE);
1512 RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
1513 RNA_def_property_ui_text(prop, "Axis X", "Projection over X Axis");
1514 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1516 prop= RNA_def_property(srna, "axis_y", PROP_BOOLEAN, PROP_NONE);
1517 RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
1518 RNA_def_property_ui_text(prop, "Axis Y", "Projection over Y Axis");
1519 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1521 prop= RNA_def_property(srna, "axis_z", PROP_BOOLEAN, PROP_NONE);
1522 RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
1523 RNA_def_property_ui_text(prop, "Axis Z", "Projection over Z Axis");
1524 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
1527 /* base struct for constraints */
1528 void RNA_def_constraint(BlenderRNA *brna)
1534 srna= RNA_def_struct(brna, "Constraint", NULL );
1535 RNA_def_struct_ui_text(srna, "Constraint", "Constraint modifying the transformation of objects and bones.");
1536 RNA_def_struct_refine_func(srna, "rna_ConstraintType_refine");
1537 RNA_def_struct_path_func(srna, "rna_Constraint_path");
1538 RNA_def_struct_sdna(srna, "bConstraint");
1541 prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1542 RNA_def_property_ui_text(prop, "Name", "");
1543 RNA_def_struct_name_property(srna, prop);
1546 prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1547 RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1548 RNA_def_property_enum_sdna(prop, NULL, "type");
1549 RNA_def_property_enum_items(prop, constraint_type_items);
1550 RNA_def_property_ui_text(prop, "Type", "");
1552 prop= RNA_def_property(srna, "owner_space", PROP_ENUM, PROP_NONE);
1553 RNA_def_property_enum_sdna(prop, NULL, "ownspace");
1554 RNA_def_property_enum_items(prop, space_pchan_items);
1555 RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_owner_space_itemf");
1556 RNA_def_property_ui_text(prop, "Owner Space", "Space that owner is evaluated in.");
1558 prop= RNA_def_property(srna, "target_space", PROP_ENUM, PROP_NONE);
1559 RNA_def_property_enum_sdna(prop, NULL, "tarspace");
1560 RNA_def_property_enum_items(prop, space_pchan_items);
1561 RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_target_space_itemf");
1562 RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in.");
1565 // XXX do we want to wrap this?
1566 prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
1567 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
1568 RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI.");
1570 // XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
1571 prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
1572 RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1573 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
1574 RNA_def_property_ui_text(prop, "Disabled", "Constraint has invalid settings and will not be evaluated.");
1576 // TODO: setting this to true must ensure that all others in stack are turned off too...
1577 prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
1578 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
1579 RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
1581 prop= RNA_def_property(srna, "proxy_local", PROP_BOOLEAN, PROP_NONE);
1582 RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
1583 RNA_def_property_ui_text(prop, "Proxy Local", "Constraint was added in this proxy instance (i.e. did not belong to source Armature).");
1586 prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_PERCENTAGE);
1587 RNA_def_property_float_sdna(prop, NULL, "enforce");
1588 RNA_def_property_range(prop, 0.0f, 1.0f);
1589 RNA_def_property_ui_text(prop, "Influence", "Amount of influence constraint will have on the final solution.");
1590 RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_influence_update");
1593 rna_def_constrainttarget(brna);
1595 rna_def_constraint_childof(brna);
1596 rna_def_constraint_python(brna);
1597 rna_def_constraint_stretch_to(brna);
1598 rna_def_constraint_follow_path(brna);
1599 rna_def_constraint_locked_track(brna);
1600 rna_def_constraint_action(brna);
1601 rna_def_constraint_size_like(brna);
1602 rna_def_constraint_locate_like(brna);
1603 rna_def_constraint_rotate_like(brna);
1604 rna_def_constraint_minmax(brna);
1605 rna_def_constraint_track_to(brna);
1606 rna_def_constraint_kinematic(brna);
1607 rna_def_constraint_rigid_body_joint(brna);
1608 rna_def_constraint_clamp_to(brna);
1609 rna_def_constraint_distance_limit(brna);
1610 rna_def_constraint_size_limit(brna);
1611 rna_def_constraint_rotation_limit(brna);
1612 rna_def_constraint_location_limit(brna);
1613 rna_def_constraint_transform(brna);
1614 rna_def_constraint_shrinkwrap(brna);