| 194 | } |
| 195 | |
| 196 | void ShortEdgeRemoval::collapse(Float threshold) { |
| 197 | while (!m_heap.empty()) { |
| 198 | size_t edge_idx = m_heap.top(); |
| 199 | Float edge_len = m_heap.top_value(); |
| 200 | m_heap.pop(); |
| 201 | |
| 202 | if (edge_len > threshold) break; |
| 203 | if (!edge_is_valid(edge_idx)) continue; |
| 204 | if (!edge_can_be_collapsed(edge_idx)) continue; |
| 205 | |
| 206 | collapse_edge(edge_idx); |
| 207 | } |
| 208 | } |
| 209 | |
| 210 | bool ShortEdgeRemoval::edge_is_valid(size_t edge_idx) const { |
| 211 | const Edge& edge = m_edges[edge_idx]; |