[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19462] branches/blender2.5/blender/source /blender: editmesh accessor functions.

Joseph Eagar joeedh at gmail.com
Mon Mar 30 09:28:37 CEST 2009


Revision: 19462
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19462
Author:   joeedh
Date:     2009-03-30 09:28:37 +0200 (Mon, 30 Mar 2009)

Log Message:
-----------
editmesh accessor functions.  most editmesh access now goes through:

EditMesh *EM_GetEditMesh(Mesh *me);
void EM_EndEditMesh(Mesh *me, EditMesh *em);

as discussed on the mailling list, this is to facilitate migration to bmesh.
next step is to merge this this to the bmesh branch.  this was done in the 2.5
branch to prevent too great a divergance.

also, made makesdna/makesrna work on cygwin/msvc2008/scons.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/constraint.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/exotic.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/shrinkwrap.c
    branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
    branches/blender2.5/blender/source/blender/editors/mesh/editdeform.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_loop.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_panels.c
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_draw.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    branches/blender2.5/blender/source/blender/makesdna/intern/SConscript
    branches/blender2.5/blender/source/blender/makesrna/intern/SConscript

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -34,6 +34,7 @@
 
 #include "MEM_guardedalloc.h"
 #include "BLI_blenlib.h"
+#include "BLI_editVert.h"
 #include "BLI_arithb.h"
 #include "BLI_rand.h"
 #include "DNA_listBase.h"
@@ -72,6 +73,8 @@
 #include <config.h>
 #endif
 
+#include "ED_mesh.h"
+
 static void object_duplilist_recursive(ID *id, Scene *scene, Object *ob, ListBase *duplilist, float par_space_mat[][4], int level, int animated);
 
 void free_path(Path *path)
@@ -445,6 +448,7 @@
 	Scene *sce = NULL;
 	Group *group = NULL;
 	GroupObject * go = NULL;
+	EditMesh *em;
 	float vec[3], no[3], pmat[4][4];
 	int lay, totvert, a, oblay;
 	
@@ -452,12 +456,15 @@
 	
 	/* simple preventing of too deep nested groups */
 	if(level>MAX_DUPLI_RECUR) return;
-
-	if(me->edit_mesh)
-		dm= editmesh_get_derived_cage(scene, par, me->edit_mesh, CD_MASK_BAREMESH);
-	else
+	
+	em = EM_GetEditMesh(me);
+	
+	if(em) {
+		dm= editmesh_get_derived_cage(scene, par, em, CD_MASK_BAREMESH);
+		EM_EndEditMesh(me, em);
+	} else
 		dm= mesh_get_derived_deform(scene, par, CD_MASK_BAREMESH);
-
+	
 	if(G.rendering) {
 		vdd.orco= (float(*)[3])get_mesh_orco_verts(par);
 		transform_mesh_orco_verts(me, vdd.orco, me->totvert, 0);
@@ -557,17 +564,19 @@
 	Scene *sce = NULL;
 	Group *group = NULL;
 	GroupObject *go = NULL;
+	EditMesh *em;
 	float ob__obmat[4][4]; /* needed for groups where the object matrix needs to be modified */
 	
 	/* simple preventing of too deep nested groups */
 	if(level>MAX_DUPLI_RECUR) return;
 	
 	Mat4CpyMat4(pmat, par->obmat);
-
-	if(me->edit_mesh) {
+	
+	em = EM_GetEditMesh(me);
+	if(em) {
 		int totvert;
 		
-		dm= editmesh_get_derived_cage(scene, par, me->edit_mesh, CD_MASK_BAREMESH);
+		dm= editmesh_get_derived_cage(scene, par, em, CD_MASK_BAREMESH);
 		
 		totface= dm->getNumFaces(dm);
 		mface= MEM_mallocN(sizeof(MFace)*totface, "mface temp");
@@ -575,6 +584,8 @@
 		totvert= dm->getNumVerts(dm);
 		mvert= MEM_mallocN(sizeof(MVert)*totvert, "mvert temp");
 		dm->copyVertArray(dm, mvert);
+
+		EM_EndEditMesh(me, em);
 	}
 	else {
 		dm = mesh_get_derived_deform(scene, par, CD_MASK_BAREMESH);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/constraint.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/constraint.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -38,6 +38,7 @@
 
 #include "BLI_blenlib.h"
 #include "BLI_arithb.h"
+#include "BLI_editVert.h"
 
 #include "DNA_armature_types.h"
 #include "DNA_constraint_types.h"
@@ -70,6 +71,7 @@
 #include "BPY_extern.h"
 #endif
 
+#include "ED_mesh.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -390,6 +392,7 @@
 {
 	DerivedMesh *dm;
 	Mesh *me= ob->data;
+	EditMesh *em = EM_GetEditMesh(me);
 	float vec[3] = {0.0f, 0.0f, 0.0f}, tvec[3];
 	float normal[3] = {0.0f, 0.0f, 0.0f}, plane[3];
 	float imat[3][3], tmat[3][3];
@@ -403,9 +406,9 @@
 	if (dgroup < 0) return;
 	
 	/* get DerivedMesh */
-	if (me->edit_mesh) {
+	if (em) {
 		/* target is in editmode, so get a special derived mesh */
-		dm = CDDM_from_editmesh(me->edit_mesh, ob->data);
+		dm = CDDM_from_editmesh(em, ob->data);
 	}
 	else {
 		/* when not in EditMode, this should exist */
@@ -475,8 +478,9 @@
 	}
 	
 	/* free temporary DerivedMesh created (in EditMode case) */
-	if (me->edit_mesh) {
+	if (em) {
 		if (dm) dm->release(dm);
+		EM_EndEditMesh(me, em);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/exotic.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/exotic.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/exotic.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -2388,7 +2388,7 @@
 static void write_videoscape_mesh(Scene *scene, Object *ob, char *str)
 {
 	Mesh *me= ob->data;
-	EditMesh *em = me->edit_mesh;
+	EditMesh *em = EM_GetEditMesh(me);
 	Material *ma;
 	MFace *mface;
 	FILE *fp;
@@ -2489,6 +2489,8 @@
 	}
 	
 	fclose(fp);
+
+	if (em) EM_EndEditMesh(em);
 	
 }
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -7541,6 +7541,7 @@
 	DerivedMesh *tmpdm, *cagedm;
 	MDeformVert *dvert = NULL;
 	MDeformWeight *dw;
+	EditMesh *em = EM_GetEditMesh(me);
 	MVert *cagemvert;
 	float imat[4][4], cagemat[4][4], iobmat[4][4], icagemat[3][3], cmat[4][4];
 	float weight, totweight, fac, co[3], *weights, (*dco)[3], (*bindcos)[3];
@@ -7550,10 +7551,11 @@
 		return;
 	
 	/* get cage derivedmesh */
-	if(me->edit_mesh) {
-		tmpdm= editmesh_get_derived_cage_and_final(md->scene, ob, me->edit_mesh, &cagedm, 0);
+	if(em) {
+		tmpdm= editmesh_get_derived_cage_and_final(md->scene, ob, em, &cagedm, 0);
 		if(tmpdm)
 			tmpdm->release(tmpdm);
+		EM_EndEditMesh(em);
 	}
 	else
 		cagedm= mmd->object->derivedFinal;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/object.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/object.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -1635,15 +1635,16 @@
 
 static void give_parvert(Object *par, int nr, float *vec)
 {
+	EditMesh *em;
 	int a, count;
 	
 	vec[0]=vec[1]=vec[2]= 0.0f;
 	
 	if(par->type==OB_MESH) {
 		Mesh *me= par->data;
-		
-		if(me->edit_mesh) {
-			EditMesh *em = me->edit_mesh;
+		em = EM_GetEditMesh(me);
+
+		if(em) {
 			EditVert *eve;
 			
 			for(eve= em->verts.first; eve; eve= eve->next) {
@@ -1652,6 +1653,7 @@
 					break;
 				}
 			}
+			EM_EndEditMesh(me, em);
 		}
 		else {
 			DerivedMesh *dm = par->derivedFinal;
@@ -2294,10 +2296,13 @@
 			
 			/* includes all keys and modifiers */
 			if(ob->type==OB_MESH) {
+				EditMesh *em = EM_GetEditMesh(ob->data);
+
 					// here was vieweditdatamask? XXX
-				if(ob==scene->obedit)
-					makeDerivedMesh(scene, ob, ((Mesh*)ob->data)->edit_mesh, CD_MASK_BAREMESH);
-				else
+				if(ob==scene->obedit) {
+					makeDerivedMesh(scene, ob, em, CD_MASK_BAREMESH);
+					EM_EndEditMesh(ob->data, em);
+				} else
 					makeDerivedMesh(scene, ob, NULL, CD_MASK_BAREMESH);
 			}
 			else if(ob->type==OB_MBALL) {

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/shrinkwrap.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/shrinkwrap.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/shrinkwrap.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -52,10 +52,12 @@
 #include "BLI_arithb.h"
 #include "BLI_kdtree.h"
 #include "BLI_kdopbvh.h"
+#include "BLI_editVert.h"
 
 #include "RE_raytrace.h"
 #include "MEM_guardedalloc.h"
 
+#include "ED_mesh.h"
 
 /* Util macros */
 #define TO_STR(a)	#a
@@ -94,11 +96,14 @@
 static DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask)
 {
 	Mesh *me= ob->data;
-	
-	if (me->edit_mesh)
+	EditMesh *em = EM_GetEditMesh(me);
+
+	if (em)
 	{
 		DerivedMesh *final = NULL;
-		editmesh_get_derived_cage_and_final(scene, ob, me->edit_mesh, &final, dataMask);
+		editmesh_get_derived_cage_and_final(scene, ob, em, &final, dataMask);
+		
+		EM_EndEditMesh(me, em);
 		return final;
 	}
 	else

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h	2009-03-30 07:28:37 UTC (rev 19462)
@@ -82,6 +82,12 @@
 
 
 /* editmesh.c */
+
+/*accessor functions for editmesh, all access to editmesh must
+  go through them!*/
+struct EditMesh *EM_GetEditMesh(struct Mesh *me);
+void EM_EndEditMesh(struct Mesh *me, struct EditMesh *em);
+
 void		ED_spacetypes_init(void);
 void		ED_keymap_mesh(struct wmWindowManager *wm);
 

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editdeform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editdeform.c	2009-03-30 05:32:46 UTC (rev 19461)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editdeform.c	2009-03-30 07:28:37 UTC (rev 19462)
@@ -94,10 +94,11 @@
 	case OB_MESH:
 	{
 		Mesh *me= ob->data;
-		
-		for (eve=me->edit_mesh->verts.first; eve; eve=eve->next){
-			dvert= CustomData_em_get(&me->edit_mesh->vdata, eve->data, CD_MDEFORMVERT);
+		EditMesh *em = EM_GetEditMesh(me);
 
+		for (eve=em->verts.first; eve; eve=eve->next){
+			dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
+
 			if (dvert && dvert->totweight){
 				for (i=0; i<dvert->totweight; i++){
 					if (dvert->dw[i].def_nr == (ob->actdef-1)){
@@ -110,8 +111,10 @@
 			}
 		}
 		/* this has to be called, because this function operates on vertices only */
-		if(select) EM_select_flush(me->edit_mesh);	// vertices to edges/faces
-		else EM_deselect_flush(me->edit_mesh);
+		if(select) EM_select_flush(em);	// vertices to edges/faces
+		else EM_deselect_flush(em);
+
+		EM_EndEditMesh(em, me);
 	}
 		break;
 	case OB_LATTICE:
@@ -395,18 +398,19 @@
 	/* Make sure that any verts with higher indices are adjusted accordingly */
 	if(ob->type==OB_MESH) {
 		Mesh *me= ob->data;
-		EditMesh *em = me->edit_mesh;
+		EditMesh *em = EM_GetEditMesh(me);
 		EditVert *eve;
 		MDeformVert *dvert;
 		
 		for (eve=em->verts.first; eve; eve=eve->next){
-			dvert= CustomData_em_get(&me->edit_mesh->vdata, eve->data, CD_MDEFORMVERT);
+			dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
 
 			if (dvert)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list