Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-05-27 01:11:23 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-05-27 01:11:23 +0400
commitebdeed07e573459f6ae065fd8b306070814cb290 (patch)
tree540800fa59d049e5b330fdf65538b4d5896e68ad /source/blender/editors/object/object_modifier.c
parentce9ee99c076847490902ce2777dadf86aa1a2970 (diff)
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.
Diffstat (limited to 'source/blender/editors/object/object_modifier.c')
-rw-r--r--source/blender/editors/object/object_modifier.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 79a9a29ae8f..7dd17e59f6f 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -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) &&