[Bf-blender-cvs] [dcf1210c44c] blender2.8: Multi-Object Pose: POSE_OT_select_parent by Harsha

Dalai Felinto noreply at git.blender.org
Wed May 9 12:53:26 CEST 2018


Commit: dcf1210c44cb1e46bf387f326c5ee9daa2a53004
Author: Dalai Felinto
Date:   Wed May 9 12:48:35 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBdcf1210c44cb1e46bf387f326c5ee9daa2a53004

Multi-Object Pose: POSE_OT_select_parent by Harsha

Differential Revision: https://developer.blender.org/D3283

===================================================================

M	source/blender/editors/armature/pose_select.c

===================================================================

diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index 489fe76f47d..c26f15444ac 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -455,37 +455,46 @@ void POSE_OT_select_all(wmOperatorType *ot)
 
 static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op))
 {
-	Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
-	bArmature *arm = (bArmature *)ob->data;
-	bPoseChannel *pchan, *parent;
-
-	/* Determine if there is an active bone */
-	pchan = CTX_data_active_pose_bone(C);
-	if (pchan) {
-		parent = pchan->parent;
-		if ((parent) && !(parent->bone->flag & (BONE_HIDDEN_P | BONE_UNSELECTABLE))) {
-			parent->bone->flag |= BONE_SELECTED;
-			arm->act_bone = parent->bone;
-		}
-		else {
-			return OPERATOR_CANCELLED;
+	/* only clear relevant transforms for selected bones */
+	ViewLayer *view_layer = CTX_data_view_layer(C);
+	FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob_iter)
+	{
+		Object *ob = ob_iter;
+		bArmature *arm = (bArmature *)ob->data;
+		bPoseChannel *pchan, *parent;
+
+		FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN (ob_iter, pchan)
+		{
+			if (pchan) {
+				parent = pchan->parent;
+				if ((parent) && !(parent->bone->flag & (BONE_HIDDEN_P | BONE_UNSELECTABLE))) {
+					parent->bone->flag |= BONE_SELECTED;
+					arm->act_bone = parent->bone;
+				}
+				else {
+					continue;
+				}
+			}
+			else {
+				continue;
+			}
+
+			/* updates */
+			WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
+
+			if (arm->flag & ARM_HAS_VIZ_DEPS) {
+				/* mask modifier ('armature' mode), etc. */
+				DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+			}
+
+			/* tag armature for copy-on-write update (since act_bone is in armature not object) */
+			DEG_id_tag_update(&arm->id, DEG_TAG_COPY_ON_WRITE);
+
 		}
+		FOREACH_PCHAN_SELECTED_IN_OBJECT_END;
 	}
-	else {
-		return OPERATOR_CANCELLED;
-	}
-	
-	/* updates */
-	WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
-	
-	if (arm->flag & ARM_HAS_VIZ_DEPS) {
-		/* mask modifier ('armature' mode), etc. */
-		DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
-	}
+	FOREACH_OBJECT_IN_MODE_END;
 
-	/* tag armature for copy-on-write update (since act_bone is in armature not object) */
-	DEG_id_tag_update(&arm->id, DEG_TAG_COPY_ON_WRITE);
-	
 	return OPERATOR_FINISHED;
 }



More information about the Bf-blender-cvs mailing list