Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/include/BIF_editarmature.h2
-rw-r--r--source/blender/include/BIF_editdeform.h2
-rw-r--r--source/blender/src/drawarmature.c8
-rw-r--r--source/blender/src/editarmature.c13
-rw-r--r--source/blender/src/editdeform.c14
-rw-r--r--source/blender/src/editview.c8
6 files changed, 40 insertions, 7 deletions
diff --git a/source/blender/include/BIF_editarmature.h b/source/blender/include/BIF_editarmature.h
index ae5acf30715..73807dab5dc 100644
--- a/source/blender/include/BIF_editarmature.h
+++ b/source/blender/include/BIF_editarmature.h
@@ -98,7 +98,7 @@ void clear_bone_parent(void);
void make_editArmature(void);
void make_trans_bones (char mode);
-void do_pose_selectbuffer(struct Base *base, unsigned int *buffer, short hits);
+int do_pose_selectbuffer(struct Base *base, unsigned int *buffer, short hits);
void mouse_armature(void);
void remake_editArmature(void);
diff --git a/source/blender/include/BIF_editdeform.h b/source/blender/include/BIF_editdeform.h
index e50de0b5bec..5444f5a39fb 100644
--- a/source/blender/include/BIF_editdeform.h
+++ b/source/blender/include/BIF_editdeform.h
@@ -59,6 +59,8 @@ void remove_vert_defgroup (struct Object *ob, struct bDeformGroup *dg,
int vertnum);
void create_dverts(Mesh *me);
+void vertexgroup_select_by_name(struct Object *ob, char *name);
+
extern void object_apply_deform(struct Object *ob);
#endif
diff --git a/source/blender/src/drawarmature.c b/source/blender/src/drawarmature.c
index 407dabc8aaf..aa2a01d37c3 100644
--- a/source/blender/src/drawarmature.c
+++ b/source/blender/src/drawarmature.c
@@ -984,8 +984,12 @@ void draw_armature(Base *base, int dt)
if(G.f & G_PICKSEL) {
if(ob->flag & OB_POSEMODE) arm->flag |= ARM_POSEMODE;
}
- else if(ob==OBACT && (ob->flag & OB_POSEMODE)) arm->flag |= ARM_POSEMODE;
-
+ else if(ob->flag & OB_POSEMODE) {
+ if(ob==OBACT)
+ arm->flag |= ARM_POSEMODE;
+ else if(G.f & G_WEIGHTPAINT)
+ arm->flag |= ARM_POSEMODE;
+ }
draw_pose_channels(base, dt);
arm->flag &= ~ARM_POSEMODE;
}
diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c
index 7c6036b313e..9db631cc3f7 100644
--- a/source/blender/src/editarmature.c
+++ b/source/blender/src/editarmature.c
@@ -1700,12 +1700,12 @@ static int clear_active_flag(Object *ob, Bone *bone, void *data)
/* called from editview.c, for mode-less pose selection */
-void do_pose_selectbuffer(Base *base, unsigned int *buffer, short hits)
+int do_pose_selectbuffer(Base *base, unsigned int *buffer, short hits)
{
Object *ob= base->object;
Bone *nearBone;
- if (!ob || !ob->pose) return;
+ if (!ob || !ob->pose) return 0;
nearBone= get_bone_from_selectbuffer(base, buffer, hits, 1);
@@ -1738,6 +1738,13 @@ void do_pose_selectbuffer(Base *base, unsigned int *buffer, short hits)
}
}
+ /* in weightpaint we select the associated vertex group too */
+ if(G.f & G_WEIGHTPAINT) {
+ if(nearBone->flag & BONE_ACTIVE) {
+ vertexgroup_select_by_name(OBACT, nearBone->name);
+ }
+ }
+
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWACTION, 0);
allqueue(REDRAWIPO, 0); /* To force action ipo update */
@@ -1746,7 +1753,7 @@ void do_pose_selectbuffer(Base *base, unsigned int *buffer, short hits)
allqueue(REDRAWOOPS, 0);
}
-// rightmouse_transform();
+ return nearBone!=NULL;
}
diff --git a/source/blender/src/editdeform.c b/source/blender/src/editdeform.c
index 1dfce2ba879..f600c8e5537 100644
--- a/source/blender/src/editdeform.c
+++ b/source/blender/src/editdeform.c
@@ -602,6 +602,20 @@ void unique_vertexgroup_name (bDeformGroup *dg, Object *ob)
}
}
+void vertexgroup_select_by_name(Object *ob, char *name)
+{
+ bDeformGroup *curdef;
+ int actdef= 1;
+
+ if(ob==NULL || ob->type!=OB_MESH) return;
+ for (curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++){
+ if (!strcmp(curdef->name, name)) {
+ ob->actdef= actdef;
+ }
+ }
+}
+
+
/* ******************* other deform edit stuff ********** */
void object_apply_deform(Object *ob)
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index 0710a1e8703..d70cf34140a 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -1266,7 +1266,13 @@ void mouse_select(void)
}
if(has_bones && basact) {
- do_pose_selectbuffer(basact, buffer, hits);
+ if( do_pose_selectbuffer(basact, buffer, hits) ) { // bone found
+
+ /* in weightpaint, we use selected bone to select vertexgroup, so no switch to new active object */
+ if(G.f & G_WEIGHTPAINT) {
+ basact= NULL;
+ }
+ }
}
}
}