Fixed runaway selection
This commit is contained in:
@@ -144,13 +144,13 @@ void DecimaterT<Mesh>::heap_vertex(VertexHandle _vh) {
|
|||||||
mesh_.property(priority_, _vh) = -1;
|
mesh_.property(priority_, _vh) = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
template<class Mesh>
|
template<class Mesh>
|
||||||
size_t DecimaterT<Mesh>::decimate(size_t _n_collapses, bool _only_selected) {
|
size_t DecimaterT<Mesh>::decimate(size_t _n_collapses, bool _only_selected) {
|
||||||
|
|
||||||
if (!this->is_initialized())
|
if (!this->is_initialized())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
typename Mesh::VertexHandle vp;
|
typename Mesh::VertexHandle vp;
|
||||||
typename Mesh::HalfedgeHandle v0v1;
|
typename Mesh::HalfedgeHandle v0v1;
|
||||||
@@ -234,16 +234,17 @@ size_t DecimaterT<Mesh>::decimate(size_t _n_collapses, bool _only_selected) {
|
|||||||
|
|
||||||
// update heap (former one ring of decimated vertex)
|
// update heap (former one ring of decimated vertex)
|
||||||
for (s_it = support.begin(), s_end = support.end(); s_it != s_end; ++s_it) {
|
for (s_it = support.begin(), s_end = support.end(); s_it != s_end; ++s_it) {
|
||||||
assert(!mesh_.status(*s_it).deleted());
|
assert(!mesh_.status(*s_it).deleted());
|
||||||
heap_vertex(*s_it);
|
if (!_only_selected || mesh_.status(*s_it).selected() )
|
||||||
}
|
heap_vertex(*s_it);
|
||||||
|
}
|
||||||
// notify observer and stop if the observer requests it
|
|
||||||
if (!this->notify_observer(n_collapses))
|
// notify observer and stop if the observer requests it
|
||||||
return n_collapses;
|
if (!this->notify_observer(n_collapses))
|
||||||
}
|
return n_collapses;
|
||||||
|
}
|
||||||
// delete heap
|
|
||||||
|
// delete heap
|
||||||
heap_.reset();
|
heap_.reset();
|
||||||
|
|
||||||
|
|
||||||
@@ -252,13 +253,13 @@ size_t DecimaterT<Mesh>::decimate(size_t _n_collapses, bool _only_selected) {
|
|||||||
return n_collapses;
|
return n_collapses;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
template<class Mesh>
|
template<class Mesh>
|
||||||
size_t DecimaterT<Mesh>::decimate_to_faces(size_t _nv, size_t _nf, bool _only_selected) {
|
size_t DecimaterT<Mesh>::decimate_to_faces(size_t _nv, size_t _nf, bool _only_selected) {
|
||||||
|
|
||||||
if (!this->is_initialized())
|
if (!this->is_initialized())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (_nv >= mesh_.n_vertices() || _nf >= mesh_.n_faces())
|
if (_nv >= mesh_.n_vertices() || _nf >= mesh_.n_faces())
|
||||||
return 0;
|
return 0;
|
||||||
@@ -345,16 +346,16 @@ size_t DecimaterT<Mesh>::decimate_to_faces(size_t _nv, size_t _nf, bool _only_se
|
|||||||
|
|
||||||
// update heap (former one ring of decimated vertex)
|
// update heap (former one ring of decimated vertex)
|
||||||
for (s_it = support.begin(), s_end = support.end(); s_it != s_end; ++s_it) {
|
for (s_it = support.begin(), s_end = support.end(); s_it != s_end; ++s_it) {
|
||||||
assert(!mesh_.status(*s_it).deleted());
|
assert(!mesh_.status(*s_it).deleted());
|
||||||
heap_vertex(*s_it);
|
heap_vertex(*s_it);
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify observer and stop if the observer requests it
|
// notify observer and stop if the observer requests it
|
||||||
if (!this->notify_observer(n_collapses))
|
if (!this->notify_observer(n_collapses))
|
||||||
return n_collapses;
|
return n_collapses;
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete heap
|
// delete heap
|
||||||
heap_.reset();
|
heap_.reset();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user