diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2017-10-29 17:14:04 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2017-10-29 17:14:04 +0300 |
commit | 7530c54c3cf38016d9038e6879c8ee2b1bd14c9e (patch) | |
tree | a43bf60f8267855f7950017b53c04fd88a5207ac /source/blender/bmesh | |
parent | 1186dec916737b69afecd15030736f6d3361694e (diff) | |
parent | d9000495e1273052c895c754fd2aa56c9dbe6175 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/tools/bmesh_decimate_collapse.c | 9 | ||||
-rw-r--r-- | source/blender/bmesh/tools/bmesh_decimate_dissolve.c | 15 |
2 files changed, 9 insertions, 15 deletions
diff --git a/source/blender/bmesh/tools/bmesh_decimate_collapse.c b/source/blender/bmesh/tools/bmesh_decimate_collapse.c index d734d9b6ae1..0a1271c2aa9 100644 --- a/source/blender/bmesh/tools/bmesh_decimate_collapse.c +++ b/source/blender/bmesh/tools/bmesh_decimate_collapse.c @@ -256,10 +256,6 @@ static void bm_decim_build_edge_cost_single( { float cost; - if (eheap_table[BM_elem_index_get(e)]) { - BLI_heap_remove(eheap, eheap_table[BM_elem_index_get(e)]); - } - if (UNLIKELY(vweights && ((vweights[BM_elem_index_get(e->v1)] == 0.0f) || (vweights[BM_elem_index_get(e->v2)] == 0.0f)))) @@ -341,10 +337,13 @@ static void bm_decim_build_edge_cost_single( } } - eheap_table[BM_elem_index_get(e)] = BLI_heap_insert(eheap, cost, e); + BLI_heap_insert_or_update(eheap, &eheap_table[BM_elem_index_get(e)], cost, e); return; clear: + if (eheap_table[BM_elem_index_get(e)]) { + BLI_heap_remove(eheap, eheap_table[BM_elem_index_get(e)]); + } eheap_table[BM_elem_index_get(e)] = NULL; } diff --git a/source/blender/bmesh/tools/bmesh_decimate_dissolve.c b/source/blender/bmesh/tools/bmesh_decimate_dissolve.c index e2c36299ddf..72722eab4e6 100644 --- a/source/blender/bmesh/tools/bmesh_decimate_dissolve.c +++ b/source/blender/bmesh/tools/bmesh_decimate_dissolve.c @@ -342,8 +342,7 @@ void BM_mesh_decimate_dissolve_ex( const int j = BM_elem_index_get(l_iter->e); if (j != -1 && eheap_table[j]) { const float cost = bm_edge_calc_dissolve_error(l_iter->e, delimit, &delimit_data); - BLI_heap_remove(eheap, eheap_table[j]); - eheap_table[j] = BLI_heap_insert(eheap, cost, l_iter->e); + BLI_heap_node_value_update(eheap, eheap_table[j], cost); } } while ((l_iter = l_iter->next) != l_first); } @@ -353,8 +352,7 @@ void BM_mesh_decimate_dissolve_ex( } if (UNLIKELY(f_new == NULL)) { - BLI_heap_remove(eheap, enode_top); - eheap_table[i] = BLI_heap_insert(eheap, COST_INVALID, e); + BLI_heap_node_value_update(eheap, enode_top, COST_INVALID); } } @@ -475,8 +473,7 @@ void BM_mesh_decimate_dissolve_ex( const int j = BM_elem_index_get(v_iter); if (j != -1 && vheap_table[j]) { const float cost = bm_vert_edge_face_angle(v_iter); - BLI_heap_remove(vheap, vheap_table[j]); - vheap_table[j] = BLI_heap_insert(vheap, cost, v_iter); + BLI_heap_node_value_update(vheap, vheap_table[j], cost); } } @@ -497,8 +494,7 @@ void BM_mesh_decimate_dissolve_ex( (BLI_heap_node_value(vheap_table[j]) == COST_INVALID)) { const float cost = bm_vert_edge_face_angle(l_cycle_iter->v); - BLI_heap_remove(vheap, vheap_table[j]); - vheap_table[j] = BLI_heap_insert(vheap, cost, l_cycle_iter->v); + BLI_heap_node_value_update(vheap, vheap_table[j], cost); } } while ((l_cycle_iter = l_cycle_iter->next) != l_cycle_first); @@ -510,8 +506,7 @@ void BM_mesh_decimate_dissolve_ex( } if (UNLIKELY(e_new == NULL)) { - BLI_heap_remove(vheap, vnode_top); - vheap_table[i] = BLI_heap_insert(vheap, COST_INVALID, v); + BLI_heap_node_value_update(vheap, vnode_top, COST_INVALID); } } |