[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47055] trunk/blender/source/blender/ editors/object/object_modifier.c: Delete skin customdata if all skin modifiers are removed.
Nicholas Bishop
nicholasbishop at gmail.com
Sat May 26 23:11:24 CEST 2012
Revision: 47055
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47055
Author: nicholasbishop
Date: 2012-05-26 21:11:23 +0000 (Sat, 26 May 2012)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/editors/object/object_modifier.c
Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c 2012-05-26 17:04:51 UTC (rev 47054)
+++ trunk/blender/source/blender/editors/object/object_modifier.c 2012-05-26 21:11:23 UTC (rev 47055)
@@ -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,7 +232,22 @@
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_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) &&
More information about the Bf-blender-cvs
mailing list