[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