Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-12-16 08:01:08 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-16 08:01:08 +0400
commit724868b400882c93c83e42f17884426b23a09104 (patch)
treea16eac905817be6973cb8e4d3508e5ceb0e319dd /source/blender/editors/mesh
parenteb09043411eb5c1b5e08ecc7a7087d8bfdc3d8d6 (diff)
fix [#29620] Topology Mirror: not refreshing vertex UUIDs
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r--source/blender/editors/mesh/meshtools.c26
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;
}