diff --git a/src/meshlabplugins/filter_meshing/meshfilter.cpp b/src/meshlabplugins/filter_meshing/meshfilter.cpp index f5cd4b964..22aaa009f 100644 --- a/src/meshlabplugins/filter_meshing/meshfilter.cpp +++ b/src/meshlabplugins/filter_meshing/meshfilter.cpp @@ -1349,24 +1349,26 @@ case FP_COMPUTE_PRINC_CURV_DIR: case FP_REFINE_HALF_CATMULL: { - m.updateDataMask(MeshModel::MM_FACEQUALITY); + m.updateDataMask(MeshModel::MM_FACEQUALITY | MeshModel::MM_FACEFACETOPO); tri::BitQuadCreation::MakePureByRefine(m.cm); tri::UpdateNormals::PerBitQuadFaceNormalized(m.cm); assert(tri::BitQuadCreation::IsBitTriQuadConventional(m.cm)); - m.updateDataMask(MeshModel::MM_FACEFACETOPO); } break; case FP_REFINE_CATMULL : { // in practice it is just a simple double application of the FP_REFINE_HALF_CATMULL. - m.updateDataMask(MeshModel::MM_FACEQUALITY); + m.updateDataMask(MeshModel::MM_FACEQUALITY | MeshModel::MM_FACEFACETOPO); tri::BitQuadCreation::MakePureByRefine(m.cm); - assert(tri::BitQuadCreation::IsBitTriQuadConventional(m.cm)); - tri::UpdateTopology::FaceFace(m.cm); + if (!tri::BitQuadCreation::IsBitTriQuadConventional(m.cm)) + { + errorMessage = "The input mesh has not third edge faux for all triangles."; + return false; + } tri::BitQuadCreation::MakePureByRefine(m.cm); tri::UpdateNormals::PerBitQuadFaceNormalized(m.cm); m.clearDataMask(MeshModel::MM_FACEFACETOPO); - m.updateDataMask(MeshModel::MM_POLYGONAL); + m.updateDataMask(MeshModel::MM_POLYGONAL); } break; case FP_QUAD_PAIRING :