forked from bartvdbraak/blender
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:
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) &&
|
||||
|
Loading…
Reference in New Issue
Block a user