void IsotropicRemeshing::remesh(TriangleMesh * _mesh,unsigned int _iterations, int types) { TriangleMesh mesh = *_mesh; removeNANVertices(&mesh); mesh.add_property(update); mesh.update_normals(); meshBackup = mesh; for( unsigned int i = 0; i<_iterations; ++i ) { if (types & ISOTROPIC_REMESHING_TYPES::SPLIT_LONG_EDGES) { printf("Splitting long edges...\n"); splitLongEdges(&mesh); } if (types & ISOTROPIC_REMESHING_TYPES::COLLAPSE_SHORT_EDGES) { printf("Collapsing short edges...\n"); collapseShortEdges(&mesh); } if (types & ISOTROPIC_REMESHING_TYPES::EQUALIZE_VALENCES) { printf("equalizing valences...\n"); equalizeValences(&mesh); } if (types & ISOTROPIC_REMESHING_TYPES::TANGENTIAL_RELAXATION) { tangentialRelaxation(&mesh); printf("tangential relaxation...\n"); } if (types & ISOTROPIC_REMESHING_TYPES::PROJECT_TO_SURFACE) { printf("project to surface...\n"); projectToSurface(&mesh); } } if (types & ISOTROPIC_REMESHING_TYPES::AREA_EQUALIZATION) { printf("Area equalization...\n"); areaEqualization(&mesh); } removeNANVertices(&mesh); mesh.remove_property(update); *_mesh = mesh; }