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);
+                       }
                }
        }
 

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to