[Bf-blender-cvs] [74f2e7f] master: View3D: Handle un-weighed vertex color properly

Campbell Barton noreply at git.blender.org
Thu Jun 19 14:41:05 CEST 2014


Commit: 74f2e7fbc7f537b963611dbe27a5286c331b801d
Author: Campbell Barton
Date:   Thu Jun 19 22:34:52 2014 +1000
https://developer.blender.org/rB74f2e7fbc7f537b963611dbe27a5286c331b801d

View3D: Handle un-weighed vertex color properly

D608 by Gaia Clary

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

M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/editors/space_view3d/drawobject.c

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

diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 5339c3f..7a91c01 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1213,14 +1213,15 @@ static void calc_weightpaint_vert_array(Object *ob, DerivedMesh *dm, int const d
 		}
 	}
 	else {
-		int col_i;
+		unsigned char col[4];
 		if (draw_flag & (CALC_WP_GROUP_USER_ACTIVE | CALC_WP_GROUP_USER_ALL)) {
-			col_i = 0;
+			copy_v3_v3_char((char *)col, dm_wcinfo->alert_color);
+			col[3] = 255;
 		}
 		else {
-			weightpaint_color((unsigned char *)&col_i, dm_wcinfo, 0.0f);
+			weightpaint_color(col, dm_wcinfo, 0.0f);
 		}
-		fill_vn_i((int *)r_wtcol_v, numVerts, col_i);
+		fill_vn_i((int *)r_wtcol_v, numVerts, *((int *)col));
 	}
 }
 
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index c985706..a0f6d0d 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -2458,6 +2458,11 @@ static void bm_color_from_weight(float col[3], BMVert *vert, drawDMEdgesWeightIn
 	}
 }
 
+static void draw_dm_edges_nop_interp__setDrawInterpOptions(void *UNUSED(userData), int UNUSED(index), float UNUSED(t))
+{
+	/* pass */
+}
+
 static void draw_dm_edges_weight_interp__setDrawInterpOptions(void *userData, int index, float t)
 {
 	drawDMEdgesWeightInterp_userData *data = userData;
@@ -2494,17 +2499,38 @@ static void draw_dm_edges_weight_interp(BMEditMesh *em, DerivedMesh *dm, const c
 	data.weight_user = weight_user;
 	UI_GetThemeColor3fv(TH_VERTEX_UNREFERENCED, data.alert_color);
 
-	glEnable(GL_BLEND);
-	dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_weight_interp__setDrawInterpOptions, &data);
-	glDisable(GL_BLEND);
+	if ((data.vgroup_index != -1) && (data.cd_dvert_offset != -1)) {
+		glEnable(GL_BLEND);
+		dm->drawMappedEdgesInterp(
+		        dm,
+		        draw_dm_edges_sel_interp__setDrawOptions,
+		        draw_dm_edges_weight_interp__setDrawInterpOptions,
+		        &data);
+		glDisable(GL_BLEND);
+	}
+	else {
+		float col[3];
+
+		if (data.weight_user == OB_DRAW_GROUPUSER_NONE) {
+			weight_to_rgb(col, 0.0f);
+		}
+		else {
+			copy_v3_v3(col, data.alert_color);
+		}
+		glColor3fv(col);
+
+		dm->drawMappedEdgesInterp(
+		        dm,
+		        draw_dm_edges_sel_interp__setDrawOptions,
+		        draw_dm_edges_nop_interp__setDrawInterpOptions,
+		        &data);
+	}
+
 }
 
-static bool draw_dm_edges_weight_check(Mesh *me, BMEditMesh *em, View3D *v3d)
+static bool draw_dm_edges_weight_check(Mesh *me, View3D *v3d)
 {
-	if ((me->drawflag & ME_DRAWEIGHT) &&
-	    (em->ob->actdef) &&
-	    (CustomData_has_layer(&em->bm->vdata, CD_MDEFORMVERT)))
-	{
+	if (me->drawflag & ME_DRAWEIGHT) {
 		if ((v3d->drawtype == OB_WIRE) ||
 		    (v3d->flag2 & V3D_SOLID_MATCAP) ||
 		    ((v3d->flag2 & V3D_OCCLUDE_WIRE) && (v3d->drawtype > OB_WIRE)))
@@ -2932,7 +2958,7 @@ static void draw_em_fancy_edges(BMEditMesh *em, Scene *scene, View3D *v3d,
 			    ((ts->selectmode & SCE_SELECT_VERTEX) || (me->drawflag & ME_DRAWEIGHT)))
 			{
 				glShadeModel(GL_SMOOTH);
-				if (draw_dm_edges_weight_check(me, em, v3d)) {
+				if (draw_dm_edges_weight_check(me, v3d)) {
 					draw_dm_edges_weight_interp(em, cageDM, ts->weightuser);
 				}
 				else {




More information about the Bf-blender-cvs mailing list