[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44814] trunk/blender/source/blender: remove Object member from BMesh struct - was only used for undo and BMEditMesh already stores an object pointer .

Campbell Barton ideasman42 at gmail.com
Sun Mar 11 20:59:00 CET 2012


Revision: 44814
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44814
Author:   campbellbarton
Date:     2012-03-11 19:58:56 +0000 (Sun, 11 Mar 2012)
Log Message:
-----------
remove Object member from BMesh struct - was only used for undo and BMEditMesh already stores an object pointer.

also fix for own mistake with mesh conversion refactor, shape key index was off by 1 when switching editmode.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    trunk/blender/source/blender/bmesh/bmesh_class.h
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
    trunk/blender/source/blender/bmesh/operators/bmo_mesh_conv.c
    trunk/blender/source/blender/editors/mesh/bmesh_tools.c
    trunk/blender/source/blender/editors/mesh/bmesh_utils.c
    trunk/blender/source/blender/editors/transform/transform.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_edgesplit.c
    trunk/blender/source/blender/python/bmesh/bmesh_py_api.c

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-03-11 19:58:56 UTC (rev 44814)
@@ -447,12 +447,12 @@
  */
 void DM_to_mesh(DerivedMesh *dm, struct Mesh *me, struct Object *ob);
 
-struct BMEditMesh *DM_to_editbmesh(struct Object *ob, struct DerivedMesh *dm,
+struct BMEditMesh *DM_to_editbmesh(struct DerivedMesh *dm,
                                    struct BMEditMesh *existing, int do_tesselate);
 
 /* conversion to bmesh only */
 void          DM_to_bmesh_ex(struct DerivedMesh *dm, struct BMesh *bm);
-struct BMesh *DM_to_bmesh(struct Object *ob, struct DerivedMesh *dm);
+struct BMesh *DM_to_bmesh(struct DerivedMesh *dm);
 
 
 /* utility function to convert a DerivedMesh to a shape key block 

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -546,7 +546,7 @@
 {
 	BMesh *bm;
 
-	bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+	bm = BM_mesh_create(&bm_mesh_allocsize_default);
 
 	BMO_op_callf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%b", me, ob, TRUE);
 

Modified: trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -137,7 +137,7 @@
 
 /* converts a cddm to a BMEditMesh.  if existing is non-NULL, the
  * new geometry will be put in there.*/
-BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, int do_tesselate)
+BMEditMesh *DM_to_editbmesh(DerivedMesh *dm, BMEditMesh *existing, int do_tesselate)
 {
 	BMEditMesh *em = existing;
 	BMesh *bm;
@@ -146,7 +146,7 @@
 		bm = em->bm;
 	}
 	else {
-		bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+		bm = BM_mesh_create(&bm_mesh_allocsize_default);
 	}
 
 	DM_to_bmesh_ex(dm, bm);
@@ -163,11 +163,11 @@
 	return em;
 }
 
-BMesh *DM_to_bmesh(Object *ob, DerivedMesh *dm)
+BMesh *DM_to_bmesh(DerivedMesh *dm)
 {
 	BMesh *bm;
 
-	bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+	bm = BM_mesh_create(&bm_mesh_allocsize_default);
 
 	DM_to_bmesh_ex(dm, bm);
 

Modified: trunk/blender/source/blender/bmesh/bmesh_class.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh_class.h	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/bmesh/bmesh_class.h	2012-03-11 19:58:56 UTC (rev 44814)
@@ -194,8 +194,7 @@
 	BMFace *act_face;
 
 	ListBase errorstack;
-	struct Object *ob; /* owner object */
-	
+
 	void *py_handle;
 
 	int opflag; /* current operator flag */

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -593,7 +593,7 @@
 	                             bm_old->totface};
 
 	/* allocate a bmesh */
-	bm_new = BM_mesh_create(bm_old->ob, &allocsize);
+	bm_new = BM_mesh_create(&allocsize);
 
 	CustomData_copy(&bm_old->vdata, &bm_new->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
 	CustomData_copy(&bm_old->edata, &bm_new->edata, CD_MASK_BMESH, CD_CALLOC, 0);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -71,12 +71,10 @@
  *
  * \note ob is needed by multires
  */
-BMesh *BM_mesh_create(struct Object *ob, BMAllocTemplate *allocsize)
+BMesh *BM_mesh_create(BMAllocTemplate *allocsize)
 {
 	/* allocate the structure */
 	BMesh *bm = MEM_callocN(sizeof(BMesh), __func__);
-
-	bm->ob = ob;
 	
 	/* allocate the memory pools for the mesh elements */
 	bm_mempool_init(bm, allocsize);
@@ -164,15 +162,10 @@
  */
 void BM_mesh_clear(BMesh *bm)
 {
-	Object *ob = bm->ob;
-	
 	/* free old mesh */
 	BM_mesh_data_free(bm);
 	memset(bm, 0, sizeof(BMesh));
-	
-	/* re-initialize mesh */
-	bm->ob = ob;
-	
+
 	/* allocate the memory pools for the mesh elements */
 	bm_mempool_init(bm, &bm_mesh_allocsize_default);
 
@@ -344,11 +337,10 @@
 	BMO_op_finish(bm, &bmop);
 }
 
-static void UNUSED_FUNCTION(bm_mdisps_space_set)(BMesh *bm, int from, int to)
+static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from, int to)
 {
 	/* switch multires data out of tangent space */
 	if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
-		Object *ob = bm->ob;
 		BMEditMesh *em = BMEdit_Create(bm, FALSE);
 		DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
 		MDisps *mdisps;

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh.h	2012-03-11 19:58:56 UTC (rev 44814)
@@ -29,7 +29,7 @@
 
 struct BMAllocTemplate;
 
-BMesh *BM_mesh_create(struct Object *ob, struct BMAllocTemplate *allocsize);
+BMesh *BM_mesh_create(struct BMAllocTemplate *allocsize);
 
 void   BM_mesh_free(BMesh *bm);
 void   BM_mesh_data_free(BMesh *bm);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -582,7 +582,7 @@
 		int i, j;
 
 		for (ob = G.main->object.first; ob; ob = ob->id.next) {
-			if (ob->parent == bm->ob && ELEM(ob->partype, PARVERT1, PARVERT3)) {
+			if ((ob->parent) && (ob->parent->data == me) && ELEM(ob->partype, PARVERT1, PARVERT3)) {
 
 				if (vertMap == NULL) {
 					vertMap = bm_to_mesh_vertex_map(bm, ototvert);

Modified: trunk/blender/source/blender/bmesh/operators/bmo_mesh_conv.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_mesh_conv.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/bmesh/operators/bmo_mesh_conv.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -57,7 +57,7 @@
 	Mesh *me = BMO_slot_ptr_get(op, "mesh");
 	int set_key = BMO_slot_bool_get(op, "set_shapekey");
 
-	BM_mesh_bm_from_me(bm, me, set_key, ob->shapenr - 1);
+	BM_mesh_bm_from_me(bm, me, set_key, ob->shapenr);
 
 	if (me->key && ob->shapenr > me->key->totkey) {
 		ob->shapenr = me->key->totkey - 1;

Modified: trunk/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/bmesh_tools.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/editors/mesh/bmesh_tools.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -3222,7 +3222,7 @@
 	if (!em)
 		return OPERATOR_CANCELLED;
 		
-	bm_new = BM_mesh_create(obedit, &bm_mesh_allocsize_default);
+	bm_new = BM_mesh_create(&bm_mesh_allocsize_default);
 	CustomData_copy(&em->bm->vdata, &bm_new->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
 	CustomData_copy(&em->bm->edata, &bm_new->edata, CD_MASK_BMESH, CD_CALLOC, 0);
 	CustomData_copy(&em->bm->ldata, &bm_new->ldata, CD_MASK_BMESH, CD_CALLOC, 0);

Modified: trunk/blender/source/blender/editors/mesh/bmesh_utils.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/bmesh_utils.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/editors/mesh/bmesh_utils.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -514,7 +514,7 @@
 	Mesh *obme = obdata;
 	
 	undomesh *um = MEM_callocN(sizeof(undomesh), "undo Mesh");
-	BLI_strncpy(um->obname, em->bm->ob->id.name + 2, sizeof(um->obname));
+	BLI_strncpy(um->obname, em->ob->id.name + 2, sizeof(um->obname));
 	
 	/* make sure shape keys work */
 	um->me.key = obme->key ? copy_key_nolib(obme->key) : NULL;
@@ -546,7 +546,7 @@
 
 	BMEdit_Free(em);
 
-	bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+	bm = BM_mesh_create(&bm_mesh_allocsize_default);
 	BMO_op_callf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%b", &um->me, ob, FALSE);
 
 	em2 = BMEdit_Create(bm, TRUE);
@@ -572,6 +572,13 @@
 /* and this is all the undo system needs to know */
 void undo_push_mesh(bContext *C, const char *name)
 {
+	/* em->ob gets out of date and crashes on mesh undo,
+	 * this is an easy way to ensure its OK
+	 * though we could investigate the matter further. */
+	Object *obedit = CTX_data_edit_object(C);
+	BMEditMesh *em = BMEdit_FromObject(obedit);
+	em->ob = obedit;
+
 	undo_editmode_push(C, name, getEditMesh, free_undo, undoMesh_to_editbtMesh, editbtMesh_to_undoMesh, NULL);
 }
 

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-03-11 19:52:25 UTC (rev 44813)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-03-11 19:58:56 UTC (rev 44814)
@@ -4552,7 +4552,7 @@
 			float vec1[3], dis2, mval[2] = {t->mval[0], t->mval[1]}, d;
 						
 			/* search cross edges for visible edge to the mouse cursor,
-             * then use the shared vertex to calculate screen vector*/
+			 * then use the shared vertex to calculate screen vector*/
 			dis2 = -1.0f;
 			for (i=0; i<2; i++) {
 				v = i?e->v1:e->v2;
@@ -4590,8 +4590,7 @@
 			}
 		}
 	}
-	
-	em->bm->ob = t->obedit;
+
 	bmesh_edit_begin(em->bm, BMO_OP_FLAG_UNTAN_MULTIRES);
 
 	/*create copies of faces for customdata projection*/
@@ -4779,7 +4778,6 @@
 	
 	freeSlideTempFaces(sld);
 
-	sld->em->bm->ob = t->obedit;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list