[Bf-blender-cvs] [1ffb2bf917a] blender2.8: Pose: make pose-bone xray usable in wpaint mode

Campbell Barton noreply at git.blender.org
Fri Nov 23 03:20:31 CET 2018


Commit: 1ffb2bf917acf19aa5d3c0b9215371a771a2ccb1
Author: Campbell Barton
Date:   Fri Nov 23 13:17:10 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB1ffb2bf917acf19aa5d3c0b9215371a771a2ccb1

Pose: make pose-bone xray usable in wpaint mode

Update UI, draw-manager and operator to support with pose-bone-xray
when in weight paint mode.

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/pose_mode.c
M	source/blender/editors/space_view3d/view3d_edit.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index e7541729bfd..27013081ce4 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -4812,11 +4812,16 @@ class VIEW3D_PT_overlay_pose(Panel):
 
     @classmethod
     def poll(cls, context):
-        return context.mode == 'POSE'
+        mode = context.mode
+        return (
+            (mode == 'POSE') or
+            (mode == 'PAINT_WEIGHT' and context.active_object.find_armature())
+        )
 
     def draw(self, context):
         layout = self.layout
         view = context.space_data
+        mode = context.mode
         overlay = view.overlay
         display_all = overlay.show_overlays
 
@@ -4824,11 +4829,15 @@ class VIEW3D_PT_overlay_pose(Panel):
         col.active = display_all
         col.prop(overlay, "show_transparent_bones")
 
-        row = col.row()
-        row.prop(overlay, "show_bone_select", text="")
-        sub = row.row()
-        sub.active = display_all and overlay.show_bone_select
-        sub.prop(overlay, "bone_select_alpha", text="Fade Geometry")
+        if mode == 'POSE':
+            row = col.row()
+            row.prop(overlay, "show_bone_select", text="")
+            sub = row.row()
+            sub.active = display_all and overlay.show_bone_select
+            sub.prop(overlay, "bone_select_alpha", text="Fade Geometry")
+        else:
+            row = col.row()
+            row.prop(overlay, "show_bone_select")
 
 
 class VIEW3D_PT_overlay_edit_armature(Panel):
@@ -5461,8 +5470,8 @@ classes = (
     VIEW3D_PT_overlay_edit_mesh_developer,
     VIEW3D_PT_overlay_edit_curve,
     VIEW3D_PT_overlay_edit_armature,
-    VIEW3D_PT_overlay_pose,
     VIEW3D_PT_overlay_paint,
+    VIEW3D_PT_overlay_pose,
     VIEW3D_PT_overlay_sculpt,
     VIEW3D_PT_pivot_point,
     VIEW3D_PT_snapping,
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index c84dd69125c..8846b6f1dc3 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1986,6 +1986,7 @@ void DRW_draw_select_loop(
 	}
 	if (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) {
 		if (!(v3d->flag2 & V3D_RENDER_OVERRIDE)) {
+			/* Note: don't use "BKE_object_pose_armature_get" here, it breaks selection. */
 			Object *obpose = OBPOSE_FROM_OBACT(obact);
 			if (obpose) {
 				use_obedit = true;
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index c9a31e616bb..81466f19128 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -86,9 +86,9 @@ static struct {
 /* *********** FUNCTIONS *********** */
 static bool POSE_is_bone_selection_overlay_active(void)
 {
-	const DRWContextState *dcs = DRW_context_state_get();
-	const View3D *v3d = dcs->v3d;
-	return v3d && (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) && OBPOSE_FROM_OBACT(dcs->obact);
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const View3D *v3d = draw_ctx->v3d;
+	return v3d && (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) && draw_ctx->object_pose;
 }
 
 static void POSE_engine_init(void *UNUSED(vedata))
@@ -147,8 +147,9 @@ static void POSE_cache_init(void *vedata)
 
 	{
 		if (POSE_is_bone_selection_overlay_active()) {
-			copy_v4_fl4(ppd->blend_color, 0.0f, 0.0f, 0.0f, v3d->overlay.bone_select_alpha);
-			copy_v4_fl4(ppd->blend_color_invert, 0.0f, 0.0f, 0.0f, pow(v3d->overlay.bone_select_alpha, 4));
+			const float alpha = (draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) ? 0.0f : v3d->overlay.bone_select_alpha;
+			copy_v4_fl4(ppd->blend_color, 0.0f, 0.0f, 0.0f, alpha);
+			copy_v4_fl4(ppd->blend_color_invert, 0.0f, 0.0f, 0.0f, pow(alpha, 4));
 			DRWShadingGroup *grp;
 			psl->bone_selection = DRW_pass_create(
 			        "Bone Selection",
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 82e0511afe5..c94aab1a3c1 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4930,7 +4930,10 @@ static int toggle_xray_exec(bContext *C, wmOperator *op)
 	ScrArea *sa = CTX_wm_area(C);
 	Object *obact = CTX_data_active_object(C);
 
-	if (obact && obact->mode & OB_MODE_POSE) {
+	if (obact &&
+	    ((obact->mode & OB_MODE_POSE) ||
+	     ((obact->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(obact))))
+	{
 		v3d->overlay.flag ^= V3D_OVERLAY_BONE_SELECT;
 	}
 	else {



More information about the Bf-blender-cvs mailing list