[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44983] trunk/blender/source/blender: Add a multires function to delete MDisps.

Nicholas Bishop nicholasbishop at gmail.com
Mon Mar 19 06:13:53 CET 2012


Revision: 44983
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44983
Author:   nicholasbishop
Date:     2012-03-19 05:13:41 +0000 (Mon, 19 Mar 2012)
Log Message:
-----------
Add a multires function to delete MDisps.

The code was duplicated in various places, replaced with calls to
a new function, multires_customdata_delete().

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_multires.h
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/editors/object/object_modifier.c

Modified: trunk/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_multires.h	2012-03-19 02:24:40 UTC (rev 44982)
+++ trunk/blender/source/blender/blenkernel/BKE_multires.h	2012-03-19 05:13:41 UTC (rev 44983)
@@ -44,6 +44,9 @@
 struct Object;
 struct Scene;
 
+/* Delete mesh mdisps */
+void multires_customdata_delete(struct Mesh *me);
+
 void multires_mark_as_modified(struct Object *ob, enum MultiresModifiedFlags flags);
 
 void multires_force_update(struct Object *ob);

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2012-03-19 02:24:40 UTC (rev 44982)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2012-03-19 05:13:41 UTC (rev 44983)
@@ -77,6 +77,27 @@
 static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert);
 static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, DMGridData **oldGridData, int totlvl);
 
+/** Customdata **/
+
+void multires_customdata_delete(Mesh *me)
+{
+	if(me->edit_btmesh) {
+		BMEditMesh *em= me->edit_btmesh;
+		/* 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->bm->ldata, &me->id,
+								   CD_MDISPS, 0);
+		BM_data_layer_free(em->bm, &em->bm->ldata, CD_MDISPS);
+	}
+	else {
+		CustomData_external_remove(&me->ldata, &me->id,
+								   CD_MDISPS, me->totloop);
+		CustomData_free_layer_active(&me->ldata, CD_MDISPS,
+									 me->totloop);
+	}
+}
+
 /** Grid hiding **/
 static BLI_bitmap multires_mdisps_upsample_hidden(BLI_bitmap lo_hidden,
 												  int lo_level,
@@ -619,8 +640,7 @@
 			}
 		}
 		else {
-			CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
-			CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
+			multires_customdata_delete(me);
 		}
 	}
 
@@ -2005,10 +2025,7 @@
 		 * upsampled correct without modifier data.
 		 * just remove mdisps if no multires present (nazgul) */
 
-		Mesh *me= (Mesh*)ob->data;
-
-		CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
-		CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
+		multires_customdata_delete(ob->data);
 	}
 
 	if (!mmd || !to_mmd) return;

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2012-03-19 02:24:40 UTC (rev 44982)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2012-03-19 05:13:41 UTC (rev 44983)
@@ -203,10 +203,9 @@
 	}
 	else if(md->type == eModifierType_Multires) {
 		int ok= 1;
-		Mesh *me= ob->data;
 		ModifierData *tmpmd;
 
-		/* ensure MDISPS CustomData layer is't used by another multires modifiers */
+		/* ensure MDISPS CustomData layer isn't used by another multires modifiers */
 		for(tmpmd= ob->modifiers.first; tmpmd; tmpmd= tmpmd->next)
 			if(tmpmd!=md && tmpmd->type == eModifierType_Multires) {
 				ok= 0;
@@ -214,16 +213,7 @@
 			}
 
 		if(ok) {
-			if(me->edit_btmesh) {
-				BMEditMesh *em= me->edit_btmesh;
-				/* 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->bm->ldata, &me->id, CD_MDISPS, 0);
-				BM_data_layer_free(em->bm, &em->bm->ldata, CD_MDISPS);
-			} else {
-				CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
-				CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
-			}
+			multires_customdata_delete(ob->data);
 		}
 	}
 
@@ -536,10 +526,8 @@
 
 			dm->release(dm);
 
-			if(md->type == eModifierType_Multires) {
-				CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
-				CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
-			}
+			if(md->type == eModifierType_Multires)
+				multires_customdata_delete(me);
 		}
 	}
 	else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {




More information about the Bf-blender-cvs mailing list