[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38544] branches/soc-2011-radish/source/ blender: Added vertex masking support for the weight paint vgroup functions including :
Jason Hays
jason_hays22 at mymail.eku.edu
Wed Jul 20 17:56:35 CEST 2011
Revision: 38544
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38544
Author: jason_hays22
Date: 2011-07-20 15:56:35 +0000 (Wed, 20 Jul 2011)
Log Message:
-----------
Added vertex masking support for the weight paint vgroup functions including:
Normalize, Normalize All, Invert, Clean, and Levels.
Face mask and vertex select/mask are now mutually exclusive options.
Went ahead and allowed vertex selection support and masking for vertex paint.
Modified Paths:
--------------
branches/soc-2011-radish/source/blender/blenkernel/intern/DerivedMesh.c
branches/soc-2011-radish/source/blender/blenkernel/intern/paint.c
branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c
branches/soc-2011-radish/source/blender/editors/sculpt_paint/paint_vertex.c
branches/soc-2011-radish/source/blender/editors/space_view3d/drawmesh.c
branches/soc-2011-radish/source/blender/editors/space_view3d/drawobject.c
branches/soc-2011-radish/source/blender/editors/space_view3d/view3d_header.c
branches/soc-2011-radish/source/blender/makesrna/intern/rna_mesh.c
Modified: branches/soc-2011-radish/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/soc-2011-radish/source/blender/blenkernel/intern/DerivedMesh.c 2011-07-20 15:33:27 UTC (rev 38543)
+++ branches/soc-2011-radish/source/blender/blenkernel/intern/DerivedMesh.c 2011-07-20 15:56:35 UTC (rev 38544)
@@ -2333,7 +2333,7 @@
static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask)
{
Object *obact = scene->basact?scene->basact->object:NULL;
- int editing = paint_facesel_test(ob);
+ int editing = paint_facesel_test(ob) || paint_vertsel_test(ob);// Jason: paint_vertsel_test
/* weight paint and face select need original indices because of selection buffer drawing */
int needMapping = (ob==obact) && (editing || (ob->mode & (OB_MODE_WEIGHT_PAINT|OB_MODE_VERTEX_PAINT)));
Modified: branches/soc-2011-radish/source/blender/blenkernel/intern/paint.c
===================================================================
--- branches/soc-2011-radish/source/blender/blenkernel/intern/paint.c 2011-07-20 15:33:27 UTC (rev 38543)
+++ branches/soc-2011-radish/source/blender/blenkernel/intern/paint.c 2011-07-20 15:56:35 UTC (rev 38544)
@@ -99,7 +99,7 @@
/* Jason */
int paint_vertsel_test(Object *ob)
{
- return (ob && ob->type==OB_MESH && ob->data && (((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) && (ob->mode & (OB_MODE_WEIGHT_PAINT)));
+ return (ob && ob->type==OB_MESH && ob->data && (((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) && (ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT)));
}
void paint_init(Paint *p, const char col[3])
{
Modified: branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c 2011-07-20 15:33:27 UTC (rev 38543)
+++ branches/soc-2011-radish/source/blender/editors/object/object_vgroup.c 2011-07-20 15:56:35 UTC (rev 38544)
@@ -701,6 +701,10 @@
MDeformWeight *dw;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
+ // Jason
+ Mesh *me = ob->data;
+ MVert *mv = me->mvert;
+ int selectedVerts = me->editflag & ME_EDIT_VERT_SEL;
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
@@ -712,6 +716,11 @@
def_nr= ob->actdef-1;
for(i = 0; i < dvert_tot; i++) {
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
+
dvert = dvert_array[i];
dw = defvert_find_index(dvert, def_nr);
if(dw) {
@@ -721,6 +730,11 @@
if(weight_max > 0.0f) {
for(i = 0; i < dvert_tot; i++) {
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
+
dvert = dvert_array[i];
dw = defvert_find_index(dvert, def_nr);
if(dw) {
@@ -742,7 +756,11 @@
MDeformWeight *dw;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
-
+ // Jason
+ Mesh *me = ob->data;
+ MVert *mv = me->mvert;
+ int selectedVerts = me->editflag & ME_EDIT_VERT_SEL;
+
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
dg = BLI_findlink(&ob->defbase, (ob->actdef-1));
@@ -751,6 +769,11 @@
def_nr= ob->actdef-1;
for(i = 0; i < dvert_tot; i++) {
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
+
dvert = dvert_array[i];
dw = defvert_find_index(dvert, def_nr);
if(dw) {
@@ -772,6 +795,11 @@
int i, dvert_tot=0;
float tot_weight;
+ // Jason
+ Mesh *me = ob->data;
+ MVert *mv = me->mvert;
+ int selectedVerts = me->editflag & ME_EDIT_VERT_SEL;
+
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if(dvert_array) {
@@ -781,6 +809,10 @@
for(i = 0; i < dvert_tot; i++) {
float lock_iweight= 1.0f;
int j;
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
tot_weight= 0.0f;
dw_act= NULL;
@@ -821,6 +853,11 @@
else {
for(i = 0; i < dvert_tot; i++) {
int j;
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
+
tot_weight= 0.0f;
dvert = dvert_array[i];
@@ -880,6 +917,10 @@
MDeformWeight *dw;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
+ // Jason
+ Mesh *me = ob->data;
+ MVert *mv = me->mvert;
+ int selectedVerts = me->editflag & ME_EDIT_VERT_SEL;
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
@@ -890,6 +931,10 @@
for(i = 0; i < dvert_tot; i++) {
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
dvert = dvert_array[i];
if(auto_assign) {
@@ -1002,6 +1047,10 @@
MDeformWeight *dw;
MDeformVert *dvert, **dvert_array=NULL;
int i, def_nr, dvert_tot=0;
+ // Jason
+ Mesh *me = ob->data;
+ MVert *mv = me->mvert;
+ int selectedVerts = me->editflag & ME_EDIT_VERT_SEL;
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
@@ -1011,6 +1060,10 @@
def_nr= ob->actdef-1;
for(i = 0; i < dvert_tot; i++) {
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
dvert = dvert_array[i];
dw= defvert_find_index(dvert, def_nr);
@@ -1032,12 +1085,21 @@
MDeformWeight *dw;
MDeformVert *dvert, **dvert_array=NULL;
int i, dvert_tot=0;
+ // Jason
+ Mesh *me = ob->data;
+ MVert *mv = me->mvert;
+ int selectedVerts = me->editflag & ME_EDIT_VERT_SEL;
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot);
if(dvert_array) {
for(i = 0; i < dvert_tot; i++) {
int j;
+ // Jason
+ if(selectedVerts && !((mv+i)->flag & SELECT)) {
+ continue;
+ }
+
dvert = dvert_array[i];
j= dvert->totweight;
Modified: branches/soc-2011-radish/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- branches/soc-2011-radish/source/blender/editors/sculpt_paint/paint_vertex.c 2011-07-20 15:33:27 UTC (rev 38543)
+++ branches/soc-2011-radish/source/blender/editors/sculpt_paint/paint_vertex.c 2011-07-20 15:56:35 UTC (rev 38544)
@@ -361,8 +361,10 @@
Mesh *me;
MFace *mf;
unsigned int *mcol;
- int i, selected;
-
+ int i, selected, selectedVerts;//Jason
+ // Jason
+ MVert *mv;
+
me= get_mesh(ob);
if(me==NULL || me->totface==0) return;
@@ -370,15 +372,29 @@
make_vertexcol(ob);
selected= (me->editflag & ME_EDIT_PAINT_MASK);
+ // Jason
+ selectedVerts = (me->editflag & ME_EDIT_VERT_SEL);
+ mv = me->mvert;
mf = me->mface;
mcol = (unsigned int*)me->mcol;
for (i = 0; i < me->totface; i++, mf++, mcol+=4) {
- if (!selected || mf->flag & ME_FACE_SEL) {
- mcol[0] = paintcol;
- mcol[1] = paintcol;
- mcol[2] = paintcol;
- mcol[3] = paintcol;
+ if (!selected || mf->flag & ME_FACE_SEL || selectedVerts) {
+ if(selectedVerts) {
+ if(((mv+mf->v1)->flag & SELECT))
+ mcol[0] = paintcol;
+ if(((mv+mf->v2)->flag & SELECT))
+ mcol[1] = paintcol;
+ if(((mv+mf->v3)->flag & SELECT))
+ mcol[2] = paintcol;
+ if(mf->v4 && ((mv+mf->v4)->flag & SELECT))
+ mcol[3] = paintcol;
+ } else {
+ mcol[0] = paintcol;
+ mcol[1] = paintcol;
+ mcol[2] = paintcol;
+ mcol[3] = paintcol;
+ }
}
}
@@ -443,7 +459,7 @@
for (i=0; i<3 || faceverts[i]; i++) {
if(!((me->dvert+faceverts[i])->flag)) {
// Jason
- if(selectedVerts && !((me->mvert+faceverts[i])->flag & 1)) {
+ if(selectedVerts && !((me->mvert+faceverts[i])->flag & SELECT)) {
continue;
}
@@ -1972,10 +1988,10 @@
if(indexar[index] && indexar[index]<=me->totface) {
MFace *mface= me->mface + (indexar[index]-1);
- (me->dvert+mface->v1)->flag= selectedVerts ? ((me->mvert+mface->v1)->flag & 1): 1;
- (me->dvert+mface->v2)->flag= selectedVerts ? ((me->mvert+mface->v2)->flag & 1): 1;
- (me->dvert+mface->v3)->flag= selectedVerts ? ((me->mvert+mface->v3)->flag & 1): 1;
- if(mface->v4) (me->dvert+mface->v4)->flag= selectedVerts ? ((me->mvert+mface->v4)->flag & 1): 1;
+ (me->dvert+mface->v1)->flag= selectedVerts ? ((me->mvert+mface->v1)->flag & SELECT): 1;
+ (me->dvert+mface->v2)->flag= selectedVerts ? ((me->mvert+mface->v2)->flag & SELECT): 1;
+ (me->dvert+mface->v3)->flag= selectedVerts ? ((me->mvert+mface->v3)->flag & SELECT): 1;
+ if(mface->v4) (me->dvert+mface->v4)->flag= selectedVerts ? ((me->mvert+mface->v4)->flag & SELECT): 1;
if(brush->vertexpaint_tool==VP_BLUR) {
MDeformWeight *dw, *(*dw_func)(MDeformVert *, const int);
@@ -2298,14 +2314,33 @@
Brush *brush = paint_brush(&vp->paint);
Mesh *me = get_mesh(ob);
MFace *mface= ((MFace*)me->mface) + index;
+ // Jason
+ MVert *mv = me->mvert;
+ int selectedVerts = (me->editflag & ME_EDIT_VERT_SEL);
+ char *m;
+
unsigned int *mcol= ((unsigned int*)me->mcol) + 4*index;
unsigned int *mcolorig= ((unsigned int*)vp->vpaint_prev) + 4*index;
float alpha;
int i;
+ // Jason
+ if(selectedVerts) {
+ m = MEM_mallocN(sizeof(char)*4, "selectedVerts");
+ m[0] = ((mv+mface->v1)->flag & SELECT);
+ m[1] = ((mv+mface->v2)->flag & SELECT);
+ m[2] = ((mv+mface->v3)->flag & SELECT);
+ m[3] = (mface->v4 && ((mv+mface->v4)->flag & SELECT));
+ }
+
if((vp->flag & VP_COLINDEX && mface->mat_nr!=ob->actcol-1) ||
- ((me->editflag & ME_EDIT_PAINT_MASK) && !(mface->flag & ME_FACE_SEL)))
- return;
+ ((me->editflag & ME_EDIT_PAINT_MASK) && !(mface->flag & ME_FACE_SEL))
+ || (selectedVerts && !(m[0] || m[1] || m[2] || m[3]))) {// Jason
+ if(selectedVerts) {
+ MEM_freeN(m);
+ }
+ return;
+ }
if(brush->vertexpaint_tool==VP_BLUR) {
unsigned int fcol1= mcol_blend( mcol[0], mcol[1], 128);
@@ -2320,10 +2355,16 @@
}
for(i = 0; i < (mface->v4 ? 4 : 3); ++i) {
- alpha= calc_vp_alpha_dl(vp, vc, vpd->vpimat, vpd->vertexcosnos+6*(&mface->v1)[i], mval, pressure);
- if(alpha)
- vpaint_blend(vp, mcol+i, mcolorig+i, vpd->paintcol, (int)(alpha*255.0f));
+ if(!selectedVerts || m[i]) {
+ alpha= calc_vp_alpha_dl(vp, vc, vpd->vpimat, vpd->vertexcosnos+6*(&mface->v1)[i], mval, pressure);
+ if(alpha)
+ vpaint_blend(vp, mcol+i, mcolorig+i, vpd->paintcol, (int)(alpha*255.0f));
+ }
}
+ // Jason
+ if(selectedVerts) {
+ MEM_freeN(m);
+ }
}
static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, PointerRNA *itemptr)
Modified: branches/soc-2011-radish/source/blender/editors/space_view3d/drawmesh.c
===================================================================
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list