[Bf-committers] [Bf-blender-cvs] SVN commit: ....

Ton Roosendaal ton at blender.org
Fri Apr 10 16:32:36 CEST 2009


Hi Joe,

I didnt follow all editmesh discussions, but this is not a good way to  
do it.
The editors/ module can *not* be called in kernel level.

If you need such a blender-wide call, put it in blenkernel,

BKE_GetEditMesh()

You also ignored plenty of warnings with this call... I'm not sure what  
you do atm, but if you need design spec advise just poke me or Brecht  
in IRC.

-Ton-

------------------------------------------------------------------------
Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
Blender Institute BV  Entrepotdok 57A  1018AD Amsterdam The Netherlands

On 30 Mar, 2009, at 9:28, Joseph Eagar wrote:

> 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. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>



More information about the Bf-committers mailing list