[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40331] branches/soc-2011-radish/source/ blender/editors/armature/editarmature.c: allow multiple bones to be selected in weight paint mode in a less complicated way (allow Shift+RMB)

Campbell Barton ideasman42 at gmail.com
Sun Sep 18 17:17:16 CEST 2011


Revision: 40331
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40331
Author:   campbellbarton
Date:     2011-09-18 15:17:16 +0000 (Sun, 18 Sep 2011)
Log Message:
-----------
allow multiple bones to be selected in weight paint mode in a less complicated way (allow Shift+RMB) 

Modified Paths:
--------------
    branches/soc-2011-radish/source/blender/editors/armature/editarmature.c

Modified: branches/soc-2011-radish/source/blender/editors/armature/editarmature.c
===================================================================
--- branches/soc-2011-radish/source/blender/editors/armature/editarmature.c	2011-09-18 15:03:59 UTC (rev 40330)
+++ branches/soc-2011-radish/source/blender/editors/armature/editarmature.c	2011-09-18 15:17:16 UTC (rev 40331)
@@ -4276,74 +4276,35 @@
 	
 	return count;
 }
-/* Radish */
-Bone* get_other_selected_bone(Object *ob) {
-	Bone *bone;
-	int i;
-	bone = get_indexed_bone(ob, 0);
-	for(i = 0; bone;){
-		if(bone->flag & BONE_SELECTED) {
-			return bone;
-		}
-		i++;
-		bone = get_indexed_bone(ob, i);
-	}
 
-	return NULL;
-}
 /* called from editview.c, for mode-less pose selection */
 /* assumes scene obact and basact is still on old situation */
 int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, short hits, short extend)
 {
 	Object *ob= base->object;
 	Bone *nearBone;
-
+	
 	if (!ob || !ob->pose) return 0;
 
 	nearBone= get_bone_from_selectbuffer(scene, base, buffer, hits, 1);
-
+	
 	/* if the bone cannot be affected, don't do anything */
 	if ((nearBone) && !(nearBone->flag & BONE_UNSELECTABLE)) {
+		Object *ob_act= OBACT;
 		bArmature *arm= ob->data;
 		
-		/* since we do unified select, we don't shift+select a bone if the armature object was not active yet */
-		/* Radish, I'm doing a select for multibone painting */
-		if (scene->toolsettings->multipaint && (base != scene->basact)) {//if (!(extend) || (base != scene->basact)) {
-			Bone *new_act_bone;
-			/* Radish */
-			/* only deselect all if they aren't using 'shift' */
-			if(!extend) {
-				ED_pose_deselectall(ob, 0);
-				nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
-				arm->act_bone= nearBone;
-				ED_vgroup_select_by_name(OBACT, nearBone->name);
-			}
-			else {
-				/* Radish deselect this bone specifically if it is selected already */
-				if (nearBone->flag & BONE_SELECTED) {
-					nearBone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
-					if(nearBone == arm->act_bone) {
-						// make a different bone the active one if it exists
-						new_act_bone = get_other_selected_bone(ob);
-						if(new_act_bone) {
-							new_act_bone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
-							arm->act_bone = new_act_bone;
-							ED_vgroup_select_by_name(OBACT, new_act_bone->name);
-						}
-					}
-				// or select the bone if they are using shift
-				} else {
-					nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
-					arm->act_bone= nearBone;
-				}
-			} 
-			DAG_id_tag_update(&OBACT->id, OB_RECALC_DATA);
-				// XXX old cruft! use notifiers instead
-			//select_actionchannel_by_name(ob->action, nearBone->name, 1);
-		} else if (!(extend) || (base != scene->basact)) {
+		/* since we do unified select, we don't shift+select a bone if the
+		 * armature object was not active yet.
+		 * note, special exception for armature mode so we can do multi-select
+		 * we could check for multi-select explicitly but think its fine to
+		 * always give pradictable behavior in weight paint mode - campbell */
+		if (!(extend) || (base->object != ob_act && !(ob_act->mode & OB_MODE_WEIGHT_PAINT))) {
 			ED_pose_deselectall(ob, 0);
 			nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
 			arm->act_bone= nearBone;
+			
+				// XXX old cruft! use notifiers instead
+			//select_actionchannel_by_name(ob->action, nearBone->name, 1);
 		}
 		else {
 			if (nearBone->flag & BONE_SELECTED) {
@@ -4368,7 +4329,7 @@
 		}
 		
 		/* in weightpaint we select the associated vertex group too */
-		if (OBACT && OBACT->mode & OB_MODE_WEIGHT_PAINT) {
+		if (ob_act && ob_act->mode & OB_MODE_WEIGHT_PAINT) {
 			if (nearBone == arm->act_bone) {
 				ED_vgroup_select_by_name(OBACT, nearBone->name);
 				DAG_id_tag_update(&OBACT->id, OB_RECALC_DATA);




More information about the Bf-blender-cvs mailing list