diff options
Diffstat (limited to 'source/blender/makesrna/intern/rna_constraint.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_constraint.c | 169 |
1 files changed, 167 insertions, 2 deletions
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 08d2a03b2a9..7732bf531d8 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -256,6 +256,17 @@ static const EnumPropertyItem track_axis_items[] = { {0, NULL, 0, NULL, NULL}, }; +static const EnumPropertyItem euler_order_items[] = { + {CONSTRAINT_EULER_AUTO, "AUTO", 0, "Default", "Euler using the default rotation order"}, + {CONSTRAINT_EULER_XYZ, "XYZ", 0, "XYZ Euler", "Euler using the XYZ rotation order"}, + {CONSTRAINT_EULER_XZY, "XZY", 0, "XZY Euler", "Euler using the XZY rotation order"}, + {CONSTRAINT_EULER_YXZ, "YXZ", 0, "YXZ Euler", "Euler using the YXZ rotation order"}, + {CONSTRAINT_EULER_YZX, "YZX", 0, "YZX Euler", "Euler using the YZX rotation order"}, + {CONSTRAINT_EULER_ZXY, "ZXY", 0, "ZXY Euler", "Euler using the ZXY rotation order"}, + {CONSTRAINT_EULER_ZYX, "ZYX", 0, "ZYX Euler", "Euler using the ZYX rotation order"}, + {0, NULL, 0, NULL, NULL}, +}; + #ifdef RNA_RUNTIME static const EnumPropertyItem space_object_items[] = { @@ -519,6 +530,24 @@ static void rna_Constraint_ik_type_set(struct PointerRNA *ptr, int value) } } +/* DEPRECATED: use_offset replaced with mix_mode */ +static bool rna_Constraint_RotLike_use_offset_get(struct PointerRNA *ptr) +{ + bConstraint *con = ptr->data; + bRotateLikeConstraint *rotlike = con->data; + return rotlike->mix_mode != ROTLIKE_MIX_REPLACE; +} + +static void rna_Constraint_RotLike_use_offset_set(struct PointerRNA *ptr, bool value) +{ + bConstraint *con = ptr->data; + bRotateLikeConstraint *rotlike = con->data; + bool curval = (rotlike->mix_mode != ROTLIKE_MIX_REPLACE); + if (curval != value) { + rotlike->mix_mode = (value ? ROTLIKE_MIX_OFFSET : ROTLIKE_MIX_REPLACE); + } +} + static const EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), @@ -1287,6 +1316,28 @@ static void rna_def_constraint_rotate_like(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; + static const EnumPropertyItem mix_mode_items[] = { + {ROTLIKE_MIX_REPLACE, "REPLACE", 0, "Replace", "Replace the original rotation with copied"}, + {ROTLIKE_MIX_ADD, "ADD", 0, "Add", "Add euler component values together"}, + {ROTLIKE_MIX_BEFORE, + "BEFORE", + 0, + "Before Original", + "Apply copied rotation before original, as if the constraint target is a parent"}, + {ROTLIKE_MIX_AFTER, + "AFTER", + 0, + "After Original", + "Apply copied rotation after original, as if the constraint target is a child"}, + {ROTLIKE_MIX_OFFSET, + "OFFSET", + 0, + "Offset (Legacy)", + "Combine rotations like the original Offset checkbox. Does not work well for " + "multiple axis rotations"}, + {0, NULL, 0, NULL, NULL}, + }; + srna = RNA_def_struct(brna, "CopyRotationConstraint", "Constraint"); RNA_def_struct_ui_text(srna, "Copy Rotation Constraint", "Copy the rotation of the target"); RNA_def_struct_sdna_from(srna, "bRotateLikeConstraint", "data"); @@ -1324,9 +1375,25 @@ static void rna_def_constraint_rotate_like(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + prop = RNA_def_property(srna, "euler_order", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "euler_order"); + RNA_def_property_enum_items(prop, euler_order_items); + RNA_def_property_ui_text(prop, "Euler Order", "Explicitly specify the euler rotation order"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + + prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mix_mode"); + RNA_def_property_enum_items(prop, mix_mode_items); + RNA_def_property_ui_text( + prop, "Mix Mode", "Specify how the copied and existing rotations are combined"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + + /* DEPRECATED: replaced with mix_mode */ prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_OFFSET); - RNA_def_property_ui_text(prop, "Offset", "Add original rotation into copied rotation"); + RNA_def_property_boolean_funcs( + prop, "rna_Constraint_RotLike_use_offset_get", "rna_Constraint_RotLike_use_offset_set"); + RNA_def_property_ui_text( + prop, "Offset", "DEPRECATED: Add original rotation into copied rotation"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); } @@ -1364,6 +1431,14 @@ static void rna_def_constraint_size_like(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Power", "Raise the target's scale to the specified power"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + prop = RNA_def_property(srna, "use_make_uniform", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_UNIFORM); + RNA_def_property_ui_text(prop, + "Make Uniform", + "Redistribute the copied change in volume equally " + "between the three axes of the owner"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SIZELIKE_OFFSET); RNA_def_property_ui_text(prop, "Offset", "Combine original scale with copied scale"); @@ -1440,6 +1515,28 @@ static void rna_def_constraint_same_volume(BlenderRNA *brna) static void rna_def_constraint_transform_like(BlenderRNA *brna) { StructRNA *srna; + PropertyRNA *prop; + + static const EnumPropertyItem mix_mode_items[] = { + {TRANSLIKE_MIX_REPLACE, + "REPLACE", + 0, + "Replace", + "Replace the original transformation with copied"}, + {TRANSLIKE_MIX_BEFORE, + "BEFORE", + 0, + "Before Original", + "Apply copied transformation before original, as if the constraint target is a parent. " + "Scale is handled specially to avoid creating shear"}, + {TRANSLIKE_MIX_AFTER, + "AFTER", + 0, + "After Original", + "Apply copied transformation after original, as if the constraint target is a child. " + "Scale is handled specially to avoid creating shear"}, + {0, NULL, 0, NULL, NULL}, + }; srna = RNA_def_struct(brna, "CopyTransformsConstraint", "Constraint"); RNA_def_struct_ui_text( @@ -1452,6 +1549,13 @@ static void rna_def_constraint_transform_like(BlenderRNA *brna) RNA_def_struct_ui_icon(srna, ICON_CON_TRANSLIKE); rna_def_constraint_target_common(srna); + + prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mix_mode"); + RNA_def_property_enum_items(prop, mix_mode_items); + RNA_def_property_ui_text( + prop, "Mix Mode", "Specify how the copied and existing transformations are combined"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); } static void rna_def_constraint_minmax(BlenderRNA *brna) @@ -1830,6 +1934,34 @@ static void rna_def_constraint_transform(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}, }; + static const EnumPropertyItem mix_mode_loc_items[] = { + {TRANS_MIXLOC_REPLACE, "REPLACE", 0, "Replace", "Replace component values"}, + {TRANS_MIXLOC_ADD, "ADD", 0, "Add", "Add component values together"}, + {0, NULL, 0, NULL, NULL}, + }; + + static const EnumPropertyItem mix_mode_rot_items[] = { + {TRANS_MIXROT_REPLACE, "REPLACE", 0, "Replace", "Replace component values"}, + {TRANS_MIXROT_ADD, "ADD", 0, "Add", "Add component values together"}, + {TRANS_MIXROT_BEFORE, + "BEFORE", + 0, + "Before Original", + "Apply new rotation before original, as if it was on a parent"}, + {TRANS_MIXROT_AFTER, + "AFTER", + 0, + "After Original", + "Apply new rotation after original, as if it was on a child"}, + {0, NULL, 0, NULL, NULL}, + }; + + static const EnumPropertyItem mix_mode_scale_items[] = { + {TRANS_MIXSCALE_REPLACE, "REPLACE", 0, "Replace", "Replace component values"}, + {TRANS_MIXSCALE_MULTIPLY, "MULTIPLY", 0, "Multiply", "Multiply component values together"}, + {0, NULL, 0, NULL, NULL}, + }; + srna = RNA_def_struct(brna, "TransformConstraint", "Constraint"); RNA_def_struct_ui_text( srna, "Transformation Constraint", "Map transformations of the target to the object"); @@ -1877,6 +2009,18 @@ static void rna_def_constraint_transform(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + prop = RNA_def_property(srna, "from_rotation_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "from_rotation_mode"); + RNA_def_property_enum_items(prop, rna_enum_driver_target_rotation_mode_items); + RNA_def_property_ui_text(prop, "From Mode", "Specify the type of rotation channels to use"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + + prop = RNA_def_property(srna, "to_euler_order", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "to_euler_order"); + RNA_def_property_enum_items(prop, euler_order_items); + RNA_def_property_ui_text(prop, "To Order", "Explicitly specify the output euler rotation order"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + /* Loc */ prop = RNA_def_property(srna, "from_min_x", PROP_FLOAT, PROP_DISTANCE); RNA_def_property_float_sdna(prop, NULL, "from_min[0]"); @@ -1950,6 +2094,13 @@ static void rna_def_constraint_transform(BlenderRNA *brna) RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mix_mode_loc"); + RNA_def_property_enum_items(prop, mix_mode_loc_items); + RNA_def_property_ui_text( + prop, "Location Mix Mode", "Specify how to combine the new location with original"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + /* Rot */ prop = RNA_def_property(srna, "from_min_x_rot", PROP_FLOAT, PROP_ANGLE); RNA_def_property_float_sdna(prop, NULL, "from_min_rot[0]"); @@ -2023,6 +2174,13 @@ static void rna_def_constraint_transform(BlenderRNA *brna) RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + prop = RNA_def_property(srna, "mix_mode_rot", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mix_mode_rot"); + RNA_def_property_enum_items(prop, mix_mode_rot_items); + RNA_def_property_ui_text( + prop, "Rotation Mix Mode", "Specify how to combine the new rotation with original"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + /* Scale */ prop = RNA_def_property(srna, "from_min_x_scale", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "from_min_scale[0]"); @@ -2095,6 +2253,13 @@ static void rna_def_constraint_transform(BlenderRNA *brna) RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 10, 3); RNA_def_property_ui_text(prop, "To Maximum Z", "Top range of Z axis destination motion"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); + + prop = RNA_def_property(srna, "mix_mode_scale", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mix_mode_scale"); + RNA_def_property_enum_items(prop, mix_mode_scale_items); + RNA_def_property_ui_text( + prop, "Scale Mix Mode", "Specify how to combine the new scale with original"); + RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); } static void rna_def_constraint_location_limit(BlenderRNA *brna) |