[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36699] trunk/blender/source/blender/ editors/object/object_modifier.c: Do not remove MDISPS customdata layer when removing multires modifier

Sergey Sharybin g.ulairi at gmail.com
Sun May 15 15:13:51 CEST 2011


Revision: 36699
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36699
Author:   nazgul
Date:     2011-05-15 13:13:51 +0000 (Sun, 15 May 2011)
Log Message:
-----------
Do not remove MDISPS customdata layer when removing multires modifier
and there are still another multires modifiers in the stack.

Helps to prevent loosing sculpt data when you occasionally added another
multires and reomved it with "X" button.

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	2011-05-15 08:48:43 UTC (rev 36698)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2011-05-15 13:13:51 UTC (rev 36699)
@@ -204,17 +204,28 @@
 		ob->dt = OB_TEXTURE;
 	}
 	else if(md->type == eModifierType_Multires) {
+		int ok= 1;
 		Mesh *me= ob->data;
+		ModifierData *tmpmd;
 
-		if(me->edit_mesh) {
-			EditMesh *em= me->edit_mesh;
-			/* CustomData_external_remove is used here only to mark layer as non-external
-			   for further free-ing, so zero element count looks safer than em->totface */
-			CustomData_external_remove(&em->fdata, &me->id, CD_MDISPS, 0);
-			EM_free_data_layer(em, &em->fdata, CD_MDISPS);
-		} else {
-			CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface);
-			CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
+		/* ensure MDISPS CustomData layer is't used by another multires modifiers */
+		for(tmpmd= ob->modifiers.first; tmpmd; tmpmd= tmpmd->next)
+			if(tmpmd!=md && tmpmd->type == eModifierType_Multires) {
+				ok= 0;
+				break;
+			}
+
+		if(ok) {
+			if(me->edit_mesh) {
+				EditMesh *em= me->edit_mesh;
+				/* CustomData_external_remove is used here only to mark layer as non-external
+				   for further free-ing, so zero element count looks safer than em->totface */
+				CustomData_external_remove(&em->fdata, &me->id, CD_MDISPS, 0);
+				EM_free_data_layer(em, &em->fdata, CD_MDISPS);
+			} else {
+				CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface);
+				CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
+			}
 		}
 	}
 




More information about the Bf-blender-cvs mailing list