diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-12-15 02:54:38 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-12-15 02:54:38 +0400 |
commit | 40a2c1a2921b50edd8b798e79b6bd2a6d94d7bba (patch) | |
tree | f28bc2e08718bbf7e8fee729330c5c1e675c180e /source/blender/editors/space_view3d/view3d_buttons.c | |
parent | 3d5330f789c287666b875706c84228520473add5 (diff) |
more vertex weight edits,
* replace inline loops with api calls.
* change constraints so verts with 0.0 weight are ignored like they are everywhere else.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_buttons.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_buttons.c | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 15494d73ea1..d2689fad8c2 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -688,57 +688,51 @@ 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) { EditVert *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 { Mesh *me= ob->data; EditMesh *em = BKE_mesh_get_editmesh(me); EditVert *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; - for(eve= em->verts.first; eve; eve= eve->next, index++) { - if(eve->f & SELECT && eve != eve_act) { - dvert= CustomData_em_get(&em->vdata, eve->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; + weight_act= dw->weight; - if(me->editflag & ME_EDIT_MIRROR_X) - editvert_mirror_update(ob, eve, -1, index); + for (eve= em->verts.first; eve; eve= eve->next, index++) { + if (eve->f & SELECT && eve != eve_act) { + dv= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT); + if(dv) { + dw= defvert_find_index(dv, def_nr); + if (dw) { + dw->weight= weight_act; - 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); - + } } } @@ -808,14 +802,15 @@ static void view3d_panel_vgroup(const bContext *C, Panel *pa) Object *ob= OBACT; EditVert *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); @@ -825,11 +820,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; } } |