diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-12-16 08:01:08 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-12-16 08:01:08 +0400 |
commit | 724868b400882c93c83e42f17884426b23a09104 (patch) | |
tree | a16eac905817be6973cb8e4d3508e5ceb0e319dd /source/blender/editors/mesh | |
parent | eb09043411eb5c1b5e08ecc7a7087d8bfdc3d8d6 (diff) |
fix [#29620] Topology Mirror: not refreshing vertex UUIDs
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r-- | source/blender/editors/mesh/meshtools.c | 26 |
1 files changed, 18 insertions, 8 deletions
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; a<me->totedge; 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; } |