Delete skin customdata if all skin modifiers are removed.

Fix for bug [#31604] "Skin Modifier - Mark Root Bug?"

Essentially the same as multires customdata deletion.
This commit is contained in:
Nicholas Bishop 2012-05-26 21:11:23 +00:00
parent ce9ee99c07
commit ebdeed07e5

@ -88,6 +88,7 @@
#include "object_intern.h"
static void modifier_skin_customdata_ensure(struct Object *ob);
static void modifier_skin_customdata_delete(struct Object *ob);
/******************************** API ****************************/
@ -231,6 +232,21 @@ static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgr
multires_customdata_delete(ob->data);
}
}
else if (md->type == eModifierType_Skin) {
int ok = 1;
ModifierData *tmpmd;
/* ensure skin CustomData layer isn't used by another skin modifier */
for (tmpmd = ob->modifiers.first; tmpmd; tmpmd = tmpmd->next) {
if (tmpmd != md && tmpmd->type == eModifierType_Skin) {
ok = 0;
break;
}
}
if (ok)
modifier_skin_customdata_delete(ob);
}
if (ELEM(md->type, eModifierType_Softbody, eModifierType_Cloth) &&
ob->particlesystem.first == NULL)
@ -1369,6 +1385,17 @@ static void modifier_skin_customdata_ensure(Object *ob)
}
}
static void modifier_skin_customdata_delete(Object *ob)
{
Mesh *me = ob->data;
BMEditMesh *em = me->edit_btmesh;
if (em)
BM_data_layer_free(em->bm, &em->bm->vdata, CD_MVERT_SKIN);
else
CustomData_free_layer_active(&me->vdata, CD_MVERT_SKIN, me->totvert);
}
static int skin_poll(bContext *C)
{
return (!CTX_data_edit_object(C) &&