From 4e024a1e6e41640d2f70624bb15778dc6a6c6695 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 26 Jul 2009 11:57:27 +0000 Subject: [PATCH] 2.5 - 'Reset' buttons for Limit Distance and Stretch To Constraints --- release/ui/buttons_data_armature.py | 4 ++ release/ui/buttons_object_constraint.py | 15 +++--- .../blender/editors/object/editconstraint.c | 52 +++++++++++++++++++ source/blender/editors/object/object_intern.h | 2 + source/blender/editors/object/object_ops.c | 2 + 5 files changed, 69 insertions(+), 6 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index b2c135e4a9b..51113226dac 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -96,20 +96,24 @@ class DATA_PT_bone_groups(DataButtonsPanel): row.template_list(pose, "bone_groups", pose, "active_bone_group_index") col = row.column(align=True) + col.active = (ob.proxy == None) col.itemO("pose.group_add", icon="ICON_ZOOMIN", text="") col.itemO("pose.group_remove", icon="ICON_ZOOMOUT", text="") group = pose.active_bone_group if group: col = layout.column() + col.active= (ob.proxy == None) col.itemR(group, "name") split = layout.split(0.5) + split.active= (ob.proxy == None) split.itemR(group, "color_set") if group.color_set: split.template_triColorSet(group, "colors") row = layout.row(align=True) + row.active= (ob.proxy == None) row.itemO("pose.group_assign", text="Assign") row.itemO("pose.group_remove", text="Remove") #row.itemO("pose.bone_group_remove_from", text="Remove") diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py index 8d531df9e19..1766513a952 100644 --- a/release/ui/buttons_object_constraint.py +++ b/release/ui/buttons_object_constraint.py @@ -379,26 +379,29 @@ class ConstraintButtonsPanel(bpy.types.Panel): def limit_distance(self, layout, con): self.target_template(layout, con) - layout.itemR(con, "distance") + col = layout.column(align=True); + col.itemR(con, "distance") + col.itemO("constraint.limitdistance_reset") row = layout.row() row.itemL(text="Clamp Region:") row.itemR(con, "limit_mode", text="") - #Missing: Recalculate Button def stretch_to(self, layout, con): self.target_template(layout, con) - row = layout.row() - row.itemR(con, "original_length", text="Rest Length") - row.itemR(con, "bulge", text="Volume Variation") + col = layout.column(align=True) + col.itemR(con, "original_length", text="Rest Length") + col.itemO("constraint.stretchto_reset") + + col = layout.column() + col.itemR(con, "bulge", text="Volume Variation") row = layout.row() row.itemL(text="Volume:") row.itemR(con, "volume", expand=True) row.itemL(text="Plane:") row.itemR(con, "keep_axis", expand=True) - #Missing: Recalculate Button def floor(self, layout, con): self.target_template(layout, con) diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c index 437beda324b..9e8205e58ab 100644 --- a/source/blender/editors/object/editconstraint.c +++ b/source/blender/editors/object/editconstraint.c @@ -462,6 +462,58 @@ void object_test_constraints (Object *owner) /* ********************** CONSTRAINT-SPECIFIC STUFF ********************* */ +/* ---------- Distance-Dependent Constraints ---------- */ +/* StretchTo, Limit Distance */ + +static int stretchto_reset_exec (bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_StretchToConstraint); + + /* just set original length to 0.0, which will cause a reset on next recalc */ + RNA_float_set(&ptr, "original_length", 0.0f); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + return OPERATOR_FINISHED; +} + +void CONSTRAINT_OT_stretchto_reset (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reset Original Length"; + ot->idname= "CONSTRAINT_OT_stretchto_reset"; + ot->description= "Reset original length of bone for Stretch To Constraint."; + + ot->exec= stretchto_reset_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + +static int limitdistance_reset_exec (bContext *C, wmOperator *op) +{ + PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_LimitDistanceConstraint); + + /* just set distance to 0.0, which will cause a reset on next recalc */ + RNA_float_set(&ptr, "distance", 0.0f); + + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + return OPERATOR_FINISHED; +} + +void CONSTRAINT_OT_limitdistance_reset (wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reset Distance"; + ot->idname= "CONSTRAINT_OT_limitdistance_reset"; + ot->description= "Reset limiting distance for Limit Distance Constraint."; + + ot->exec= limitdistance_reset_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ------------- Child-Of Constraint ------------------ */ /* ChildOf Constraint - set inverse callback */ diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index da1dd458555..29076d9f32a 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -120,6 +120,8 @@ void CONSTRAINT_OT_delete(struct wmOperatorType *ot); void CONSTRAINT_OT_move_up(struct wmOperatorType *ot); void CONSTRAINT_OT_move_down(struct wmOperatorType *ot); +void CONSTRAINT_OT_stretchto_reset(struct wmOperatorType *ot); +void CONSTRAINT_OT_limitdistance_reset(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_set_inverse(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_clear_inverse(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 27d481ef509..c54a8cef8dc 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -125,6 +125,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(CONSTRAINT_OT_delete); WM_operatortype_append(CONSTRAINT_OT_move_up); WM_operatortype_append(CONSTRAINT_OT_move_down); + WM_operatortype_append(CONSTRAINT_OT_stretchto_reset); + WM_operatortype_append(CONSTRAINT_OT_limitdistance_reset); WM_operatortype_append(CONSTRAINT_OT_childof_set_inverse); WM_operatortype_append(CONSTRAINT_OT_childof_clear_inverse);