From 724868b400882c93c83e42f17884426b23a09104 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 16 Dec 2011 04:01:08 +0000 Subject: fix [#29620] Topology Mirror: not refreshing vertex UUIDs --- source/blender/editors/mesh/meshtools.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/mesh') diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 707936351cf..3ea872a93de 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -873,7 +873,8 @@ static int MirrTopo_item_sort(const void *v1, const void *v2) } static long *mesh_topo_lookup = NULL; -static int mesh_topo_lookup_tot = -1; +static int mesh_topo_lookup_vert_tot = -1; +static int mesh_topo_lookup_edge_tot = -1; static int mesh_topo_lookup_mode = -1; /* mode is 's' start, or 'e' end, or 'u' use */ @@ -884,8 +885,10 @@ long mesh_mirrtopo_table(Object *ob, char mode) Mesh *me= ob->data; if( (mesh_topo_lookup==NULL) || (mesh_topo_lookup_mode != ob->mode) || - (me->edit_mesh && me->edit_mesh->totvert != mesh_topo_lookup_tot) || - (me->edit_mesh==NULL && me->totvert != mesh_topo_lookup_tot) + (me->edit_mesh && (me->edit_mesh->totvert != mesh_topo_lookup_vert_tot)) || + (me->edit_mesh && (me->edit_mesh->totedge != mesh_topo_lookup_edge_tot)) || + (me->edit_mesh==NULL && me->totvert != mesh_topo_lookup_vert_tot) || + (me->edit_mesh==NULL && me->totedge != mesh_topo_lookup_edge_tot) ) { mesh_mirrtopo_table(ob, 's'); } @@ -899,7 +902,8 @@ long mesh_mirrtopo_table(Object *ob, char mode) /* editmode*/ EditEdge *eed; - int a, last, totvert; + int a, last; + int totvert, totedge; int totUnique= -1, totUniqueOld= -1; MIRRHASH_TYPE *MirrTopoHash = NULL; @@ -930,12 +934,16 @@ long mesh_mirrtopo_table(Object *ob, char mode) /* Initialize the vert-edge-user counts used to detect unique topology */ if(em) { - for(eed=em->edges.first; eed; eed= eed->next) { + totedge= 0; + + for(eed=em->edges.first; eed; eed= eed->next, totedge++) { MirrTopoHash[eed->v1->tmp.l]++; MirrTopoHash[eed->v2->tmp.l]++; } } else { - for(a=0, medge=me->medge; atotedge; a++, medge++) { + totedge= me->totedge; + + for(a=0, medge=me->medge; a < me->totedge; a++, medge++) { MirrTopoHash[medge->v1]++; MirrTopoHash[medge->v2]++; } @@ -1046,14 +1054,16 @@ long mesh_mirrtopo_table(Object *ob, char mode) MEM_freeN( MirrTopoHash ); MEM_freeN( MirrTopoHash_Prev ); - mesh_topo_lookup_tot = totvert; + mesh_topo_lookup_vert_tot = totvert; + mesh_topo_lookup_edge_tot = totedge; } else if(mode=='e') { /* end table */ if (mesh_topo_lookup) { MEM_freeN(mesh_topo_lookup); } mesh_topo_lookup = NULL; - mesh_topo_lookup_tot= -1; + mesh_topo_lookup_vert_tot= -1; + mesh_topo_lookup_edge_tot= -1; } return 0; } -- cgit v1.2.3