[#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;
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))