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;
        }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to