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