[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51570] trunk/blender/source/blender: add CDDM_from_bmesh(), avoids using BMEditMesh in modifiers.

Campbell Barton ideasman42 at gmail.com
Wed Oct 24 09:24:12 CEST 2012


Revision: 51570
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51570
Author:   campbellbarton
Date:     2012-10-24 07:24:11 +0000 (Wed, 24 Oct 2012)
Log Message:
-----------
add CDDM_from_bmesh(), avoids using BMEditMesh in modifiers.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_bmesh.h
    trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
    trunk/blender/source/blender/bmesh/tools/BME_bevel.c
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    trunk/blender/source/blender/modifiers/intern/MOD_armature.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c
    trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
    trunk/blender/source/blender/modifiers/intern/MOD_curve.c
    trunk/blender/source/blender/modifiers/intern/MOD_decimate.c
    trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c
    trunk/blender/source/blender/modifiers/intern/MOD_lattice.c
    trunk/blender/source/blender/modifiers/intern/MOD_mirror.c
    trunk/blender/source/blender/modifiers/intern/MOD_skin.c
    trunk/blender/source/blender/modifiers/intern/MOD_util.c
    trunk/blender/source/blender/modifiers/intern/MOD_warp.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c

Modified: trunk/blender/source/blender/blenkernel/BKE_bmesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_bmesh.h	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/BKE_bmesh.h	2012-10-24 07:24:11 UTC (rev 51570)
@@ -99,7 +99,7 @@
 
 struct BME_TransData *BME_get_transdata(struct BME_TransData_Head *td, struct BMVert *v);
 void BME_free_transdata(struct BME_TransData_Head *td);
-struct BMesh *BME_bevel(struct BMEditMesh *em, float value, int res, int options, int defgrp_index, float angle,
-                        BME_TransData_Head **rtd, int do_tessface);
+struct BMesh *BME_bevel(struct BMesh *bm, float value, int res, int options, int defgrp_index, float angle,
+                        BME_TransData_Head **rtd);
 
 #endif

Modified: trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h	2012-10-24 07:24:11 UTC (rev 51570)
@@ -55,8 +55,10 @@
  * data to not overwrite the original */
 struct DerivedMesh *CDDM_from_mesh(struct Mesh *mesh, struct Object *ob);
 
+struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, int use_mdisps);
+
 /* creates a CDDerivedMesh from the given BMEditMesh */
-DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps, int use_tessface);
+DerivedMesh *CDDM_from_editbmesh(struct BMEditMesh *em, int use_mdisps, int use_tessface);
 
 /* merge verts  */
 DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap);

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -903,7 +903,7 @@
 	float (*orco)[3];
 	int free;
 
-	if (em) dm = CDDM_from_BMEditMesh(em, me, FALSE, FALSE);
+	if (em) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
 	else dm = CDDM_from_mesh(me, ob);
 
 	orco = get_orco_coords_dm(ob, em, layer, &free);
@@ -1976,7 +1976,7 @@
 
 			}
 			else {
-				dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, FALSE);
+				dm = CDDM_from_editbmesh(em, FALSE, FALSE);
 
 				if (deformedVerts) {
 					CDDM_apply_vert_coords(dm, deformedVerts);

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -1791,10 +1791,10 @@
 }
 
 static void loops_to_customdata_corners(BMesh *bm, CustomData *facedata,
-                                        int cdindex, BMLoop *l3[3],
+                                        int cdindex, const BMLoop *l3[3],
                                         int numCol, int numTex)
 {
-	BMLoop *l;
+	const BMLoop *l;
 	BMFace *f = l3[0]->f;
 	MTFace *texface;
 	MTexPoly *texpoly;
@@ -1837,13 +1837,16 @@
 	}
 }
 
-DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdisps, int use_tessface)
+/* used for both editbmesh and bmesh */
+static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps,
+                                       /* EditBMesh vars for use_tessface */
+                                       int use_tessface,
+                                       const int em_tottri, const BMLoop *(*em_looptris)[3]
+                                       )
 {
-	BMesh *bm = em->bm;
-
 	DerivedMesh *dm = CDDM_new(bm->totvert,
 	                           bm->totedge,
-	                           use_tessface ? em->tottri : 0,
+	                           use_tessface ? em_tottri : 0,
 	                           bm->totloop,
 	                           bm->totface);
 
@@ -1889,7 +1892,7 @@
 	
 	/* add tessellation mface layers */
 	if (use_tessface) {
-		CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em->tottri);
+		CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em_tottri);
 	}
 
 	index = dm->getVertDataArray(dm, CD_ORIGINDEX);
@@ -1955,7 +1958,7 @@
 		index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
 		for (i = 0; i < dm->numTessFaceData; i++, index++, polyindex++) {
 			MFace *mf = &mface[i];
-			BMLoop **l = em->looptris[i];
+			const BMLoop **l = em_looptris[i];
 			efa = l[0]->f;
 
 			mf->v1 = BM_elem_index_get(l[0]->v);
@@ -2005,6 +2008,20 @@
 	return dm;
 }
 
+struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, int use_mdisps)
+{
+	return cddm_from_bmesh_ex(bm, use_mdisps, FALSE,
+	                          /* these vars are for editmesh only */
+	                          0, NULL);
+}
+
+DerivedMesh *CDDM_from_editbmesh(BMEditMesh *em, int use_mdisps, int use_tessface)
+{
+	return cddm_from_bmesh_ex(em->bm, use_mdisps,
+	                          /* editmesh */
+	                          use_tessface, em->tottri, (const BMLoop *(*)[3])em->looptris);
+}
+
 static DerivedMesh *cddm_copy_ex(DerivedMesh *source, int faces_from_tessfaces)
 {
 	CDDerivedMesh *cddm = cdDM_create("CDDM_copy cddm");

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -432,7 +432,7 @@
 	/* get DerivedMesh */
 	if (em) {
 		/* target is in editmode, so get a special derived mesh */
-		dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, FALSE);
+		dm = CDDM_from_editbmesh(em, FALSE, FALSE);
 		freeDM = 1;
 	}
 	else {

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -295,7 +295,7 @@
 	/* switch multires data out of tangent space */
 	if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
 		BMEditMesh *em = BMEdit_Create(bm, FALSE);
-		DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
+		DerivedMesh *dm = CDDM_from_editbmesh(em, TRUE, FALSE);
 		MDisps *mdisps;
 		BMFace *f;
 		BMIter iter;

Modified: trunk/blender/source/blender/bmesh/tools/BME_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/BME_bevel.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/bmesh/tools/BME_bevel.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -1096,10 +1096,9 @@
 	return bm;
 }
 
-BMesh *BME_bevel(BMEditMesh *em, float value, int res, int options, int defgrp_index, float angle,
-                 BME_TransData_Head **rtd, int do_tessface)
+BMesh *BME_bevel(BMesh *bm, float value, int res, int options, int defgrp_index, float angle,
+                 BME_TransData_Head **rtd)
 {
-	BMesh *bm = em->bm;
 	BMVert *v;
 	BMIter iter;
 
@@ -1126,12 +1125,6 @@
 		BMO_pop(bm);
 	}
 
-	/* possibly needed when running as a tool (which is no longer functional)
-	 * but keep as an option for now */
-	if (do_tessface) {
-		BMEdit_RecalcTessellation(em);
-	}
-
 	/* interactive preview? */
 	if (rtd) {
 		*rtd = td;

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -408,7 +408,7 @@
 	smd.levels = scene->toolsettings->uv_subsurf_level;
 	smd.subdivType = ME_CC_SUBSURF;
 		
-	initialDerived = CDDM_from_BMEditMesh(em, NULL, 0, 0);
+	initialDerived = CDDM_from_editbmesh(em, FALSE, FALSE);
 	derivedMesh = subsurf_make_derived_from_derived(initialDerived, &smd,
 	                                                NULL, SUBSURF_IN_EDIT_MODE);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_armature.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_armature.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/modifiers/intern/MOD_armature.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -135,13 +135,13 @@
 }
 
 static void deformVertsEM(
-        ModifierData *md, Object *ob, struct BMEditMesh *editData,
+        ModifierData *md, Object *ob, struct BMEditMesh *em,
         DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
 {
 	ArmatureModifierData *amd = (ArmatureModifierData *) md;
 	DerivedMesh *dm = derivedData;
 
-	if (!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
+	if (!derivedData) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
 
 	modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
 
@@ -158,14 +158,14 @@
 }
 
 static void deformMatricesEM(
-        ModifierData *md, Object *ob, struct BMEditMesh *editData,
+        ModifierData *md, Object *ob, struct BMEditMesh *em,
         DerivedMesh *derivedData, float (*vertexCos)[3],
         float (*defMats)[3][3], int numVerts)
 {
 	ArmatureModifierData *amd = (ArmatureModifierData *) md;
 	DerivedMesh *dm = derivedData;
 
-	if (!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
+	if (!derivedData) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
 
 	armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
 	                      amd->deformflag, NULL, amd->defgrp_name);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c	2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c	2012-10-24 07:24:11 UTC (rev 51570)
@@ -53,8 +53,9 @@
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list