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:
authorSybren A. Stüvel <sybren@stuvel.eu>2017-10-29 17:14:04 +0300
committerSybren A. Stüvel <sybren@stuvel.eu>2017-10-29 17:14:04 +0300
commit7530c54c3cf38016d9038e6879c8ee2b1bd14c9e (patch)
treea43bf60f8267855f7950017b53c04fd88a5207ac /source/blender/bmesh
parent1186dec916737b69afecd15030736f6d3361694e (diff)
parentd9000495e1273052c895c754fd2aa56c9dbe6175 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/tools/bmesh_decimate_collapse.c9
-rw-r--r--source/blender/bmesh/tools/bmesh_decimate_dissolve.c15
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);
}
}