[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