diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 4 | ||||
-rw-r--r-- | source/blender/editors/object/object_vgroup.c | 4 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_vertex.c | 49 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_object_types.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_object.c | 4 |
5 files changed, 36 insertions, 28 deletions
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 2f6a84b0430..a696e488800 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -2125,10 +2125,10 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe uiBlockSetEmboss(block, UI_EMBOSS); } /* Jason was here: I need the RNA struct for vertex groups */ - else if(RNA_struct_is_a(itemptr->type, &RNA_VertexGroup)) { + else if(itemptr->type == &RNA_VertexGroup) { uiItemL(sub, name, icon); uiBlockSetEmboss(block, UI_EMBOSS); - uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "flag", 0, 0, 0, 0, 0, NULL); + uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "lock_weight", 0, 0, 0, 0, 0, NULL); } else if(itemptr->type == &RNA_KeyingSetPath) { KS_Path *ksp = (KS_Path*)itemptr->data; diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index e729ac9bced..bbc707de718 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -1306,7 +1306,7 @@ static void vgroup_lock_all(Object *ob) { bDeformGroup *dg = ob->defbase.first; while(dg) { - dg->flag = TRUE; + dg->flag |= DG_LOCK_WEIGHT; dg = dg->next; } } @@ -1315,7 +1315,7 @@ static void vgroup_unlock_all(Object *ob) { bDeformGroup *dg = ob->defbase.first; while(dg) { - dg->flag = FALSE; + dg->flag &= ~DG_LOCK_WEIGHT; dg = dg->next; } } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index 83d1c2d0d1d..584e88d6a7a 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -363,7 +363,7 @@ void vpaint_fill(Object *ob, unsigned int paintcol) MFace *mf; unsigned int *mcol; int i, selected; - + me= get_mesh(ob); if(me==NULL || me->totface==0) return; @@ -442,9 +442,9 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight) faceverts[2]= mface->v3; faceverts[3]= mface->v4; for (i=0; i<3 || faceverts[i]; i++) { - if(!((me->dvert+faceverts[i])->flag)) { + if(me->dvert[faceverts[i]].flag) { // Jason - if(selectedVerts && !((me->mvert+faceverts[i])->flag & SELECT)) { + if(selectedVerts && ((me->mvert[faceverts[i]].flag & SELECT) == 0)) { continue; } @@ -1167,10 +1167,8 @@ static char *gen_lck_flags(Object* ob, int defbase_len) bDeformGroup *defgroup; for(i = 0, defgroup = ob->defbase.first; i < defbase_len && defgroup; defgroup = defgroup->next, i++) { - flags[i] = defgroup->flag; - if(flags[i]) { - is_locked = TRUE; - } + flags[i] = ((defgroup->flag & DG_LOCK_WEIGHT) != 0); + is_locked |= flags[i]; } if(is_locked){ return flags; @@ -1519,7 +1517,7 @@ static void do_weight_paint_vertex(VPaint *wp, Object *ob, int index, // Jason: tdw, tuw MDeformWeight *dw, *uw, *tdw = NULL, *tuw; int vgroup= ob->actdef-1; - + /* Jason was here */ char *flags; char *bone_groups; @@ -1569,7 +1567,7 @@ static void do_weight_paint_vertex(VPaint *wp, Object *ob, int index, dv = MEM_mallocN(sizeof (*(me->dvert+index)), "prevMDeformVert"); dv->dw= MEM_dupallocN((me->dvert+index)->dw); - dv->flag = (me->dvert+index)->flag; + dv->flag = me->dvert[index].flag; dv->totweight = (me->dvert+index)->totweight; tdw = dw; tuw = uw; @@ -1647,6 +1645,7 @@ static void do_weight_paint_vertex(VPaint *wp, Object *ob, int index, } } + /* *************** set wpaint operator ****************** */ static int set_wpaint(bContext *C, wmOperator *UNUSED(op)) /* toggle */ @@ -1808,7 +1807,7 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *UNUSED struct WPaintData *wpd; Mesh *me; float mat[4][4], imat[4][4]; - + if(scene->obedit) return OPERATOR_CANCELLED; me= get_mesh(ob); @@ -1819,14 +1818,13 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *UNUSED ED_vgroup_data_create(&me->id); WM_event_add_notifier(C, NC_GEOM|ND_DATA, me); } - - + /* make mode data storage */ wpd= MEM_callocN(sizeof(struct WPaintData), "WPaintData"); paint_stroke_set_mode_data(stroke, wpd); view3d_set_viewcontext(C, &wpd->vc); wpd->vgroup_mirror= -1; - + /*set up auto-normalize, and generate map for detecting which vgroups affect deform bones*/ wpd->auto_normalize = ts->auto_normalize; @@ -1881,7 +1879,7 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *UNUSED if(me->editflag & ME_EDIT_MIRROR_X) { wpaint_mirror_vgroup_ensure(ob, &wpd->vgroup_mirror); } - + return 1; } @@ -1977,11 +1975,19 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P for(index=0; index<totindex; index++) { 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 & 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(selectedVerts) { + me->dvert[mface->v1].flag = (me->mvert[mface->v1].flag & SELECT); + me->dvert[mface->v2].flag = (me->mvert[mface->v2].flag & SELECT); + me->dvert[mface->v3].flag = (me->mvert[mface->v3].flag & SELECT); + if(mface->v4) me->dvert[mface->v4].flag = (me->mvert[mface->v4].flag & SELECT); + } + else { + me->dvert[mface->v1].flag= 1; + me->dvert[mface->v2].flag= 1; + me->dvert[mface->v3].flag= 1; + if(mface->v4) me->dvert[mface->v4].flag= 1; + } if(brush->vertexpaint_tool==VP_BLUR) { MDeformWeight *dw, *(*dw_func)(MDeformVert *, const int); @@ -2304,15 +2310,14 @@ static void vpaint_paint_face(VPaint *vp, VPaintData *vpd, Object *ob, int index Brush *brush = paint_brush(&vp->paint); Mesh *me = get_mesh(ob); MFace *mface= ((MFace*)me->mface) + index; - unsigned int *mcol= ((unsigned int*)me->mcol) + 4*index; unsigned int *mcolorig= ((unsigned int*)vp->vpaint_prev) + 4*index; float alpha; int i; - + if((vp->flag & VP_COLINDEX && mface->mat_nr!=ob->actcol-1) || ((me->editflag & ME_EDIT_PAINT_MASK) && !(mface->flag & ME_FACE_SEL))) - return; + return; if(brush->vertexpaint_tool==VP_BLUR) { unsigned int fcol1= mcol_blend( mcol[0], mcol[1], 128); diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index a2150292193..0b02006fea4 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -67,6 +67,9 @@ typedef struct bDeformGroup { } bDeformGroup; #define MAX_VGROUP_NAME 32 +/* bDeformGroup->flag */ +#define DG_LOCK_WEIGHT 1 + /** * The following illustrates the orientation of the * bounding box in local space diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 7d037264609..c460432c1b3 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -1276,9 +1276,9 @@ static void rna_def_vertex_group(BlenderRNA *brna) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_VertexGroup_name_set"); RNA_def_property_update(prop, NC_GEOM|ND_DATA|NA_RENAME, "rna_Object_internal_update_data"); /* update data because modifiers may use [#24761] */ /* Jason was here */ - prop= RNA_def_property(srna, "flag", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "lock_weight", PROP_BOOLEAN, PROP_NONE); RNA_def_property_ui_text(prop, "", "Maintain the relative weights for the group"); - RNA_def_property_boolean_sdna(prop, "bDeformGroup", "flag", 0); + RNA_def_property_boolean_sdna(prop, NULL, "flag", 0); RNA_def_property_update(prop, NC_GEOM|ND_DATA|NA_RENAME, "rna_Object_internal_update_data"); /* update data because modifiers may use [#24761] */ prop= RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED); |