[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