diff options
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_buttons.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_buttons.c | 61 |
1 files changed, 27 insertions, 34 deletions
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 1f49a4d526b..469452697c5 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -703,14 +703,14 @@ static void vgroup_copy_active_to_sel(Object *ob) } } -static void vgroup_copy_active_to_sel_single(Object *ob, int def_nr) +static void vgroup_copy_active_to_sel_single(Object *ob, const int def_nr) { BMVert *eve_act; - MDeformVert *dvert_act; + MDeformVert *dv_act; - act_vert_def(ob, &eve_act, &dvert_act); + act_vert_def(ob, &eve_act, &dv_act); - if(dvert_act==NULL) { + if(dv_act==NULL) { return; } else { @@ -718,44 +718,36 @@ static void vgroup_copy_active_to_sel_single(Object *ob, int def_nr) BMEditMesh *em = me->edit_btmesh; BMIter iter; BMVert *eve; - MDeformVert *dvert; + MDeformVert *dv; MDeformWeight *dw; - float act_weight = -1.0f; - int i; + float weight_act; int index= 0; - for(i=0, dw=dvert_act->dw; i < dvert_act->totweight; i++, dw++) { - if(def_nr == dw->def_nr) { - act_weight= dw->weight; - break; - } - } + dw= defvert_find_index(dv_act, def_nr); - if(act_weight < -0.5f) + if(dw == NULL) return; + weight_act= dw->weight; + eve = BMIter_New(&iter, em->bm, BM_VERTS_OF_MESH, NULL); for (index=0; eve; eve=BMIter_Step(&iter), index++) { if(BM_TestHFlag(eve, BM_SELECT) && eve != eve_act) { - dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); - if(dvert) { - for(i=0, dw=dvert->dw; i < dvert->totweight; i++, dw++) { - if(def_nr == dw->def_nr) { - dw->weight= act_weight; + dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dw= defvert_find_index(dv, def_nr); + if (dw) { + dw->weight= weight_act; - if(me->editflag & ME_EDIT_MIRROR_X) - editvert_mirror_update(ob, eve, -1, index); - - break; - } + if (me->editflag & ME_EDIT_MIRROR_X) { + editvert_mirror_update(ob, eve, -1, index); } } } } - if(me->editflag & ME_EDIT_MIRROR_X) + if(me->editflag & ME_EDIT_MIRROR_X) { editvert_mirror_update(ob, eve_act, -1, -1); - + } } } @@ -825,14 +817,15 @@ static void view3d_panel_vgroup(const bContext *C, Panel *pa) Object *ob= OBACT; BMVert *eve; - MDeformVert *dvert; + MDeformVert *dv; - act_vert_def(ob, &eve, &dvert); + act_vert_def(ob, &eve, &dv); - if(dvert && dvert->totweight) { + if(dv && dv->totweight) { uiLayout *col; bDeformGroup *dg; - int i; + MDeformWeight *dw = dv->dw; + unsigned int i; int yco = 0; uiBlockSetHandleFunc(block, do_view3d_vgroup_buttons, NULL); @@ -842,11 +835,11 @@ static void view3d_panel_vgroup(const bContext *C, Panel *pa) uiBlockBeginAlign(block); - for (i=0; i<dvert->totweight; i++){ - dg = BLI_findlink (&ob->defbase, dvert->dw[i].def_nr); + for (i= dv->totweight; i != 0; i--, dw++) { + dg = BLI_findlink (&ob->defbase, dw->def_nr); if(dg) { - uiDefButF(block, NUM, B_VGRP_PNL_EDIT_SINGLE + dvert->dw[i].def_nr, dg->name, 0, yco, 180, 20, &dvert->dw[i].weight, 0.0, 1.0, 1, 3, ""); - uiDefBut(block, BUT, B_VGRP_PNL_COPY_SINGLE + dvert->dw[i].def_nr, "C", 180,yco,20,20, NULL, 0, 0, 0, 0, "Copy this groups weight to other selected verts"); + uiDefButF(block, NUM, B_VGRP_PNL_EDIT_SINGLE + dw->def_nr, dg->name, 0, yco, 180, 20, &dw->weight, 0.0, 1.0, 1, 3, ""); + uiDefBut(block, BUT, B_VGRP_PNL_COPY_SINGLE + dw->def_nr, "C", 180,yco,20,20, NULL, 0, 0, 0, 0, "Copy this groups weight to other selected verts"); yco -= 20; } } |