[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41428] branches/bmesh/blender/source/ blender/editors: BMesh todo - mirror vertex groups back.

Campbell Barton ideasman42 at gmail.com
Tue Nov 1 06:43:37 CET 2011


Revision: 41428
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41428
Author:   campbellbarton
Date:     2011-11-01 05:43:35 +0000 (Tue, 01 Nov 2011)
Log Message:
-----------
BMesh todo - mirror vertex groups back.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/object/object_vgroup.c
    branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c

Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h	2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h	2011-11-01 05:43:35 UTC (rev 41428)
@@ -120,12 +120,13 @@
  
   note: why do we only allow x axis mirror editing?
   */
-void EDBM_CacheMirrorVerts(struct BMEditMesh *em);
+void EDBM_CacheMirrorVerts(struct BMEditMesh *em, const short use_select); /* note, replaces EM_cache_x_mirror_vert in trunk */
 
 /*retrieves mirrored cache vert, or NULL if there isn't one.
   note: calling this without ensuring the mirror cache state
   is bad.*/
 struct BMVert *EDBM_GetMirrorVert(struct BMEditMesh *em, struct BMVert *v);
+void           EDBM_ClearMirrorVert(struct BMEditMesh *em, struct BMVert *v);
 void EDBM_EndMirrorCache(struct BMEditMesh *em);
 void EDBM_ApplyMirrorCache(struct BMEditMesh *em, const int sel_from, const int sel_to);
 
@@ -200,8 +201,6 @@
 intptr_t	mesh_octree_table(struct Object *ob, struct BMEditMesh *em, float *co, char mode);
 long		mesh_mirrtopo_table(struct Object *ob, char mode);
 
-//BMESH_TODO void		EM_cache_x_mirror_vert(struct Object *ob, struct BMEditMesh *em);
-
 int			mouse_mesh(struct bContext *C, const int mval[2], short extend);
 
 struct BMVert   *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em, struct BMVert *eve, float *co, int index);

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-11-01 05:43:35 UTC (rev 41428)
@@ -1616,7 +1616,7 @@
 
 	/* mirror before smooth */
 	if (((Mesh *)obedit->data)->editflag & ME_EDIT_MIRROR_X) {
-		EDBM_CacheMirrorVerts(em);
+		EDBM_CacheMirrorVerts(em, TRUE);
 	}
 
 	/* if there is a mirror modifier with clipping, flag the verts that

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-11-01 05:43:35 UTC (rev 41428)
@@ -795,7 +795,7 @@
  * preference */
 #define BM_SEARCH_MAXDIST_MIRR 0.00002f
 #define BM_CD_LAYER_ID "__mirror_index"
-void EDBM_CacheMirrorVerts(BMEditMesh *em)
+void EDBM_CacheMirrorVerts(BMEditMesh *em, const short use_select)
 {
 	Mesh *me = em->me;
 	BMBVHTree *tree = BMBVH_NewBVH(em, 0, NULL, NULL);
@@ -837,7 +837,7 @@
 		float co[3] = {-v->co[0], v->co[1], v->co[2]};
 
 		//temporary for testing, check for selection
-		if (!BM_TestHFlag(v, BM_SELECT))
+		if (use_select && !BM_TestHFlag(v, BM_SELECT))
 			continue;
 		
 		mirr = topo ?
@@ -878,6 +878,17 @@
 	return NULL;
 }
 
+void EDBM_ClearMirrorVert(BMEditMesh *em, BMVert *v)
+{
+	int *mirr = CustomData_bmesh_get_layer_n(&em->bm->vdata, v->head.data, em->mirror_cdlayer);
+
+	BLI_assert(em->mirror_cdlayer != -1); /* invalid use */
+
+	if (mirr) {
+		*mirr= -1;
+	}
+}
+
 void EDBM_EndMirrorCache(BMEditMesh *em)
 {
 	if (em->mirr_free_arrays) {

Modified: branches/bmesh/blender/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/object/object_vgroup.c	2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/object/object_vgroup.c	2011-11-01 05:43:35 UTC (rev 41428)
@@ -1562,9 +1562,7 @@
 {
 #define VGROUP_MIRR_OP dvert_mirror_op(dvert, dvert_mirr, sel, sel_mirr, flip_map, flip_map_len, mirror_weights, flip_vgroups)
 
-#if 0
-	EditVert *eve, *eve_mirr;
-#endif
+	BMVert *eve, *eve_mirr;
 
 	MDeformVert *dvert, *dvert_mirr;
 	short sel, sel_mirr;
@@ -1577,42 +1575,38 @@
 
 	/* only the active group */
 	if(ob->type == OB_MESH) {
-#if 1 //BMESH_TODO
-		(void)dvert;
-		(void)dvert_mirr;
-		(void)flip_map;
-#else
 		Mesh *me= ob->data;
-		EditMesh *em = BKE_mesh_get_editmesh(me);
+		BMEditMesh *em = me->edit_btmesh;
+		BMIter iter;
 
-
-		if(!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT)) {
+		if(!CustomData_has_layer(&em->bm->vdata, CD_MDEFORMVERT)) {
 			MEM_freeN(flip_map);
 			return;
 		}
 
-		EM_cache_x_mirror_vert(ob, em);
+		EDBM_CacheMirrorVerts(em, FALSE);
 
 		/* Go through the list of editverts and assign them */
-		for(eve=em->verts.first; eve; eve=eve->next){
-			if((eve_mirr=eve->tmp.v)) {
-				sel= eve->f & SELECT;
-				sel_mirr= eve_mirr->f & SELECT;
+		BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
+			if((eve_mirr= EDBM_GetMirrorVert(em, eve))) {
+				sel= BM_TestHFlag(eve, BM_SELECT);
+				sel_mirr= BM_TestHFlag(eve_mirr, BM_SELECT);
 
 				if((sel || sel_mirr) && (eve != eve_mirr)) {
-					dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
-					dvert_mirr= CustomData_em_get(&em->vdata, eve_mirr->data, CD_MDEFORMVERT);
+					dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT);
+					dvert_mirr= CustomData_bmesh_get(&em->bm->vdata, eve_mirr->head.data, CD_MDEFORMVERT);
 					if(dvert && dvert_mirr) {
 						VGROUP_MIRR_OP;
 					}
 				}
 
-				eve->tmp.v= eve_mirr->tmp.v= NULL;
+				/* don't use these again */
+				EDBM_ClearMirrorVert(em, eve);
+				EDBM_ClearMirrorVert(em, eve_mirr);
 			}
 		}
 
-		BKE_mesh_end_editmesh(me, em);
-#endif // BMESH_TODO
+		EDBM_EndMirrorCache(em);
 	}
 	else if (ob->type == OB_LATTICE) {
 		Lattice *lt= ob->data;

Modified: branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c	2011-11-01 05:17:46 UTC (rev 41427)
+++ branches/bmesh/blender/source/blender/editors/transform/transform_conversions.c	2011-11-01 05:43:35 UTC (rev 41428)
@@ -2075,7 +2075,7 @@
 
 	if (t->flag & T_MIRROR)
 	{
-		EDBM_CacheMirrorVerts(em);
+		EDBM_CacheMirrorVerts(em, TRUE);
 		mirror = 1;
 	}
 




More information about the Bf-blender-cvs mailing list