diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-05-18 15:15:24 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-05-18 15:15:24 +0400 |
commit | 65bd48c896492a6485121524171f2f447fe1b95f (patch) | |
tree | 512c865b0c632468cad9934bebc5c03d70a9d228 /source | |
parent | b1a393e8156d9020aaefb25cf5cf8fb4103cea75 (diff) |
[#18778] Lattice Vertex Groups Don't get deleted
fixed 'Copy Group' for lattice too.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/src/editdeform.c | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/source/blender/src/editdeform.c b/source/blender/src/editdeform.c index 8a07a4fddff..ac027b2c1ad 100644 --- a/source/blender/src/editdeform.c +++ b/source/blender/src/editdeform.c @@ -211,11 +211,10 @@ void duplicate_defgroup ( Object *ob ) bDeformGroup *dg, *cdg; char name[32], s[32]; MDeformWeight *org, *cpy; - MDeformVert *dvert; - Mesh *me; - int i, idg, icdg; + MDeformVert *dvert, *dvert_array; + int i, idg, icdg, dvert_tot; - if (ob->type != OB_MESH) + if (ob->type != OB_MESH && ob->type != OB_LATTICE) return; dg = BLI_findlink (&ob->defbase, (ob->actdef-1)); @@ -246,12 +245,22 @@ void duplicate_defgroup ( Object *ob ) ob->actdef = BLI_countlist (&ob->defbase); icdg = (ob->actdef-1); - me = get_mesh (ob); - if (!me->dvert) + if(ob->type == OB_MESH) { + Mesh *me = get_mesh (ob); + dvert_array= me->dvert; + dvert_tot= me->totvert; + } + else if (ob->type == OB_LATTICE) { + Lattice *lt= (Lattice *)ob->data; + dvert_array= lt->dvert; + dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw; + } + + if (!dvert_array) return; - for (i = 0; i < me->totvert; i++) { - dvert = me->dvert+i; + for (i = 0; i < dvert_tot; i++) { + dvert = dvert_array+i; org = get_defweight (dvert, idg); if (org) { cpy = verify_defweight (dvert, icdg); @@ -323,29 +332,39 @@ static void del_defgroup_update_users(Object *ob, int id) void del_defgroup_in_object_mode ( Object *ob ) { bDeformGroup *dg; - MDeformVert *dvert; - Mesh *me; - int i, e; + MDeformVert *dvert_array, *dvert; + + int i, e, dvert_tot; - if ((!ob) || (ob->type != OB_MESH)) + if ((!ob) || (ob->type != OB_MESH && ob->type != OB_LATTICE)) return; + if(ob->type == OB_MESH) { + Mesh *me = get_mesh (ob); + dvert_array= me->dvert; + dvert_tot= me->totvert; + } + else if (ob->type == OB_LATTICE) { + Lattice *lt= (Lattice *)ob->data; + dvert_array= lt->dvert; + dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw; + } + dg = BLI_findlink (&ob->defbase, (ob->actdef-1)); if (!dg) return; - - me = get_mesh (ob); - if (me->dvert) { - for (i = 0; i < me->totvert; i++) { - dvert = me->dvert + i; + + if (dvert_array) { + for (i = 0; i < dvert_tot; i++) { + dvert = dvert_array + i; if (dvert) { if (get_defweight (dvert, (ob->actdef-1))) remove_vert_defgroup (ob, dg, i); } } - for (i = 0; i < me->totvert; i++) { - dvert = me->dvert+i; + for (i = 0; i < dvert_tot; i++) { + dvert = dvert_array+i; if (dvert) { for (e = 0; e < dvert->totweight; e++) { if (dvert->dw[e].def_nr > (ob->actdef-1)) |