[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