From ecb76539f3c1144a63f3eac2b43ab33291f00e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Fri, 28 Sep 2012 15:05:25 +0000 Subject: [PATCH] Check for invalid HE handle git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@718 fdac6126-5c0c-442c-9429-916003d36597 --- src/OpenMesh/Tools/Decimater/McDecimaterT.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/OpenMesh/Tools/Decimater/McDecimaterT.cc b/src/OpenMesh/Tools/Decimater/McDecimaterT.cc index f974753f..8dcfe74b 100644 --- a/src/OpenMesh/Tools/Decimater/McDecimaterT.cc +++ b/src/OpenMesh/Tools/Decimater/McDecimaterT.cc @@ -141,6 +141,11 @@ size_t McDecimaterT::decimate(size_t _n_collapses) { tmpHandle = typename Mesh::HalfedgeHandle( (double(rand()) / double(RAND_MAX) ) * double(mesh_.n_halfedges()-1) ); #endif + // Only take valid Handles! + if ( tmpHandle.idx() >=mesh_.n_halfedges() ) { + continue; + } + // if it is not deleted, we analyse it if ( ! mesh_.status(tmpHandle).deleted() ) { @@ -263,6 +268,11 @@ size_t McDecimaterT::decimate_to_faces(size_t _nv, size_t _nf) { tmpHandle = typename Mesh::HalfedgeHandle( ( double(rand()) / double(RAND_MAX) ) * double(mesh_.n_halfedges() - 1)); #endif + // Only take valid Handles! + if ( tmpHandle.idx() >=mesh_.n_halfedges() ) { + continue; + } + // if it is not deleted, we analyse it if (!mesh_.status(tmpHandle).deleted()) { @@ -401,6 +411,11 @@ size_t McDecimaterT::decimate_constraints_only(float _factor) { tmpHandle = typename Mesh::HalfedgeHandle(int(rand() * randomNormalizer ) ); #endif + // Only take valid Handles! + if ( tmpHandle.idx() >=mesh_.n_halfedges() ) { + continue; + } + // if it is not deleted, we analyze it if (!mesh_.status(mesh_.edge_handle(tmpHandle)).deleted()) {