[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32133] trunk/blender/source/blender: - Save MDISPS layer when applying modifier.

Sergey Sharybin g.ulairi at gmail.com
Sun Sep 26 20:29:54 CEST 2010


Revision: 32133
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32133
Author:   nazgul
Date:     2010-09-26 20:29:54 +0200 (Sun, 26 Sep 2010)

Log Message:
-----------
- Save MDISPS layer when applying modifier.
  All sculpting used to disappear before. Save MDISPS if new mesh has got the same faces amount.
  NOTE: maybe some other layers should be saved?
- Apply multires modififier if MDISPS was auto-created.
  Multires's applyModifier used to return unchanged DM when MDISPS was auto-created.
- Set multires totlvl from MDISPS layer when new multires was added to mesh with existing MDISPS layer.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/modifiers/intern/MOD_multires.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-09-26 16:11:53 UTC (rev 32132)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-09-26 18:29:54 UTC (rev 32133)
@@ -239,6 +239,15 @@
 	if(!CustomData_has_layer(&tmp.fdata, CD_MFACE))
 		CustomData_add_layer(&tmp.fdata, CD_MFACE, CD_ASSIGN, dm->dupFaceArray(dm), totface);
 
+	/* object had got displacement layer, should copy this layer to save sculpted data */
+	/* NOTE: maybe some other layers should be copied? nazgul */
+	if(CustomData_has_layer(&me->fdata, CD_MDISPS)) {
+		if (totface == me->totface) {
+			MDisps *mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS);
+			CustomData_add_layer(&tmp.fdata, CD_MDISPS, CD_DUPLICATE, mdisps, totface);
+		}
+	}
+
 	mesh_update_customdata_pointers(&tmp);
 
 	CustomData_free(&me->vdata, me->totvert);

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2010-09-26 16:11:53 UTC (rev 32132)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2010-09-26 18:29:54 UTC (rev 32133)
@@ -132,6 +132,9 @@
 		}
 		else if(type == eModifierType_Surface)
 			DAG_scene_sort(bmain, scene);
+		else if(type == eModifierType_Multires)
+			/* set totlvl from existing MDISPS layer if object already had it */
+			multiresModifier_set_levels_from_disps(new_md, ob);
 	}
 
 	DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -431,6 +434,11 @@
 			DM_to_mesh(dm, me);
 
 			dm->release(dm);
+
+			if(md->type == eModifierType_Multires) {
+				CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface);
+				CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
+			}
 		}
 	} 
 	else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {

Modified: trunk/blender/source/blender/modifiers/intern/MOD_multires.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_multires.c	2010-09-26 16:11:53 UTC (rev 32132)
+++ trunk/blender/source/blender/modifiers/intern/MOD_multires.c	2010-09-26 18:29:54 UTC (rev 32133)
@@ -74,7 +74,6 @@
 		if(!CustomData_get_layer(&me->fdata, CD_MDISPS)) {
 			/* multires always needs a displacement layer */
 			CustomData_add_layer(&me->fdata, CD_MDISPS, CD_CALLOC, NULL, me->totface);
-			return dm;
 		}
 	}
 





More information about the Bf-blender-cvs mailing list