Revision: 60499 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60499 Author: campbellbarton Date: 2013-10-02 04:12:06 +0000 (Wed, 02 Oct 2013) Log Message: ----------- fix [#36913] GHASH_FLAG_ALLOW_DUPES assert and crash in Edge Collapse
Modified Paths: -------------- trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c Modified: trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c =================================================================== --- trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c 2013-10-01 18:23:39 UTC (rev 60498) +++ trunk/blender/source/blender/bmesh/operators/bmo_removedoubles.c 2013-10-02 04:12:06 UTC (rev 60499) @@ -354,7 +354,7 @@ BMEdge *e, **edges = NULL; BLI_array_declare(edges); float min[3], max[3], center[3]; - int i, tot; + unsigned int i, tot; BMOpSlot *slot_targetmap; BMO_op_callf(bm, op->flag, "collapse_uvs edges=%s", op, "edges"); @@ -369,6 +369,8 @@ BMW_NIL_LAY); BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { + BMVert *v_tar; + if (!BMO_elem_flag_test(bm, e, EDGE_MARK)) continue; @@ -381,19 +383,29 @@ minmax_v3v3_v3(min, max, e->v1->co); minmax_v3v3_v3(min, max, e->v2->co); + + /* prevent adding to slot_targetmap multiple times */ + BM_elem_flag_disable(e->v1, BM_ELEM_TAG); + BM_elem_flag_disable(e->v2, BM_ELEM_TAG); } mid_v3_v3v3(center, min, max); /* snap edges to a point. for initial testing purposes anyway */ + v_tar = edges[0]->v1; + for (i = 0; i < tot; i++) { - copy_v3_v3(edges[i]->v1->co, center); - copy_v3_v3(edges[i]->v2->co, center); - - if (edges[i]->v1 != edges[0]->v1) - BMO_slot_map_elem_insert(&weldop, slot_targetmap, edges[i]->v1, edges[0]->v1); - if (edges[i]->v2 != edges[0]->v1) - BMO_slot_map_elem_insert(&weldop, slot_targetmap, edges[i]->v2, edges[0]->v1); + unsigned int j; + + for (j = 0; j < 2; j++) { + BMVert *v_src = *((&edges[i]->v1) + j); + + copy_v3_v3(v_src->co, center); + if ((v_src != v_tar) && !BM_elem_flag_test(v_src, BM_ELEM_TAG)) { + BM_elem_flag_enable(v_src, BM_ELEM_TAG); + BMO_slot_map_elem_insert(&weldop, slot_targetmap, v_src, v_tar); + } + } } } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs