2011-02-23 10:52:22 +00:00
|
|
|
/*
|
2008-12-12 23:30:23 +00:00
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2008-12-12 23:30:23 +00:00
|
|
|
*
|
2009-01-20 03:55:30 +00:00
|
|
|
* Contributor(s): Blender Foundation (2008), Joshua Leung, Roland Hess
|
2008-12-12 23:30:23 +00:00
|
|
|
*
|
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
|
*/
|
|
|
|
|
|
2011-02-27 20:20:01 +00:00
|
|
|
/** \file blender/makesrna/intern/rna_constraint.c
|
|
|
|
|
* \ingroup RNA
|
|
|
|
|
*/
|
|
|
|
|
|
2008-12-12 23:30:23 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
2010-01-25 06:24:05 +00:00
|
|
|
#include "BLI_math.h"
|
|
|
|
|
|
2012-04-13 20:25:05 +00:00
|
|
|
#include "BLF_translation.h"
|
|
|
|
|
|
2009-05-27 00:03:49 +00:00
|
|
|
#include "DNA_action_types.h"
|
2008-12-12 23:30:23 +00:00
|
|
|
#include "DNA_constraint_types.h"
|
2009-05-30 23:31:10 +00:00
|
|
|
#include "DNA_modifier_types.h"
|
2009-01-20 03:55:30 +00:00
|
|
|
#include "DNA_object_types.h"
|
|
|
|
|
#include "DNA_scene_types.h"
|
2008-12-12 23:30:23 +00:00
|
|
|
|
2013-03-07 02:44:55 +00:00
|
|
|
#include "RNA_define.h"
|
|
|
|
|
|
|
|
|
|
#include "rna_internal.h"
|
|
|
|
|
|
2009-05-27 00:03:49 +00:00
|
|
|
#include "WM_types.h"
|
|
|
|
|
|
2013-03-07 02:44:55 +00:00
|
|
|
#include "ED_object.h"
|
|
|
|
|
|
2012-06-08 21:04:48 +00:00
|
|
|
/* please keep the names in sync with constraint.c */
|
2012-03-05 23:30:41 +00:00
|
|
|
EnumPropertyItem constraint_type_items[] = {
|
2012-04-13 20:25:05 +00:00
|
|
|
{0, "", 0, N_("Motion Tracking"), ""},
|
2011-11-14 06:41:42 +00:00
|
|
|
{CONSTRAINT_TYPE_CAMERASOLVER, "CAMERA_SOLVER", ICON_CONSTRAINT_DATA, "Camera Solver", ""},
|
2013-03-17 03:45:15 +00:00
|
|
|
{CONSTRAINT_TYPE_FOLLOWTRACK, "FOLLOW_TRACK", ICON_CONSTRAINT_DATA, "Follow Track", ""},
|
2013-03-23 08:47:29 +00:00
|
|
|
{CONSTRAINT_TYPE_OBJECTSOLVER, "OBJECT_SOLVER", ICON_CONSTRAINT_DATA, "Object Solver", ""},
|
2012-04-13 20:25:05 +00:00
|
|
|
{0, "", 0, N_("Transform"), ""},
|
2013-03-17 03:45:15 +00:00
|
|
|
{CONSTRAINT_TYPE_LOCLIKE, "COPY_LOCATION", ICON_CONSTRAINT_DATA, "Copy Location",
|
|
|
|
|
"Copy the location of a target (with an optional offset), so that they move together"},
|
|
|
|
|
{CONSTRAINT_TYPE_ROTLIKE, "COPY_ROTATION", ICON_CONSTRAINT_DATA, "Copy Rotation",
|
|
|
|
|
"Copy the rotation of a target (with an optional offset), so that they rotate together"},
|
|
|
|
|
{CONSTRAINT_TYPE_SIZELIKE, "COPY_SCALE", ICON_CONSTRAINT_DATA, "Copy Scale",
|
|
|
|
|
"Copy the scale factors of a target (with an optional offset), so that they are scaled by the same amount"},
|
|
|
|
|
{CONSTRAINT_TYPE_TRANSLIKE, "COPY_TRANSFORMS", ICON_CONSTRAINT_DATA, "Copy Transforms",
|
|
|
|
|
"Copy all the transformations of a target, so that they move together"},
|
|
|
|
|
{CONSTRAINT_TYPE_DISTLIMIT, "LIMIT_DISTANCE", ICON_CONSTRAINT_DATA, "Limit Distance",
|
|
|
|
|
"Restrict movements to within a certain distance of a target (at the time of constraint evaluation only)"},
|
|
|
|
|
{CONSTRAINT_TYPE_LOCLIMIT, "LIMIT_LOCATION", ICON_CONSTRAINT_DATA, "Limit Location",
|
|
|
|
|
"Restrict movement along each axis within given ranges"},
|
|
|
|
|
{CONSTRAINT_TYPE_ROTLIMIT, "LIMIT_ROTATION", ICON_CONSTRAINT_DATA, "Limit Rotation",
|
|
|
|
|
"Restrict rotation along each axis within given ranges"},
|
|
|
|
|
{CONSTRAINT_TYPE_SIZELIMIT, "LIMIT_SCALE", ICON_CONSTRAINT_DATA, "Limit Scale",
|
|
|
|
|
"Restrict scaling along each axis with given ranges"},
|
|
|
|
|
{CONSTRAINT_TYPE_SAMEVOL, "MAINTAIN_VOLUME", ICON_CONSTRAINT_DATA, "Maintain Volume",
|
|
|
|
|
"Compensate for scaling one axis by applying suitable scaling to the other two axes"},
|
|
|
|
|
{CONSTRAINT_TYPE_TRANSFORM, "TRANSFORM", ICON_CONSTRAINT_DATA, "Transformation",
|
|
|
|
|
"Use one transform property from target to control another (or same) property on owner"},
|
2012-04-13 20:25:05 +00:00
|
|
|
{0, "", 0, N_("Tracking"), ""},
|
2013-03-17 03:45:15 +00:00
|
|
|
{CONSTRAINT_TYPE_CLAMPTO, "CLAMP_TO", ICON_CONSTRAINT_DATA, "Clamp To",
|
|
|
|
|
"Restrict movements to lie along a curve by remapping location along curve's longest axis"},
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_TYPE_DAMPTRACK, "DAMPED_TRACK", ICON_CONSTRAINT_DATA, "Damped Track",
|
2013-03-17 03:45:15 +00:00
|
|
|
"Point towards a target by performing the smallest rotation necessary"},
|
|
|
|
|
{CONSTRAINT_TYPE_KINEMATIC, "IK", ICON_CONSTRAINT_DATA, "Inverse Kinematics",
|
|
|
|
|
"Control a chain of bones by specifying the endpoint target (Bones only)"},
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_TYPE_LOCKTRACK, "LOCKED_TRACK", ICON_CONSTRAINT_DATA, "Locked Track",
|
2013-03-17 03:45:15 +00:00
|
|
|
"Rotate around the specified ('locked') axis to point towards a target"},
|
|
|
|
|
{CONSTRAINT_TYPE_SPLINEIK, "SPLINE_IK", ICON_CONSTRAINT_DATA, "Spline IK",
|
|
|
|
|
"Align chain of bones along a curve (Bones only)"},
|
|
|
|
|
{CONSTRAINT_TYPE_STRETCHTO, "STRETCH_TO", ICON_CONSTRAINT_DATA, "Stretch To",
|
|
|
|
|
"Stretch along Y-Axis to point towards a target"},
|
|
|
|
|
{CONSTRAINT_TYPE_TRACKTO, "TRACK_TO", ICON_CONSTRAINT_DATA, "Track To",
|
|
|
|
|
"Legacy tracking constraint prone to twisting artifacts"},
|
2012-04-13 20:25:05 +00:00
|
|
|
{0, "", 0, N_("Relationship"), ""},
|
2013-03-17 03:45:15 +00:00
|
|
|
{CONSTRAINT_TYPE_ACTION, "ACTION", ICON_CONSTRAINT_DATA, "Action",
|
|
|
|
|
"Use transform property of target to look up pose for owner from an Action"},
|
|
|
|
|
{CONSTRAINT_TYPE_CHILDOF, "CHILD_OF", ICON_CONSTRAINT_DATA, "Child Of",
|
|
|
|
|
"Make target the 'detachable' parent of owner"},
|
|
|
|
|
{CONSTRAINT_TYPE_MINMAX, "FLOOR", ICON_CONSTRAINT_DATA, "Floor",
|
|
|
|
|
"Use position (and optionally rotation) of target to define a 'wall' or 'floor' that the owner can not cross"},
|
|
|
|
|
{CONSTRAINT_TYPE_FOLLOWPATH, "FOLLOW_PATH", ICON_CONSTRAINT_DATA, "Follow Path",
|
|
|
|
|
"Use to animate an object/bone following a path"},
|
|
|
|
|
{CONSTRAINT_TYPE_PIVOT, "PIVOT", ICON_CONSTRAINT_DATA, "Pivot",
|
|
|
|
|
"Change pivot point for transforms (buggy)"},
|
|
|
|
|
{CONSTRAINT_TYPE_RIGIDBODYJOINT, "RIGID_BODY_JOINT", ICON_CONSTRAINT_DATA, "Rigid Body Joint",
|
|
|
|
|
"Use to define a Rigid Body Constraint (for Game Engine use only)"},
|
2013-03-23 08:47:29 +00:00
|
|
|
/* {CONSTRAINT_TYPE_PYTHON, "SCRIPT", ICON_CONSTRAINT_DATA, "Script",
|
|
|
|
|
"Custom constraint(s) written in Python (Not yet implemented)"}, */
|
2013-03-17 03:45:15 +00:00
|
|
|
{CONSTRAINT_TYPE_SHRINKWRAP, "SHRINKWRAP", ICON_CONSTRAINT_DATA, "Shrinkwrap",
|
|
|
|
|
"Restrict movements to surface of target mesh"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-05-27 00:03:49 +00:00
|
|
|
|
2011-05-15 17:59:48 +00:00
|
|
|
static EnumPropertyItem target_space_pchan_items[] = {
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_SPACE_WORLD, "WORLD", 0, "World Space",
|
|
|
|
|
"The transformation of the target is evaluated relative to the world "
|
|
|
|
|
"coordinate system"},
|
|
|
|
|
{CONSTRAINT_SPACE_POSE, "POSE", 0, "Pose Space",
|
|
|
|
|
"The transformation of the target is only evaluated in the Pose Space, "
|
|
|
|
|
"the target armature object transformation is ignored"},
|
|
|
|
|
{CONSTRAINT_SPACE_PARLOCAL, "LOCAL_WITH_PARENT", 0, "Local With Parent",
|
|
|
|
|
"The transformation of the target bone is evaluated relative its local "
|
|
|
|
|
"coordinate system, with the parent transformation added"},
|
|
|
|
|
{CONSTRAINT_SPACE_LOCAL, "LOCAL", 0, "Local Space",
|
|
|
|
|
"The transformation of the target is evaluated relative to its local "
|
|
|
|
|
"coordinate system"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2011-05-15 17:59:48 +00:00
|
|
|
|
|
|
|
|
static EnumPropertyItem owner_space_pchan_items[] = {
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_SPACE_WORLD, "WORLD", 0, "World Space",
|
|
|
|
|
"The constraint is applied relative to the world coordinate system"},
|
|
|
|
|
{CONSTRAINT_SPACE_POSE, "POSE", 0, "Pose Space",
|
|
|
|
|
"The constraint is applied in Pose Space, the object transformation is ignored"},
|
|
|
|
|
{CONSTRAINT_SPACE_PARLOCAL, "LOCAL_WITH_PARENT", 0, "Local With Parent",
|
|
|
|
|
"The constraint is applied relative to the local coordinate system of the object, "
|
|
|
|
|
"with the parent transformation added"},
|
|
|
|
|
{CONSTRAINT_SPACE_LOCAL, "LOCAL", 0, "Local Space",
|
2012-07-03 17:20:21 +00:00
|
|
|
"The constraint is applied relative to the local coordinate system of the object"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
RNA
* Enums can now be dynamically created in the _itemf callback,
using RNA_enum_item(s)_add, RNA_enum_item_end. All places asking
for enum items now need to potentially free the items.
* This callback now also gets context, this was added specifically
for operators. This doesn't fit design well at all, needed to do
some ugly hacks, but can't find a good solution at the moment.
* All enums must have a default list of items too, even with an
_itemf callback, for docs and fallback in case there is no context.
* Used by MESH_OT_merge, MESH_OT_select_similar, TFM_OT_select_orientation.
* Also changes some operator properties that were enums to booleas
(unselected, deselect), to make them consistent with other ops.
2009-07-10 19:56:13 +00:00
|
|
|
|
2011-04-03 23:11:00 +00:00
|
|
|
#ifdef RNA_RUNTIME
|
|
|
|
|
|
2011-04-03 10:04:16 +00:00
|
|
|
static EnumPropertyItem space_object_items[] = {
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_SPACE_WORLD, "WORLD", 0, "World Space",
|
|
|
|
|
"The transformation of the target is evaluated relative to the world coordinate system"},
|
|
|
|
|
{CONSTRAINT_SPACE_LOCAL, "LOCAL", 0, "Local Space",
|
|
|
|
|
"The transformation of the target is evaluated relative to its local coordinate system"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-05-27 00:03:49 +00:00
|
|
|
|
2009-10-20 04:07:57 +00:00
|
|
|
#include "BKE_animsys.h"
|
2009-05-27 00:03:49 +00:00
|
|
|
#include "BKE_action.h"
|
2009-05-28 23:23:47 +00:00
|
|
|
#include "BKE_constraint.h"
|
2009-05-27 00:03:49 +00:00
|
|
|
#include "BKE_context.h"
|
|
|
|
|
#include "BKE_depsgraph.h"
|
|
|
|
|
|
|
|
|
|
|
2009-09-14 16:52:06 +00:00
|
|
|
static StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr)
|
2009-01-05 00:38:17 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2009-01-05 00:38:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
switch (con->type) {
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_CHILDOF:
|
|
|
|
|
return &RNA_ChildOfConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_TRACKTO:
|
|
|
|
|
return &RNA_TrackToConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_KINEMATIC:
|
|
|
|
|
return &RNA_KinematicConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_FOLLOWPATH:
|
|
|
|
|
return &RNA_FollowPathConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_ROTLIKE:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_CopyRotationConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_LOCLIKE:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_CopyLocationConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_SIZELIKE:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_CopyScaleConstraint;
|
2010-03-16 12:55:56 +00:00
|
|
|
case CONSTRAINT_TYPE_SAMEVOL:
|
|
|
|
|
return &RNA_MaintainVolumeConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_PYTHON:
|
|
|
|
|
return &RNA_PythonConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_ACTION:
|
|
|
|
|
return &RNA_ActionConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_LOCKTRACK:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_LockedTrackConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_STRETCHTO:
|
|
|
|
|
return &RNA_StretchToConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_MINMAX:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_FloorConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_RIGIDBODYJOINT:
|
|
|
|
|
return &RNA_RigidBodyJointConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_CLAMPTO:
|
2012-03-18 09:27:36 +00:00
|
|
|
return &RNA_ClampToConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_TRANSFORM:
|
|
|
|
|
return &RNA_TransformConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_ROTLIMIT:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_LimitRotationConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_LOCLIMIT:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_LimitLocationConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_SIZELIMIT:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_LimitScaleConstraint;
|
2009-01-20 03:55:30 +00:00
|
|
|
case CONSTRAINT_TYPE_DISTLIMIT:
|
2009-05-27 00:03:49 +00:00
|
|
|
return &RNA_LimitDistanceConstraint;
|
2009-05-30 23:31:10 +00:00
|
|
|
case CONSTRAINT_TYPE_SHRINKWRAP:
|
|
|
|
|
return &RNA_ShrinkwrapConstraint;
|
2009-10-30 06:33:40 +00:00
|
|
|
case CONSTRAINT_TYPE_DAMPTRACK:
|
|
|
|
|
return &RNA_DampedTrackConstraint;
|
2009-11-01 11:29:40 +00:00
|
|
|
case CONSTRAINT_TYPE_SPLINEIK:
|
|
|
|
|
return &RNA_SplineIKConstraint;
|
2010-01-02 04:14:17 +00:00
|
|
|
case CONSTRAINT_TYPE_TRANSLIKE:
|
|
|
|
|
return &RNA_CopyTransformsConstraint;
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
case CONSTRAINT_TYPE_PIVOT:
|
|
|
|
|
return &RNA_PivotConstraint;
|
2011-11-07 12:55:18 +00:00
|
|
|
case CONSTRAINT_TYPE_FOLLOWTRACK:
|
|
|
|
|
return &RNA_FollowTrackConstraint;
|
|
|
|
|
case CONSTRAINT_TYPE_CAMERASOLVER:
|
|
|
|
|
return &RNA_CameraSolverConstraint;
|
2011-12-05 18:57:17 +00:00
|
|
|
case CONSTRAINT_TYPE_OBJECTSOLVER:
|
|
|
|
|
return &RNA_ObjectSolverConstraint;
|
2009-01-05 00:38:17 +00:00
|
|
|
default:
|
2009-01-20 03:55:30 +00:00
|
|
|
return &RNA_UnknownType;
|
2009-01-05 00:38:17 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-10-09 09:48:04 +00:00
|
|
|
static void rna_Constraint_name_set(PointerRNA *ptr, const char *value)
|
|
|
|
|
{
|
2012-03-05 23:30:41 +00:00
|
|
|
bConstraint *con = ptr->data;
|
2010-04-04 14:33:41 +00:00
|
|
|
char oldname[sizeof(con->name)];
|
Bugfix #19663: Renaming named data doesn't fix F-Curves
RNA Paths used in F-Curve, Drivers, etc. now get renamed when some data that they use gets renamed. This only works when things like Bones, Constraints, Shape Keys, and Modifiers get renamed, but other cases can get added easily.
The code here only performs simple string replacements, so there is the potential for problems when several sets of data with the same names are present. For example, if there are multiple armatures with bones that have the same names, renaming a bone on one armature (with a bone on another armature having the same name) will break all the drivers on the other one, even though they aren't really connected. However, I don't expect the aforementioned scenario to really be a problem in most production scenarios.
2009-10-20 03:44:35 +00:00
|
|
|
|
|
|
|
|
/* make a copy of the old name first */
|
2010-04-04 14:33:41 +00:00
|
|
|
BLI_strncpy(oldname, con->name, sizeof(con->name));
|
2009-10-09 09:48:04 +00:00
|
|
|
|
|
|
|
|
/* copy the new name into the name slot */
|
2011-09-15 12:26:48 +00:00
|
|
|
BLI_strncpy_utf8(con->name, value, sizeof(con->name));
|
2009-10-09 09:48:04 +00:00
|
|
|
|
|
|
|
|
/* make sure name is unique */
|
|
|
|
|
if (ptr->id.data) {
|
2012-03-05 23:30:41 +00:00
|
|
|
Object *ob = ptr->id.data;
|
2009-11-26 09:48:53 +00:00
|
|
|
ListBase *list = get_constraint_lb(ob, con, NULL);
|
2009-10-09 09:48:04 +00:00
|
|
|
|
|
|
|
|
/* if we have the list, check for unique name, otherwise give up */
|
|
|
|
|
if (list)
|
2012-12-23 11:31:15 +00:00
|
|
|
BKE_unique_constraint_name(con, list);
|
2009-10-09 09:48:04 +00:00
|
|
|
}
|
Bugfix #19663: Renaming named data doesn't fix F-Curves
RNA Paths used in F-Curve, Drivers, etc. now get renamed when some data that they use gets renamed. This only works when things like Bones, Constraints, Shape Keys, and Modifiers get renamed, but other cases can get added easily.
The code here only performs simple string replacements, so there is the potential for problems when several sets of data with the same names are present. For example, if there are multiple armatures with bones that have the same names, renaming a bone on one armature (with a bone on another armature having the same name) will break all the drivers on the other one, even though they aren't really connected. However, I don't expect the aforementioned scenario to really be a problem in most production scenarios.
2009-10-20 03:44:35 +00:00
|
|
|
|
|
|
|
|
/* fix all the animation data which may link to this */
|
2012-03-30 13:04:29 +00:00
|
|
|
BKE_all_animdata_fix_paths_rename(NULL, "constraints", oldname, con->name);
|
2009-10-09 09:48:04 +00:00
|
|
|
}
|
|
|
|
|
|
2009-05-27 00:03:49 +00:00
|
|
|
static char *rna_Constraint_path(PointerRNA *ptr)
|
|
|
|
|
{
|
2012-03-05 23:30:41 +00:00
|
|
|
Object *ob = ptr->id.data;
|
|
|
|
|
bConstraint *con = ptr->data;
|
2009-11-26 09:48:53 +00:00
|
|
|
bPoseChannel *pchan;
|
|
|
|
|
ListBase *lb = get_constraint_lb(ob, con, &pchan);
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (lb == NULL)
|
2012-03-18 09:27:36 +00:00
|
|
|
printf("rna_Constraint_path: internal error, constraint '%s' not found in object '%s'\n",
|
|
|
|
|
con->name, ob->id.name);
|
2009-11-26 09:48:53 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (pchan) {
|
2009-11-18 11:40:55 +00:00
|
|
|
return BLI_sprintfN("pose.bones[\"%s\"].constraints[\"%s\"]", pchan->name, con->name);
|
2009-11-26 09:48:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return BLI_sprintfN("constraints[\"%s\"]", con->name);
|
2009-05-27 00:03:49 +00:00
|
|
|
}
|
|
|
|
|
|
2011-05-31 02:14:25 +00:00
|
|
|
static void rna_Constraint_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
2009-05-27 00:03:49 +00:00
|
|
|
{
|
2009-09-24 21:22:24 +00:00
|
|
|
ED_object_constraint_update(ptr->id.data);
|
2009-05-27 00:03:49 +00:00
|
|
|
}
|
|
|
|
|
|
2013-02-22 00:51:58 +00:00
|
|
|
static void rna_Constraint_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
2009-05-27 00:03:49 +00:00
|
|
|
{
|
2013-02-22 00:51:58 +00:00
|
|
|
ED_object_constraint_dependency_update(bmain, ptr->id.data);
|
2009-05-27 00:03:49 +00:00
|
|
|
}
|
|
|
|
|
|
2009-12-08 17:23:48 +00:00
|
|
|
static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
2009-05-27 00:03:49 +00:00
|
|
|
{
|
2012-03-05 23:30:41 +00:00
|
|
|
Object *ob = ptr->id.data;
|
2009-05-27 00:03:49 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (ob->pose)
|
2012-05-12 11:01:29 +00:00
|
|
|
ob->pose->flag |= (POSE_LOCKED | POSE_DO_UNLOCK);
|
2009-05-27 00:03:49 +00:00
|
|
|
|
2009-12-08 17:23:48 +00:00
|
|
|
rna_Constraint_update(bmain, scene, ptr);
|
2009-05-27 00:03:49 +00:00
|
|
|
}
|
|
|
|
|
|
2009-09-24 21:22:24 +00:00
|
|
|
static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value)
|
|
|
|
|
{
|
|
|
|
|
bConstraint *con = ptr->data;
|
|
|
|
|
bKinematicConstraint *ikdata = con->data;
|
|
|
|
|
|
|
|
|
|
if (ikdata->type != value) {
|
2012-03-05 23:30:41 +00:00
|
|
|
/* the type of IK constraint has changed, set suitable default values */
|
|
|
|
|
/* in case constraints reuse same fields incompatible */
|
2009-09-24 21:22:24 +00:00
|
|
|
switch (value) {
|
2012-05-12 11:01:29 +00:00
|
|
|
case CONSTRAINT_IK_COPYPOSE:
|
|
|
|
|
break;
|
|
|
|
|
case CONSTRAINT_IK_DISTANCE:
|
|
|
|
|
break;
|
2009-09-24 21:22:24 +00:00
|
|
|
}
|
|
|
|
|
ikdata->type = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-05-28 23:23:47 +00:00
|
|
|
|
2012-03-18 09:27:36 +00:00
|
|
|
static EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *UNUSED(C), PointerRNA *ptr,
|
|
|
|
|
PropertyRNA *UNUSED(prop), int *UNUSED(free))
|
2009-05-28 23:23:47 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Object *ob = (Object *)ptr->id.data;
|
|
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2009-07-13 19:33:59 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (BLI_findindex(&ob->constraints, con) == -1)
|
2011-05-15 17:59:48 +00:00
|
|
|
return owner_space_pchan_items;
|
2009-05-28 23:23:47 +00:00
|
|
|
else /* object */
|
|
|
|
|
return space_object_items;
|
|
|
|
|
}
|
|
|
|
|
|
2012-03-18 09:27:36 +00:00
|
|
|
static EnumPropertyItem *rna_Constraint_target_space_itemf(bContext *UNUSED(C), PointerRNA *ptr,
|
|
|
|
|
PropertyRNA *UNUSED(prop), int *UNUSED(free))
|
2009-05-28 23:23:47 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2012-12-23 11:31:15 +00:00
|
|
|
bConstraintTypeInfo *cti = BKE_constraint_get_typeinfo(con);
|
2009-05-28 23:23:47 +00:00
|
|
|
ListBase targets = {NULL, NULL};
|
|
|
|
|
bConstraintTarget *ct;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (cti && cti->get_constraint_targets) {
|
2009-05-28 23:23:47 +00:00
|
|
|
cti->get_constraint_targets(con, &targets);
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
for (ct = targets.first; ct; ct = ct->next)
|
|
|
|
|
if (ct->tar && ct->tar->type == OB_ARMATURE)
|
2009-05-28 23:23:47 +00:00
|
|
|
break;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (cti->flush_constraint_targets)
|
2009-05-28 23:23:47 +00:00
|
|
|
cti->flush_constraint_targets(con, &targets, 1);
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (ct)
|
2011-05-15 17:59:48 +00:00
|
|
|
return target_space_pchan_items;
|
2009-05-28 23:23:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return space_object_items;
|
|
|
|
|
}
|
|
|
|
|
|
2012-03-30 16:09:05 +00:00
|
|
|
static void rna_ActionConstraint_minmax_range(PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
|
2009-09-21 07:25:48 +00:00
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2009-09-21 07:25:48 +00:00
|
|
|
bActionConstraint *acon = (bActionConstraint *)con->data;
|
|
|
|
|
|
|
|
|
|
/* 0, 1, 2 = magic numbers for rotX, rotY, rotZ */
|
|
|
|
|
if (ELEM3(acon->type, 0, 1, 2)) {
|
2012-03-05 23:30:41 +00:00
|
|
|
*min = -180.0f;
|
|
|
|
|
*max = 180.0f;
|
2012-03-24 06:24:53 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2012-03-05 23:30:41 +00:00
|
|
|
*min = -1000.f;
|
|
|
|
|
*max = 1000.f;
|
2009-09-21 07:25:48 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-11-26 02:13:56 +00:00
|
|
|
static int rna_SplineIKConstraint_joint_bindings_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2012-03-05 23:30:41 +00:00
|
|
|
bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data;
|
2009-11-26 02:13:56 +00:00
|
|
|
|
|
|
|
|
if (ikData)
|
2012-03-05 23:30:41 +00:00
|
|
|
length[0] = ikData->numpoints;
|
2009-11-26 02:13:56 +00:00
|
|
|
else
|
2012-05-12 11:01:29 +00:00
|
|
|
length[0] = 256; /* for raw_access, untested */
|
2009-11-26 02:13:56 +00:00
|
|
|
|
|
|
|
|
return length[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_SplineIKConstraint_joint_bindings_get(PointerRNA *ptr, float *values)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2012-03-05 23:30:41 +00:00
|
|
|
bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data;
|
2009-11-26 02:13:56 +00:00
|
|
|
|
|
|
|
|
memcpy(values, ikData->points, ikData->numpoints * sizeof(float));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_SplineIKConstraint_joint_bindings_set(PointerRNA *ptr, const float *values)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
2012-03-05 23:30:41 +00:00
|
|
|
bSplineIKConstraint *ikData = (bSplineIKConstraint *)con->data;
|
2009-11-26 02:13:56 +00:00
|
|
|
|
|
|
|
|
memcpy(ikData->points, values, ikData->numpoints * sizeof(float));
|
|
|
|
|
}
|
|
|
|
|
|
2011-12-15 20:38:23 +00:00
|
|
|
static int rna_Constraint_cameraObject_poll(PointerRNA *ptr, PointerRNA value)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Object *ob = (Object *)value.data;
|
2011-12-15 20:38:23 +00:00
|
|
|
|
|
|
|
|
if (ob) {
|
2012-05-12 11:01:29 +00:00
|
|
|
if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
|
2011-12-15 20:38:23 +00:00
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_Constraint_followTrack_camera_set(PointerRNA *ptr, PointerRNA value)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
|
|
|
|
bFollowTrackConstraint *data = (bFollowTrackConstraint *)con->data;
|
|
|
|
|
Object *ob = (Object *)value.data;
|
2011-12-15 20:38:23 +00:00
|
|
|
|
|
|
|
|
if (ob) {
|
2012-05-12 11:01:29 +00:00
|
|
|
if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
|
2012-03-05 23:30:41 +00:00
|
|
|
data->camera = ob;
|
2011-12-15 20:38:23 +00:00
|
|
|
}
|
2012-03-24 06:24:53 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2012-03-05 23:30:41 +00:00
|
|
|
data->camera = NULL;
|
2011-12-15 20:38:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-01-04 17:20:08 +00:00
|
|
|
static void rna_Constraint_followTrack_depthObject_set(PointerRNA *ptr, PointerRNA value)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
|
|
|
|
bFollowTrackConstraint *data = (bFollowTrackConstraint *)con->data;
|
|
|
|
|
Object *ob = (Object *)value.data;
|
2012-01-04 17:20:08 +00:00
|
|
|
|
|
|
|
|
if (ob) {
|
2012-05-12 11:01:29 +00:00
|
|
|
if (ob->type == OB_MESH && ob != (Object *)ptr->id.data) {
|
2012-03-05 23:30:41 +00:00
|
|
|
data->depth_ob = ob;
|
2012-01-04 17:20:08 +00:00
|
|
|
}
|
2012-03-24 06:24:53 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2012-03-05 23:30:41 +00:00
|
|
|
data->depth_ob = NULL;
|
2012-01-04 17:20:08 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int rna_Constraint_followTrack_depthObject_poll(PointerRNA *ptr, PointerRNA value)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
Object *ob = (Object *)value.data;
|
2012-01-04 17:20:08 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
if (ob) {
|
2012-05-12 11:01:29 +00:00
|
|
|
if (ob->type == OB_MESH && ob != (Object *)ptr->id.data) {
|
2012-01-04 17:20:08 +00:00
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2011-12-15 20:38:23 +00:00
|
|
|
static void rna_Constraint_objectSolver_camera_set(PointerRNA *ptr, PointerRNA value)
|
|
|
|
|
{
|
2012-05-12 11:01:29 +00:00
|
|
|
bConstraint *con = (bConstraint *)ptr->data;
|
|
|
|
|
bObjectSolverConstraint *data = (bObjectSolverConstraint *)con->data;
|
|
|
|
|
Object *ob = (Object *)value.data;
|
2011-12-15 20:38:23 +00:00
|
|
|
|
|
|
|
|
if (ob) {
|
2012-05-12 11:01:29 +00:00
|
|
|
if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
|
2012-03-05 23:30:41 +00:00
|
|
|
data->camera = ob;
|
2011-12-15 20:38:23 +00:00
|
|
|
}
|
2012-03-24 06:24:53 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2012-03-05 23:30:41 +00:00
|
|
|
data->camera = NULL;
|
2011-12-15 20:38:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-12 23:30:23 +00:00
|
|
|
#else
|
|
|
|
|
|
2009-10-09 09:48:04 +00:00
|
|
|
EnumPropertyItem constraint_distance_items[] = {
|
2012-03-18 09:27:36 +00:00
|
|
|
{LIMITDIST_INSIDE, "LIMITDIST_INSIDE", 0, "Inside",
|
|
|
|
|
"The object is constrained inside a virtual sphere around the target object, "
|
|
|
|
|
"with a radius defined by the limit distance"},
|
|
|
|
|
{LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", 0, "Outside",
|
|
|
|
|
"The object is constrained outside a virtual sphere around the target object, "
|
|
|
|
|
"with a radius defined by the limit distance"},
|
|
|
|
|
{LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", 0, "On Surface",
|
|
|
|
|
"The object is constrained on the surface of a virtual sphere around the target object, "
|
|
|
|
|
"with a radius defined by the limit distance"},
|
2009-10-09 09:48:04 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
static void rna_def_constrainttarget(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "ConstraintTarget", NULL);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Constraint Target", "Target object for multi-target constraints");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna(srna, "bConstraintTarget");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
/* space, flag and type still to do */
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_childof(BlenderRNA *brna)
|
|
|
|
|
{
|
2012-03-05 23:30:41 +00:00
|
|
|
static int rna_matrix_dimsize_4x4[] = {4, 4};
|
2009-01-20 03:55:30 +00:00
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-18 09:27:36 +00:00
|
|
|
srna = RNA_def_struct(brna, "ChildOfConstraint", "Constraint");
|
|
|
|
|
RNA_def_struct_ui_text(srna, "Child Of Constraint", "Create constraint-based parent-child relationship");
|
|
|
|
|
RNA_def_struct_sdna_from(srna, "bChildOfConstraint", "data");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_location_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Location X", "Use X Location of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_location_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCY);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Location Y", "Use Y Location of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_location_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_LOCZ);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Location Z", "Use Z Location of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_rotation_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Rotation X", "Use X Rotation of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_rotation_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTY);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Rotation Y", "Use Y Rotation of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_rotation_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_ROTZ);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Rotation Z", "Use Z Rotation of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_scale_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Scale X", "Use X Scale of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_scale_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEY);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Scale Y", "Use Y Scale of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_scale_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CHILDOF_SIZEZ);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Scale Z", "Use Z Scale of Parent");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-07-13 17:20:20 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "inverse_matrix", PROP_FLOAT, PROP_MATRIX);
|
2011-07-13 17:20:20 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "invmat");
|
|
|
|
|
RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
|
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Inverse Matrix", "Transformation matrix to apply before");
|
|
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_python(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "PythonConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Python Constraint", "Use Python script for constraint evaluation");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bPythonConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
|
|
|
|
|
RNA_def_property_struct_type(prop, "ConstraintTarget");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Targets", "Target Objects");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target_count", PROP_INT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "tarnum");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Script", "The text object that contains the Python script");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
|
|
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_targets", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_USETARGETS);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "has_script_error", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
|
2009-03-23 13:24:48 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_kinematic(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
static EnumPropertyItem constraint_ik_axisref_items[] = {
|
2011-04-03 23:11:00 +00:00
|
|
|
{0, "BONE", 0, "Bone", ""},
|
|
|
|
|
{CONSTRAINT_IK_TARGETAXIS, "TARGET", 0, "Target", ""},
|
|
|
|
|
{0, NULL, 0, NULL, NULL},
|
|
|
|
|
};
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
static EnumPropertyItem constraint_ik_type_items[] = {
|
2011-04-03 23:11:00 +00:00
|
|
|
{CONSTRAINT_IK_COPYPOSE, "COPY_POSE", 0, "Copy Pose", ""},
|
|
|
|
|
{CONSTRAINT_IK_DISTANCE, "DISTANCE", 0, "Distance", ""},
|
|
|
|
|
{0, NULL, 0, NULL, NULL},
|
|
|
|
|
};
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "KinematicConstraint", "Constraint");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Kinematic Constraint", "Inverse Kinematics");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bKinematicConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
|
2012-11-24 00:18:34 +00:00
|
|
|
RNA_def_property_range(prop, 0, 10000);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Iterations", "Maximum number of solving iterations");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pole_target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "poletar");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Pole Target", "Object for pole rotation");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pole_subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "polesubtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Pole Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pole_angle", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "poleangle");
|
2010-01-25 06:24:05 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI, M_PI);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Pole Angle", "Pole rotation offset");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_range(prop, 0.01, 1.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Weight", "For Tree-IK: Weight of position control for this target");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "orient_weight", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "orientweight");
|
|
|
|
|
RNA_def_property_range(prop, 0.01, 1.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "rootbone");
|
|
|
|
|
RNA_def_property_range(prop, 0, 255);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_tail", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_TIP);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "reference_axis", PROP_ENUM, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
|
|
|
|
|
RNA_def_property_enum_items(prop, constraint_ik_axisref_items);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Axis Reference",
|
|
|
|
|
"Constraint axis Lock options relative to Bone or Target reference");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_location", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_POS);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Position", "Chain follows position of target");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_location_x", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_X);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Lock X Pos", "Constraint position along X axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_location_y", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Y);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Lock Y Pos", "Constraint position along Y axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_location_z", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Z);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Lock Z Pos", "Constraint position along Z axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_ROT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_rotation_x", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_X);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Lock X Rot", "Constraint rotation along X axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_rotation_y", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Y);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Lock Y Rot", "Constraint rotation along Y axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_rotation_z", PROP_BOOLEAN, PROP_NONE);
|
2009-10-14 18:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Z);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Lock Z Rot", "Constraint rotation along Z axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Constraint_dependency_update");
|
2009-10-14 18:51:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_stretch", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_STRETCH);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Stretch", "Enable IK Stretching");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-09-24 21:22:24 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "ik_type", PROP_ENUM, PROP_NONE);
|
2009-09-24 21:22:24 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
|
|
|
|
RNA_def_property_enum_funcs(prop, NULL, "rna_Constraint_ik_type_set", NULL);
|
|
|
|
|
RNA_def_property_enum_items(prop, constraint_ik_type_items);
|
|
|
|
|
RNA_def_property_ui_text(prop, "IK Type", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-09-24 21:22:24 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
|
2009-09-24 21:22:24 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "mode");
|
|
|
|
|
RNA_def_property_enum_items(prop, constraint_distance_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-09-24 21:22:24 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
|
2009-09-24 21:22:24 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "dist");
|
|
|
|
|
RNA_def_property_range(prop, 0.0, 100.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_track_to(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem track_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TRACK_X, "TRACK_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "TRACK_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "TRACK_Z", 0, "Z", ""},
|
|
|
|
|
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
|
|
|
|
|
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
|
|
|
|
|
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
|
|
|
|
static EnumPropertyItem up_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TRACK_X, "UP_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "UP_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "UP_Z", 0, "Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "TrackToConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Track To Constraint", "Aim the constrained object toward the target");
|
2009-11-28 03:45:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2009-11-28 03:45:40 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-28 03:45:40 +00:00
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bTrackToConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "reserved1");
|
|
|
|
|
RNA_def_property_enum_items(prop, track_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "reserved2");
|
|
|
|
|
RNA_def_property_enum_items(prop, up_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_target_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
2010-01-02 04:14:17 +00:00
|
|
|
static void rna_def_constraint_locate_like(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "CopyLocationConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copy the location of the target");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
|
|
|
|
RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X_INVERT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Invert X", "Invert the X location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y_INVERT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Z_INVERT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
}
|
|
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
static void rna_def_constraint_rotate_like(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "CopyRotationConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Copy Rotation Constraint", "Copy the rotation of the target");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bRotateLikeConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "invert_x", PROP_BOOLEAN, PROP_NONE);
|
2009-05-27 00:03:49 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_X_INVERT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Invert X", "Invert the X rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "invert_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Y_INVERT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Invert Y", "Invert the Y rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "invert_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_Z_INVERT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
2010-01-02 04:14:17 +00:00
|
|
|
static void rna_def_constraint_size_like(BlenderRNA *brna)
|
2009-01-20 03:55:30 +00:00
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "CopyScaleConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Copy Scale Constraint", "Copy the scale of the target");
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bSizeLikeConstraint", "data");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
2009-05-27 00:03:49 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_X);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X scale");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Y);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy Y", "Copy the target's Y scale");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_Z);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Copy Z", "Copy the target's Z scale");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset", "Add original scale into copied scale");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
}
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2010-03-16 12:55:56 +00:00
|
|
|
static void rna_def_constraint_same_volume(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem volume_items[] = {
|
2012-05-12 11:01:29 +00:00
|
|
|
{SAMEVOL_X, "SAMEVOL_X", 0, "X", ""},
|
|
|
|
|
{SAMEVOL_Y, "SAMEVOL_Y", 0, "Y", ""},
|
|
|
|
|
{SAMEVOL_Z, "SAMEVOL_Z", 0, "Z", ""},
|
|
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2010-03-16 12:55:56 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "MaintainVolumeConstraint", "Constraint");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Maintain Volume Constraint",
|
|
|
|
|
"Maintain a constant volume along a single scaling axis");
|
2010-03-16 12:55:56 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bSameVolumeConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "free_axis", PROP_ENUM, PROP_NONE);
|
2010-03-16 12:55:56 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "flag");
|
|
|
|
|
RNA_def_property_enum_items(prop, volume_items);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Free Axis", "The free scaling axis of the object");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-03-16 12:55:56 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "volume", PROP_FLOAT, PROP_DISTANCE);
|
2010-03-16 12:55:56 +00:00
|
|
|
RNA_def_property_range(prop, 0.001, 100.f);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Volume", "Volume of the bone at rest");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-03-16 12:55:56 +00:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-02 04:14:17 +00:00
|
|
|
static void rna_def_constraint_transform_like(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "CopyTransformsConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Copy Transforms Constraint", "Copy all the transforms of the target");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2011-01-02 04:16:19 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bTransLikeConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2010-01-02 04:14:17 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2010-01-02 04:14:17 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_minmax(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem minmax_items[] = {
|
2011-01-01 15:28:21 +00:00
|
|
|
{TRACK_X, "FLOOR_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "FLOOR_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "FLOOR_Z", 0, "Z", ""},
|
|
|
|
|
{TRACK_nX, "FLOOR_NEGATIVE_X", 0, "-X", ""},
|
|
|
|
|
{TRACK_nY, "FLOOR_NEGATIVE_Y", 0, "-Y", ""},
|
|
|
|
|
{TRACK_nZ, "FLOOR_NEGATIVE_Z", 0, "-Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "FloorConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Floor Constraint", "Use the target object for location limitation");
|
2012-04-29 15:47:02 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bMinMaxConstraint", "data");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "floor_location", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "minmaxflag");
|
|
|
|
|
RNA_def_property_enum_items(prop, minmax_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_sticky", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_rotation", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_USEROT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Use Rotation", "Use the target's rotation to determine floor");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_range(prop, 0.0, 100.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset", "Offset of floor from object origin");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_action(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem transform_channel_items[] = {
|
2012-01-27 01:30:58 +00:00
|
|
|
{20, "LOCATION_X", 0, "X Location", ""},
|
|
|
|
|
{21, "LOCATION_Y", 0, "Y Location", ""},
|
|
|
|
|
{22, "LOCATION_Z", 0, "Z Location", ""},
|
|
|
|
|
{00, "ROTATION_X", 0, "X Rotation", ""},
|
|
|
|
|
{01, "ROTATION_Y", 0, "Y Rotation", ""},
|
|
|
|
|
{02, "ROTATION_Z", 0, "Z Rotation", ""},
|
2012-01-31 04:23:49 +00:00
|
|
|
{10, "SCALE_X", 0, "X Scale", ""},
|
2012-01-27 01:30:58 +00:00
|
|
|
{11, "SCALE_Y", 0, "Y Scale", ""},
|
|
|
|
|
{12, "SCALE_Z", 0, "Z Scale", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "ActionConstraint", "Constraint");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Action Constraint", "Map an action to the transform axes of a bone");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bActionConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "transform_channel", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
|
|
|
|
RNA_def_property_enum_items(prop, transform_channel_items);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Transform Channel",
|
|
|
|
|
"Transformation channel from the target that is used to key the Action");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "act");
|
2012-05-17 10:28:30 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Action_id_poll");
|
2011-05-15 17:59:48 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Action", "The constraining action");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
|
|
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-06-12 06:22:23 +00:00
|
|
|
prop = RNA_def_property(srna, "use_bone_object_action", PROP_BOOLEAN, PROP_NONE);
|
2012-06-12 11:54:31 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACTCON_BONE_USE_OBJECT_ACTION);
|
2012-06-12 06:22:23 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Object Action",
|
|
|
|
|
"Bones only: apply the object's transformation channels of the action "
|
|
|
|
|
"to the constrained bone, instead of bone's channels");
|
2012-06-27 18:29:47 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2012-06-12 06:22:23 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "start");
|
2009-07-07 06:56:29 +00:00
|
|
|
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Start Frame", "First frame of the Action to use");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "end");
|
2009-07-07 06:56:29 +00:00
|
|
|
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "max");
|
2009-09-21 07:25:48 +00:00
|
|
|
RNA_def_property_range(prop, -1000.f, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-09-21 07:25:48 +00:00
|
|
|
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "min");
|
2009-09-21 07:25:48 +00:00
|
|
|
RNA_def_property_range(prop, -1000.f, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-09-21 07:25:48 +00:00
|
|
|
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_locked_track(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem locktrack_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TRACK_X, "TRACK_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "TRACK_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "TRACK_Z", 0, "Z", ""},
|
|
|
|
|
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
|
|
|
|
|
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
|
|
|
|
|
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
|
|
|
|
static EnumPropertyItem lock_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TRACK_X, "LOCK_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "LOCK_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "LOCK_Z", 0, "Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "LockedTrackConstraint", "Constraint");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Locked Track Constraint",
|
|
|
|
|
"Point toward the target along the track axis, while locking the other axis");
|
2011-07-08 12:48:43 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2011-07-08 12:48:43 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-07-08 12:48:43 +00:00
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bLockTrackConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
|
|
|
|
|
RNA_def_property_enum_items(prop, locktrack_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "lock_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "lockflag");
|
|
|
|
|
RNA_def_property_enum_items(prop, lock_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_follow_path(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem forwardpath_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TRACK_X, "FORWARD_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "FORWARD_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "FORWARD_Z", 0, "Z", ""},
|
|
|
|
|
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
|
|
|
|
|
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
|
|
|
|
|
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
|
|
|
|
static EnumPropertyItem pathup_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TRACK_X, "UP_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "UP_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "UP_Z", 0, "Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "FollowPathConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Follow Path Constraint", "Lock motion to the target path");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bFollowPathConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
2010-08-03 06:51:36 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TIME);
|
2009-09-08 09:41:15 +00:00
|
|
|
RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset", "Offset from the position corresponding to the time frame");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-09-08 09:41:15 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "offset_factor", PROP_FLOAT, PROP_FACTOR);
|
2010-02-03 09:05:31 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "offset_fac");
|
2009-09-08 09:41:15 +00:00
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
2012-10-05 13:06:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset Factor", "Percentage value defining target position along length of curve");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
|
|
|
|
|
RNA_def_property_enum_items(prop, forwardpath_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "upflag");
|
|
|
|
|
RNA_def_property_enum_items(prop, pathup_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_curve_follow", PROP_BOOLEAN, PROP_NONE);
|
2009-09-08 09:41:15 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_FOLLOW);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-09-08 09:41:15 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_fixed_location", PROP_BOOLEAN, PROP_NONE);
|
2009-09-08 09:41:15 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_STATIC);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Fixed Position",
|
|
|
|
|
"Object will stay locked to a single point somewhere along the length of the curve "
|
|
|
|
|
"regardless of time");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-09-12 16:25:49 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_curve_radius", PROP_BOOLEAN, PROP_NONE);
|
2009-09-12 16:25:49 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_RADIUS);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Curve Radius", "Object is scaled by the curve radius");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_stretch_to(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem volume_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{VOLUME_XZ, "VOLUME_XZX", 0, "XZ", ""},
|
2011-03-04 06:34:41 +00:00
|
|
|
{VOLUME_X, "VOLUME_X", 0, "X", ""},
|
2009-06-16 00:52:21 +00:00
|
|
|
{VOLUME_Z, "VOLUME_Z", 0, "Z", ""},
|
|
|
|
|
{NO_VOLUME, "NO_VOLUME", 0, "None", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
|
|
|
|
static EnumPropertyItem plane_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{PLANE_X, "PLANE_X", 0, "X", "Keep X Axis"},
|
|
|
|
|
{PLANE_Z, "PLANE_Z", 0, "Z", "Keep Z Axis"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "StretchToConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Stretch To Constraint", "Stretch to meet the target object");
|
2009-11-28 03:45:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2009-11-28 03:45:40 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-28 03:45:40 +00:00
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bStretchToConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-08-02 12:52:02 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-08-02 12:52:02 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "volume", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "volmode");
|
|
|
|
|
RNA_def_property_enum_items(prop, volume_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maintain Volume", "Maintain the object's volume as it stretches");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "keep_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "plane");
|
|
|
|
|
RNA_def_property_enum_items(prop, plane_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "orglength");
|
|
|
|
|
RNA_def_property_range(prop, 0.0, 100.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Original Length", "Length at rest position");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "bulge", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_range(prop, 0.0, 100.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Volume Variation", "Factor between volume variation and stretching");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem pivot_items[] = {
|
2011-11-19 12:21:15 +00:00
|
|
|
{CONSTRAINT_RB_BALL, "BALL", 0, "Ball", "Allow rotations around all axes"},
|
|
|
|
|
{CONSTRAINT_RB_HINGE, "HINGE", 0, "Hinge", "Work in one plane, allow rotations around one axis only"},
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_RB_CONETWIST, "CONE_TWIST", 0, "Cone Twist",
|
|
|
|
|
"Allow rotations around all axes with limits for the cone and twist axes"},
|
|
|
|
|
{CONSTRAINT_RB_GENERIC6DOF, "GENERIC_6_DOF", 0, "Generic 6 DoF",
|
|
|
|
|
"No constraints by default, limits can be set individually"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "RigidBodyJointConstraint", "Constraint");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Rigid Body Joint Constraint", "For use with the Game Engine");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bRigidBodyJointConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Child Object", "Child object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pivot_type", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
|
|
|
|
RNA_def_property_enum_items(prop, pivot_items);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Pivot Type", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "pivX");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Pivot X", "Offset pivot on X");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "pivY");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Pivot Y", "Offset pivot on Y");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "pivot_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "pivZ");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Pivot Z", "Offset pivot on Z");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "axX");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2012-12-31 15:54:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Axis X", "Rotate pivot on X axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "axY");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2012-12-31 15:54:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Axis Y", "Rotate pivot on Y axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "axZ");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2012-12-31 15:54:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Axis Z", "Rotate pivot on Z axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_linked_collision", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "show_pivot", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2011-02-27 09:21:13 +00:00
|
|
|
/* Limits */
|
|
|
|
|
/* Limit Min/Max */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_min_x", PROP_FLOAT, PROP_NONE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "minLimit[0]");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Minimum Limit X", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_min_y", PROP_FLOAT, PROP_NONE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "minLimit[1]");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Minimum Limit Y", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_min_z", PROP_FLOAT, PROP_NONE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "minLimit[2]");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Minimum Limit Z", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_max_x", PROP_FLOAT, PROP_NONE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "maxLimit[0]");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Maximum Limit X", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_max_y", PROP_FLOAT, PROP_NONE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "maxLimit[1]");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Maximum Limit Y", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_max_z", PROP_FLOAT, PROP_NONE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "maxLimit[2]");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Maximum Limit Z", "");
|
|
|
|
|
|
|
|
|
|
/* Limit Min/Max for angle */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_angle_min_x", PROP_FLOAT, PROP_ANGLE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "minLimit[3]");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Angular Limit X", "");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_angle_min_y", PROP_FLOAT, PROP_ANGLE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "minLimit[4]");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Angular Limit Y", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_angle_min_z", PROP_FLOAT, PROP_ANGLE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "minLimit[5]");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Angular Limit Z", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_angle_max_x", PROP_FLOAT, PROP_ANGLE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "maxLimit[3]");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Angular Limit X", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_angle_max_y", PROP_FLOAT, PROP_ANGLE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "maxLimit[4]");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Angular Limit Y", "");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_angle_max_z", PROP_FLOAT, PROP_ANGLE);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "maxLimit[5]");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_range(prop, -M_PI * 2, M_PI * 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Angular Limit Z", "");
|
|
|
|
|
|
|
|
|
|
/* Limit Booleans */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit X", "Use minimum/maximum X limit");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", 2);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit Y", "Use minimum/maximum y limit");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", 4);
|
2011-02-27 09:21:13 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit Z", "Use minimum/maximum z limit");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-04-21 13:11:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_angular_limit_x", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", 8);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Angular X Limit", "Use minimum/maximum X angular limit");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_angular_limit_y", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", 16);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Angular Y Limit", "Use minimum/maximum Y angular limit");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2010-11-20 09:48:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_angular_limit_z", PROP_BOOLEAN, PROP_NONE);
|
2010-11-20 09:48:51 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", 32);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Angular Z Limit", "Use minimum/maximum Z angular limit");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_clamp_to(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem clamp_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{CLAMPTO_AUTO, "CLAMPTO_AUTO", 0, "Auto", ""},
|
|
|
|
|
{CLAMPTO_X, "CLAMPTO_X", 0, "X", ""},
|
|
|
|
|
{CLAMPTO_Y, "CLAMPTO_Y", 0, "Y", ""},
|
|
|
|
|
{CLAMPTO_Z, "CLAMPTO_Z", 0, "Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "ClampToConstraint", "Constraint");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Clamp To Constraint",
|
2012-04-14 15:44:31 +00:00
|
|
|
"Constrain an object's location to the nearest point along the target path");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2011-07-08 12:48:43 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
2010-08-03 06:51:36 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
|
2013-01-05 12:27:54 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object (Curves only)");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "main_axis", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "flag");
|
|
|
|
|
RNA_def_property_enum_items(prop, clamp_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box)");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_transform(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem transform_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{0, "LOCATION", 0, "Loc", ""},
|
|
|
|
|
{1, "ROTATION", 0, "Rot", ""},
|
|
|
|
|
{2, "SCALE", 0, "Scale", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2009-05-28 23:23:47 +00:00
|
|
|
static EnumPropertyItem axis_map_items[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{0, "X", 0, "X", ""},
|
|
|
|
|
{1, "Y", 0, "Y", ""},
|
|
|
|
|
{2, "Z", 0, "Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "TransformConstraint", "Constraint");
|
2012-04-14 15:44:31 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Transformation Constraint", "Map transformations of the target to the object");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bTransformConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "map_from", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "from");
|
|
|
|
|
RNA_def_property_enum_items(prop, transform_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Map From", "The transformation type to use from the target");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "map_to", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "to");
|
|
|
|
|
RNA_def_property_enum_items(prop, transform_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Map To", "The transformation type to affect of the constrained object");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "map_to_x_from", PROP_ENUM, PROP_NONE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "map[0]");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_items(prop, axis_map_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Map To X From", "The source axis constrained object's X axis uses");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "map_to_y_from", PROP_ENUM, PROP_NONE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "map[1]");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_items(prop, axis_map_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Map To Y From", "The source axis constrained object's Y axis uses");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "map_to_z_from", PROP_ENUM, PROP_NONE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "map[2]");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_items(prop, axis_map_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_motion_extrapolate", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "from_min[0]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "From Minimum X", "Bottom range of X axis source motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "from_min_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "from_min[1]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "From Minimum Y", "Bottom range of Y axis source motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "from_min_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "from_min[2]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "From Minimum Z", "Bottom range of Z axis source motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "from_max_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "from_max[0]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "From Maximum X", "Top range of X axis source motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "from_max_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "from_max[1]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "From Maximum Y", "Top range of Y axis source motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "from_max_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "from_max[2]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "From Maximum Z", "Top range of Z axis source motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "to_min_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "to_min[0]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "To Minimum X", "Bottom range of X axis destination motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "to_min_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "to_min[1]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "To Minimum Y", "Bottom range of Y axis destination motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "to_min_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "to_min[2]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "To Minimum Z", "Bottom range of Z axis destination motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "to_max_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "to_max[0]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "To Maximum X", "Top range of X axis destination motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "to_max_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "to_max[1]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "To Maximum Y", "Top range of Y axis destination motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "to_max_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "to_max[2]");
|
2009-11-23 16:53:29 +00:00
|
|
|
RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_location_limit(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "LimitLocationConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Limit Location Constraint", "Limit the location of the constrained object");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "xmin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "ymin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "zmin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "xmax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "ymax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "zmax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "LimitRotationConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Limit Rotation Constraint", "Limit the rotation of the constrained object");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bRotLimitConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_limit_x", PROP_BOOLEAN, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XROT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit X", "Use the minimum X value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_limit_y", PROP_BOOLEAN, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YROT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit Y", "Use the minimum Y value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_limit_z", PROP_BOOLEAN, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZROT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit Z", "Use the minimum Z value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "xmin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "ymin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "zmin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "xmax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "ymax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_ANGLE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "zmax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_size_limit(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "LimitScaleConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Limit Size Constraint", "Limit the scaling of the constrained object");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "xmin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "ymin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "zmin");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "xmax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "ymax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "zmax");
|
|
|
|
|
RNA_def_property_range(prop, -1000.0, 1000.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_distance_limit(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "LimitDistanceConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Limit Distance Constraint", "Limit the distance from target object");
|
2011-07-08 10:25:26 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2011-07-08 10:25:26 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-07-08 10:25:26 +00:00
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bDistLimitConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "dist");
|
|
|
|
|
RNA_def_property_range(prop, 0.0, 100.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Distance", "Radius of limiting sphere");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "limit_mode", PROP_ENUM, PROP_NONE);
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "mode");
|
2009-09-24 21:22:24 +00:00
|
|
|
RNA_def_property_enum_items(prop, constraint_distance_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Limit Mode", "Distances in relation to sphere of influence to allow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-05-24 12:12:12 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
|
2011-05-24 12:12:12 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMITDIST_TRANSFORM);
|
|
|
|
|
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-01-20 03:55:30 +00:00
|
|
|
}
|
|
|
|
|
|
2009-05-30 23:31:10 +00:00
|
|
|
static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem type_items[] = {
|
2012-03-18 09:27:36 +00:00
|
|
|
{MOD_SHRINKWRAP_NEAREST_SURFACE, "NEAREST_SURFACE", 0, "Nearest Surface Point",
|
|
|
|
|
"Shrink the location to the nearest target surface"},
|
|
|
|
|
{MOD_SHRINKWRAP_PROJECT, "PROJECT", 0, "Project",
|
|
|
|
|
"Shrink the location to the nearest target surface along a given axis"},
|
|
|
|
|
{MOD_SHRINKWRAP_NEAREST_VERTEX, "NEAREST_VERTEX", 0, "Nearest Vertex",
|
|
|
|
|
"Shrink the location to the nearest target vertex"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-05-31 12:47:36 +00:00
|
|
|
|
2012-03-18 09:27:36 +00:00
|
|
|
srna = RNA_def_struct(brna, "ShrinkwrapConstraint", "Constraint");
|
|
|
|
|
RNA_def_struct_ui_text(srna, "Shrinkwrap Constraint", "Create constraint-based shrinkwrap relationship");
|
2009-05-31 12:47:36 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bShrinkwrapConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2010-08-03 06:51:36 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "target"); /* TODO, mesh type */
|
|
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-05-30 23:31:10 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "shrinkwrap_type", PROP_ENUM, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
|
|
|
|
|
RNA_def_property_enum_items(prop, type_items);
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Shrinkwrap Type", "Select type of shrinkwrap algorithm for target position");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-05-30 23:31:10 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "dist");
|
|
|
|
|
RNA_def_property_range(prop, 0.0, 100.f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Distance", "Distance to Target");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-05-30 23:31:10 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Axis X", "Projection over X Axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-05-30 23:31:10 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Axis Y", "Projection over Y Axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-05-30 23:31:10 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
|
2009-05-30 23:31:10 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Axis Z", "Projection over Z Axis");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-05-30 23:31:10 +00:00
|
|
|
}
|
|
|
|
|
|
2009-10-30 06:33:40 +00:00
|
|
|
static void rna_def_constraint_damped_track(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem damptrack_items[] = {
|
|
|
|
|
{TRACK_X, "TRACK_X", 0, "X", ""},
|
|
|
|
|
{TRACK_Y, "TRACK_Y", 0, "Y", ""},
|
|
|
|
|
{TRACK_Z, "TRACK_Z", 0, "Z", ""},
|
|
|
|
|
{TRACK_nX, "TRACK_NEGATIVE_X", 0, "-X", ""},
|
|
|
|
|
{TRACK_nY, "TRACK_NEGATIVE_Y", 0, "-Y", ""},
|
|
|
|
|
{TRACK_nZ, "TRACK_NEGATIVE_Z", 0, "-Z", ""},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-10-30 06:33:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "DampedTrackConstraint", "Constraint");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Damped Track Constraint",
|
|
|
|
|
"Point toward target by taking the shortest rotation path");
|
2011-07-08 12:48:43 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
2011-07-08 12:48:43 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-07-08 12:48:43 +00:00
|
|
|
|
2009-10-30 06:33:40 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bDampTrackConstraint", "data");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-10-30 06:33:40 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-10-30 06:33:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
2009-10-30 06:33:40 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-10-30 06:33:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
|
2009-10-30 06:33:40 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
|
|
|
|
|
RNA_def_property_enum_items(prop, damptrack_items);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-10-30 06:33:40 +00:00
|
|
|
}
|
|
|
|
|
|
2009-11-01 11:29:40 +00:00
|
|
|
static void rna_def_constraint_spline_ik(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
2009-11-05 10:09:45 +00:00
|
|
|
|
|
|
|
|
static EnumPropertyItem splineik_xz_scale_mode[] = {
|
2009-11-23 00:03:51 +00:00
|
|
|
{CONSTRAINT_SPLINEIK_XZS_NONE, "NONE", 0, "None", "Don't scale the X and Z axes (Default)"},
|
2012-03-18 09:27:36 +00:00
|
|
|
{CONSTRAINT_SPLINEIK_XZS_ORIGINAL, "BONE_ORIGINAL", 0, "Bone Original",
|
|
|
|
|
"Use the original scaling of the bones"},
|
|
|
|
|
{CONSTRAINT_SPLINEIK_XZS_VOLUMETRIC, "VOLUME_PRESERVE", 0, "Volume Preservation",
|
|
|
|
|
"Scale of the X and Z axes is the inverse of the Y-Scale"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
2009-11-01 11:29:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "SplineIKConstraint", "Constraint");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Spline IK Constraint", "Align 'n' bones along a curve");
|
2009-11-01 11:29:40 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bSplineIKConstraint", "data");
|
2009-11-02 10:04:37 +00:00
|
|
|
|
|
|
|
|
/* target chain */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
2009-11-02 10:04:37 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Curve that controls this relationship");
|
2009-11-01 11:29:40 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-11-01 11:29:40 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
|
2009-11-01 11:29:40 +00:00
|
|
|
RNA_def_property_int_sdna(prop, NULL, "chainlen");
|
2012-05-12 11:01:29 +00:00
|
|
|
/* TODO: this should really check the max length of the chain the constraint is attached to */
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_range(prop, 1, 255);
|
2009-11-01 11:29:40 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the chain");
|
2012-05-12 11:01:29 +00:00
|
|
|
/* XXX: this update goes wrong... needs extra flush? */
|
|
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2009-11-01 11:29:40 +00:00
|
|
|
|
2009-11-16 12:33:42 +00:00
|
|
|
/* direct access to bindings */
|
2012-03-05 23:30:41 +00:00
|
|
|
/* NOTE: only to be used by experienced users */
|
|
|
|
|
prop = RNA_def_property(srna, "joint_bindings", PROP_FLOAT, PROP_FACTOR);
|
|
|
|
|
RNA_def_property_array(prop, 32); /* XXX this is the maximum value allowed - why? */
|
2009-11-26 02:13:56 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_DYNAMIC);
|
|
|
|
|
RNA_def_property_dynamic_array_funcs(prop, "rna_SplineIKConstraint_joint_bindings_get_length");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_float_funcs(prop, "rna_SplineIKConstraint_joint_bindings_get",
|
|
|
|
|
"rna_SplineIKConstraint_joint_bindings_set", NULL);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Joint Bindings",
|
|
|
|
|
"(EXPERIENCED USERS ONLY) The relative positions of the joints along the chain, "
|
|
|
|
|
"as percentages");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-02 10:04:37 +00:00
|
|
|
|
|
|
|
|
/* settings */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_chain_offset", PROP_BOOLEAN, PROP_NONE);
|
2009-11-12 12:20:57 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_ROOT);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Chain Offset", "Offset the entire chain relative to the root joint");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-02 10:04:37 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_even_divisions", PROP_BOOLEAN, PROP_NONE);
|
2009-11-02 10:04:37 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_EVENSPLITS);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Even Divisions",
|
|
|
|
|
"Ignore the relative lengths of the bones when fitting to the curve");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-02 10:04:37 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_y_stretch", PROP_BOOLEAN, PROP_NONE);
|
2009-11-12 12:20:57 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_SCALE_LIMITED);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Y Stretch", "Stretch the Y axis of the bones to fit the curve");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-23 00:03:51 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_curve_radius", PROP_BOOLEAN, PROP_NONE);
|
2009-11-23 00:03:51 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_CURVERAD);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Use Curve Radius",
|
|
|
|
|
"Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, "
|
|
|
|
|
"on top of XZ Scale mode");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-02 10:04:37 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "xz_scale_mode", PROP_ENUM, PROP_NONE);
|
2009-11-05 10:09:45 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "xzScaleMode");
|
|
|
|
|
RNA_def_property_enum_items(prop, splineik_xz_scale_mode);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "XZ Scale Mode",
|
|
|
|
|
"Method used for determining the scaling of the X and Z axes of the bones");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2009-11-01 11:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
static void rna_def_constraint_pivot(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
static EnumPropertyItem pivot_rotAxis_items[] = {
|
2011-05-15 17:59:48 +00:00
|
|
|
{PIVOTCON_AXIS_NONE, "ALWAYS_ACTIVE", 0, "Always", "Use the pivot point in every rotation"},
|
2012-03-18 09:27:36 +00:00
|
|
|
{PIVOTCON_AXIS_X_NEG, "NX", 0, "-X Rot",
|
|
|
|
|
"Use the pivot point in the negative rotation range around the X-axis"},
|
|
|
|
|
{PIVOTCON_AXIS_Y_NEG, "NY", 0, "-Y Rot",
|
|
|
|
|
"Use the pivot point in the negative rotation range around the Y-axis"},
|
|
|
|
|
{PIVOTCON_AXIS_Z_NEG, "NZ", 0, "-Z Rot",
|
|
|
|
|
"Use the pivot point in the negative rotation range around the Z-axis"},
|
2011-05-15 17:59:48 +00:00
|
|
|
{PIVOTCON_AXIS_X, "X", 0, "X Rot", "Use the pivot point in the positive rotation range around the X-axis"},
|
|
|
|
|
{PIVOTCON_AXIS_Y, "Y", 0, "Y Rot", "Use the pivot point in the positive rotation range around the Y-axis"},
|
|
|
|
|
{PIVOTCON_AXIS_Z, "Z", 0, "Z Rot", "Use the pivot point in the positive rotation range around the Z-axis"},
|
2012-05-12 11:01:29 +00:00
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "PivotConstraint", "Constraint");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Pivot Constraint", "Rotate around a different point");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
|
|
|
|
|
RNA_def_struct_sdna_from(srna, "bPivotConstraint", "data");
|
|
|
|
|
|
|
|
|
|
/* target-defined pivot */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "tar");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Target", "Target Object, defining the position of the pivot when defined");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "subtarget");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Sub-Target", "");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
|
|
|
|
|
/* pivot offset */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_relative_location", PROP_BOOLEAN, PROP_NONE);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", PIVOTCON_FLAG_OFFSET_ABS);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Use Relative Offset",
|
|
|
|
|
"Offset will be an absolute point in space instead of relative to the target");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_XYZ);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "offset");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Offset",
|
|
|
|
|
"Offset of pivot from target (when set), or from owner's location "
|
|
|
|
|
"(when Fixed Position is off), or the absolute pivot point");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
|
|
|
|
|
/* rotation-based activation */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "rotation_range", PROP_ENUM, PROP_NONE);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "rotAxis");
|
|
|
|
|
RNA_def_property_enum_items(prop, pivot_rotAxis_items);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Enabled Rotation Range", "Rotation range on which pivoting should occur");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
}
|
|
|
|
|
|
2011-11-07 12:55:18 +00:00
|
|
|
static void rna_def_constraint_follow_track(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-08-09 16:57:02 +00:00
|
|
|
static const EnumPropertyItem frame_method_items[] = {
|
|
|
|
|
{FOLLOWTRACK_FRAME_STRETCH, "STRETCH", 0, "Stretch", ""},
|
|
|
|
|
{FOLLOWTRACK_FRAME_FIT, "FIT", 0, "Fit", ""},
|
|
|
|
|
{FOLLOWTRACK_FRAME_CROP, "CROP", 0, "Crop", ""},
|
|
|
|
|
{0, NULL, 0, NULL, NULL}
|
|
|
|
|
};
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "FollowTrackConstraint", "Constraint");
|
2011-11-19 12:21:15 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Follow Track Constraint", "Lock motion to the target motion track");
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bFollowTrackConstraint", "data");
|
|
|
|
|
|
|
|
|
|
/* movie clip */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "clip");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-11-07 12:55:18 +00:00
|
|
|
|
|
|
|
|
/* track */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "track", PROP_STRING, PROP_NONE);
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "track");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Track", "Movie tracking track to follow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-11-07 12:55:18 +00:00
|
|
|
|
|
|
|
|
/* use default clip */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE);
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", FOLLOWTRACK_ACTIVECLIP);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-11-14 06:41:42 +00:00
|
|
|
|
|
|
|
|
/* use 3d position */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_3d_position", PROP_BOOLEAN, PROP_NONE);
|
2011-11-14 06:41:42 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", FOLLOWTRACK_USE_3D_POSITION);
|
|
|
|
|
RNA_def_property_ui_text(prop, "3D Position", "Use 3D position of track to parent to");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-12-05 18:57:17 +00:00
|
|
|
|
|
|
|
|
/* object */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "object", PROP_STRING, PROP_NONE);
|
2011-12-05 18:57:17 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "object");
|
2011-12-15 20:38:23 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Object", "Movie tracking object to follow (if empty, camera object is used)");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-12-15 20:38:23 +00:00
|
|
|
|
|
|
|
|
/* camera */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
|
2011-12-15 20:38:23 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "camera");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Camera",
|
|
|
|
|
"Camera to which motion is parented (if empty active scene camera is used)");
|
2011-12-15 20:38:23 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, "rna_Constraint_followTrack_camera_set", NULL,
|
|
|
|
|
"rna_Constraint_cameraObject_poll");
|
2012-01-04 17:20:08 +00:00
|
|
|
|
|
|
|
|
/* depth object */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "depth_object", PROP_POINTER, PROP_NONE);
|
2012-01-04 17:20:08 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "depth_ob");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Depth Object",
|
|
|
|
|
"Object used to define depth in camera space by projecting onto surface of this object");
|
2012-01-04 17:20:08 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, "rna_Constraint_followTrack_depthObject_set", NULL,
|
|
|
|
|
"rna_Constraint_followTrack_depthObject_poll");
|
2012-08-09 16:57:02 +00:00
|
|
|
|
|
|
|
|
/* frame method */
|
|
|
|
|
prop = RNA_def_property(srna, "frame_method", PROP_ENUM, PROP_NONE);
|
|
|
|
|
RNA_def_property_enum_bitflag_sdna(prop, NULL, "frame_method");
|
|
|
|
|
RNA_def_property_enum_items(prop, frame_method_items);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Frame Method", "How the footage fits in the camera frame");
|
|
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-11-07 12:55:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void rna_def_constraint_camera_solver(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "CameraSolverConstraint", "Constraint");
|
2011-12-05 18:57:17 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Camera Solver Constraint", "Lock motion to the reconstructed camera movement");
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_struct_sdna_from(srna, "bCameraSolverConstraint", "data");
|
|
|
|
|
|
|
|
|
|
/* movie clip */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "clip");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-11-07 12:55:18 +00:00
|
|
|
|
|
|
|
|
/* use default clip */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE);
|
2011-11-07 12:55:18 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAMERASOLVER_ACTIVECLIP);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-11-07 12:55:18 +00:00
|
|
|
}
|
|
|
|
|
|
2011-12-05 18:57:17 +00:00
|
|
|
static void rna_def_constraint_object_solver(BlenderRNA *brna)
|
|
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
srna = RNA_def_struct(brna, "ObjectSolverConstraint", "Constraint");
|
2011-12-05 18:57:17 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Object Solver Constraint", "Lock motion to the reconstructed object movement");
|
|
|
|
|
RNA_def_struct_sdna_from(srna, "bObjectSolverConstraint", "data");
|
|
|
|
|
|
|
|
|
|
/* movie clip */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
|
2011-12-05 18:57:17 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "clip");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from");
|
|
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-12-05 18:57:17 +00:00
|
|
|
|
|
|
|
|
/* use default clip */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE);
|
2011-12-05 18:57:17 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAMERASOLVER_ACTIVECLIP);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
|
2011-12-05 18:57:17 +00:00
|
|
|
|
|
|
|
|
/* object */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "object", PROP_STRING, PROP_NONE);
|
2011-12-05 18:57:17 +00:00
|
|
|
RNA_def_property_string_sdna(prop, NULL, "object");
|
|
|
|
|
RNA_def_property_ui_text(prop, "Object", "Movie tracking object to follow");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2011-12-15 20:38:23 +00:00
|
|
|
|
|
|
|
|
/* camera */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
|
2011-12-15 20:38:23 +00:00
|
|
|
RNA_def_property_pointer_sdna(prop, NULL, "camera");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Camera",
|
|
|
|
|
"Camera to which motion is parented (if empty active scene camera is used)");
|
2011-12-15 20:38:23 +00:00
|
|
|
RNA_def_property_flag(prop, PROP_EDITABLE);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_dependency_update");
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_pointer_funcs(prop, NULL, "rna_Constraint_objectSolver_camera_set", NULL,
|
|
|
|
|
"rna_Constraint_cameraObject_poll");
|
2011-12-05 18:57:17 +00:00
|
|
|
}
|
|
|
|
|
|
2008-12-12 23:30:23 +00:00
|
|
|
/* base struct for constraints */
|
2009-01-20 03:55:30 +00:00
|
|
|
void RNA_def_constraint(BlenderRNA *brna)
|
2008-12-12 23:30:23 +00:00
|
|
|
{
|
|
|
|
|
StructRNA *srna;
|
|
|
|
|
PropertyRNA *prop;
|
|
|
|
|
|
|
|
|
|
/* data */
|
2012-05-12 11:01:29 +00:00
|
|
|
srna = RNA_def_struct(brna, "Constraint", NULL);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_struct_ui_text(srna, "Constraint", "Constraint modifying the transformation of objects and bones");
|
2009-01-20 03:55:30 +00:00
|
|
|
RNA_def_struct_refine_func(srna, "rna_ConstraintType_refine");
|
2009-05-27 00:03:49 +00:00
|
|
|
RNA_def_struct_path_func(srna, "rna_Constraint_path");
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_struct_sdna(srna, "bConstraint");
|
|
|
|
|
|
|
|
|
|
/* strings */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
2009-10-09 09:48:04 +00:00
|
|
|
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Constraint_name_set");
|
2010-05-09 08:33:18 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Name", "Constraint name");
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_struct_name_property(srna, prop);
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT | NA_RENAME, NULL);
|
2008-12-12 23:30:23 +00:00
|
|
|
|
|
|
|
|
/* enums */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
|
2009-03-23 13:24:48 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "type");
|
2009-05-27 00:03:49 +00:00
|
|
|
RNA_def_property_enum_items(prop, constraint_type_items);
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Type", "");
|
2009-05-28 23:23:47 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "owner_space", PROP_ENUM, PROP_NONE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "ownspace");
|
2011-05-15 17:59:48 +00:00
|
|
|
RNA_def_property_enum_items(prop, owner_space_pchan_items);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_owner_space_itemf");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Owner Space", "Space that owner is evaluated in");
|
2009-05-28 23:23:47 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "target_space", PROP_ENUM, PROP_NONE);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_sdna(prop, NULL, "tarspace");
|
2011-05-15 17:59:48 +00:00
|
|
|
RNA_def_property_enum_items(prop, target_space_pchan_items);
|
2009-05-28 23:23:47 +00:00
|
|
|
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Constraint_target_space_itemf");
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in");
|
2009-05-28 23:23:47 +00:00
|
|
|
|
2008-12-12 23:30:23 +00:00
|
|
|
/* flags */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
|
2010-09-06 07:26:21 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Disable", "Enable/Disable Constraint");
|
2010-07-04 09:42:00 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
|
2010-01-28 23:41:34 +00:00
|
|
|
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
|
2010-07-04 09:42:00 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
/* XXX this is really an internal flag, but it may be useful for some tools to be able to access this... */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
|
2009-03-23 13:24:48 +00:00
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2010-08-21 04:51:00 +00:00
|
|
|
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
|
2011-04-23 11:13:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Valid", "Constraint has valid settings and can be evaluated");
|
2008-12-12 23:30:23 +00:00
|
|
|
|
2012-05-12 11:01:29 +00:00
|
|
|
/* TODO: setting this to true must ensure that all others in stack are turned off too... */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
|
|
|
|
|
RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
|
|
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "is_proxy_local", PROP_BOOLEAN, PROP_NONE);
|
2008-12-12 23:30:23 +00:00
|
|
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Proxy Local",
|
|
|
|
|
"Constraint was added in this proxy instance (i.e. did not belong to source Armature)");
|
2008-12-12 23:30:23 +00:00
|
|
|
|
2009-01-27 05:04:23 +00:00
|
|
|
/* values */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR);
|
2009-01-27 05:04:23 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "enforce");
|
|
|
|
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
2010-02-10 21:15:44 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Influence", "Amount of influence constraint will have on the final solution");
|
2012-05-12 11:01:29 +00:00
|
|
|
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_influence_update");
|
2009-09-24 21:22:24 +00:00
|
|
|
|
|
|
|
|
/* readonly values */
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "error_location", PROP_FLOAT, PROP_NONE);
|
2009-09-24 21:22:24 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "lin_error");
|
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Lin error",
|
|
|
|
|
"Amount of residual error in Blender space unit for constraints that work on position");
|
2009-09-24 21:22:24 +00:00
|
|
|
|
2012-03-05 23:30:41 +00:00
|
|
|
prop = RNA_def_property(srna, "error_rotation", PROP_FLOAT, PROP_NONE);
|
2009-09-24 21:22:24 +00:00
|
|
|
RNA_def_property_float_sdna(prop, NULL, "rot_error");
|
|
|
|
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
2012-03-18 09:27:36 +00:00
|
|
|
RNA_def_property_ui_text(prop, "Rot error",
|
2012-10-27 13:22:44 +00:00
|
|
|
"Amount of residual error in radians for constraints that work on orientation");
|
2009-09-24 21:22:24 +00:00
|
|
|
|
2008-12-12 23:30:23 +00:00
|
|
|
/* pointers */
|
2009-01-20 03:55:30 +00:00
|
|
|
rna_def_constrainttarget(brna);
|
2008-12-12 23:30:23 +00:00
|
|
|
|
2009-01-20 03:55:30 +00:00
|
|
|
rna_def_constraint_childof(brna);
|
|
|
|
|
rna_def_constraint_python(brna);
|
|
|
|
|
rna_def_constraint_stretch_to(brna);
|
|
|
|
|
rna_def_constraint_follow_path(brna);
|
|
|
|
|
rna_def_constraint_locked_track(brna);
|
|
|
|
|
rna_def_constraint_action(brna);
|
|
|
|
|
rna_def_constraint_size_like(brna);
|
2010-03-16 12:55:56 +00:00
|
|
|
rna_def_constraint_same_volume(brna);
|
2009-01-20 03:55:30 +00:00
|
|
|
rna_def_constraint_locate_like(brna);
|
|
|
|
|
rna_def_constraint_rotate_like(brna);
|
2010-01-02 04:14:17 +00:00
|
|
|
rna_def_constraint_transform_like(brna);
|
2009-01-20 03:55:30 +00:00
|
|
|
rna_def_constraint_minmax(brna);
|
|
|
|
|
rna_def_constraint_track_to(brna);
|
|
|
|
|
rna_def_constraint_kinematic(brna);
|
|
|
|
|
rna_def_constraint_rigid_body_joint(brna);
|
|
|
|
|
rna_def_constraint_clamp_to(brna);
|
|
|
|
|
rna_def_constraint_distance_limit(brna);
|
|
|
|
|
rna_def_constraint_size_limit(brna);
|
|
|
|
|
rna_def_constraint_rotation_limit(brna);
|
|
|
|
|
rna_def_constraint_location_limit(brna);
|
|
|
|
|
rna_def_constraint_transform(brna);
|
2009-05-30 23:31:10 +00:00
|
|
|
rna_def_constraint_shrinkwrap(brna);
|
2009-10-30 06:33:40 +00:00
|
|
|
rna_def_constraint_damped_track(brna);
|
2009-11-01 11:29:40 +00:00
|
|
|
rna_def_constraint_spline_ik(brna);
|
== Pivot Constraint ==
This constraint allows an object or bone to have their rotations applied as if their origin/pivot-point was located elsewhere. The most obvious uses include foot-roll, see-saws, but could also include more complicated rolling-box examples.
== Usage Examples ==
=== Foot Roll ===
1. Add 'Pivot' Constraint to the bone without any target.
2. Set the 'Y' value of the offset to the length of the bone. Usually this should be negative (if you rig with feet facing 'forwards' along -Y axis). This gives you a pivot point relative to the bone's (preconstraint) location, which should be at the tip of the bone here. Disabling the 'Use Relative Offset' would make this offset be relative to 0,0,0 instead of to the owner/bone-head.
3. Ensure that the 'Pivot When' setting is set to '-X Rot', (default) which means that the pivot will only used when the rotation on the X-Axis is negative to get tip-toe 'roll'.
=== See Saw ===
1. Add a 'Pivot' constraint too see-saw plank object, this time with a target that you wish to have as the pivot-point. It's possible to do this without too (as before), but is less intuitive.
2. Optionally, if you want the plank slightly raised, set the z-offset value, which should make the pivot-point used to be relative to the target with the z-offset applied.
3. Ensure that 'Pivot When' is set to 'Always', which means that the pivot will always be used, irrespective of the rotation.
== Notes ==
* The 'Pivot When' setting has been integrated in the constraint, since this is something that will often be required for these setups. Having to set up additional drivers to drive the constraint to do this kindof beats the purpose of providing this.
* The 'Offset' functionality is probably not presented as clearly as it could be. We may need to go over this again.
* For foot-roll - if any scaling of the foot is required, simply set up a driver on the y-offset to make this dynamically respond to the "scale" RNA property of the bones (don't use the "Transform Channel" vartype since that won't work correct here). However, this shouldn't be common enough to warrant special treatment.
2010-05-27 10:50:06 +00:00
|
|
|
rna_def_constraint_pivot(brna);
|
2011-11-07 12:55:18 +00:00
|
|
|
rna_def_constraint_follow_track(brna);
|
|
|
|
|
rna_def_constraint_camera_solver(brna);
|
2011-12-05 18:57:17 +00:00
|
|
|
rna_def_constraint_object_solver(brna);
|
2008-12-12 23:30:23 +00:00
|
|
|
}
|
|
|
|
|
|
2009-06-02 23:53:40 +00:00
|
|
|
#endif
|