[#18778] Lattice Vertex Groups Don't get deleted

fixed 'Copy Group' for lattice too.
This commit is contained in:
Campbell Barton 2009-05-18 11:15:24 +00:00
parent b1a393e815
commit 65bd48c896

@ -211,11 +211,10 @@ void duplicate_defgroup ( Object *ob )
bDeformGroup *dg, *cdg; bDeformGroup *dg, *cdg;
char name[32], s[32]; char name[32], s[32];
MDeformWeight *org, *cpy; MDeformWeight *org, *cpy;
MDeformVert *dvert; MDeformVert *dvert, *dvert_array;
Mesh *me; int i, idg, icdg, dvert_tot;
int i, idg, icdg;
if (ob->type != OB_MESH) if (ob->type != OB_MESH && ob->type != OB_LATTICE)
return; return;
dg = BLI_findlink (&ob->defbase, (ob->actdef-1)); dg = BLI_findlink (&ob->defbase, (ob->actdef-1));
@ -246,12 +245,22 @@ void duplicate_defgroup ( Object *ob )
ob->actdef = BLI_countlist (&ob->defbase); ob->actdef = BLI_countlist (&ob->defbase);
icdg = (ob->actdef-1); icdg = (ob->actdef-1);
me = get_mesh (ob); if(ob->type == OB_MESH) {
if (!me->dvert) 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; return;
for (i = 0; i < me->totvert; i++) { for (i = 0; i < dvert_tot; i++) {
dvert = me->dvert+i; dvert = dvert_array+i;
org = get_defweight (dvert, idg); org = get_defweight (dvert, idg);
if (org) { if (org) {
cpy = verify_defweight (dvert, icdg); 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 ) void del_defgroup_in_object_mode ( Object *ob )
{ {
bDeformGroup *dg; bDeformGroup *dg;
MDeformVert *dvert; MDeformVert *dvert_array, *dvert;
Mesh *me;
int i, e;
if ((!ob) || (ob->type != OB_MESH)) int i, e, dvert_tot;
if ((!ob) || (ob->type != OB_MESH && ob->type != OB_LATTICE))
return; 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)); dg = BLI_findlink (&ob->defbase, (ob->actdef-1));
if (!dg) if (!dg)
return; return;
me = get_mesh (ob); if (dvert_array) {
if (me->dvert) { for (i = 0; i < dvert_tot; i++) {
for (i = 0; i < me->totvert; i++) { dvert = dvert_array + i;
dvert = me->dvert + i;
if (dvert) { if (dvert) {
if (get_defweight (dvert, (ob->actdef-1))) if (get_defweight (dvert, (ob->actdef-1)))
remove_vert_defgroup (ob, dg, i); remove_vert_defgroup (ob, dg, i);
} }
} }
for (i = 0; i < me->totvert; i++) { for (i = 0; i < dvert_tot; i++) {
dvert = me->dvert+i; dvert = dvert_array+i;
if (dvert) { if (dvert) {
for (e = 0; e < dvert->totweight; e++) { for (e = 0; e < dvert->totweight; e++) {
if (dvert->dw[e].def_nr > (ob->actdef-1)) if (dvert->dw[e].def_nr > (ob->actdef-1))