diff --git a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h index 937d14f65df..bbfbb9b5a89 100644 --- a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h @@ -137,6 +137,7 @@ public: { stored_polyhedra.resize(1); stored_polyhedra[0] = p; + get(face_patch_id_t(), stored_polyhedra[0]); this->add_primitives(stored_polyhedra[0]); this->build(); } @@ -171,6 +172,8 @@ public: stored_polyhedra.resize(2); stored_polyhedra[0] = p; stored_polyhedra[1] = bounding_p; + get(face_patch_id_t(), stored_polyhedra[0]); + get(face_patch_id_t(), stored_polyhedra[1]); this->add_primitives(stored_polyhedra[0]); this->add_primitives(stored_polyhedra[1]); if(CGAL::is_empty(bounding_p)) { @@ -189,6 +192,7 @@ public: stored_polyhedra.reserve(std::distance(begin, end)); for (; begin != end; ++begin) { stored_polyhedra.push_back(**begin); + get(face_patch_id_t(), stored_polyhedra.back()); this->add_primitives(stored_polyhedra.back()); } this->set_surface_only(); @@ -206,11 +210,13 @@ public: if(begin != end) { for (; begin != end; ++begin) { stored_polyhedra.push_back(**begin); + get(face_patch_id_t(), stored_polyhedra.back()); this->add_primitives(stored_polyhedra.back()); } - stored_polyhedra.push_back(bounding_polyhedron); - this->add_primitives(stored_polyhedra.back()); } + stored_polyhedra.push_back(bounding_polyhedron); + get(face_patch_id_t(), stored_polyhedra.back()); + this->add_primitives(stored_polyhedra.back()); if(bounding_polyhedron.empty()) { this->set_surface_only(); } else { @@ -246,6 +252,7 @@ private: std::ifstream input(filename); stored_polyhedra.resize(1); input >> stored_polyhedra[0]; + get(face_patch_id_t(), stored_polyhedra[0]); this->add_primitives(stored_polyhedra[0]); this->build(); } diff --git a/Mesh_3/test/Mesh_3/CMakeLists.txt b/Mesh_3/test/Mesh_3/CMakeLists.txt index 1dd4729c042..f8e01bda540 100644 --- a/Mesh_3/test/Mesh_3/CMakeLists.txt +++ b/Mesh_3/test/Mesh_3/CMakeLists.txt @@ -39,6 +39,7 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "test_labeled_mesh_domain_3.cpp" ) create_single_source_cgal_program( "test_mesh_criteria_creation.cpp" ) create_single_source_cgal_program( "test_c3t3_into_facegraph.cpp" ) + create_single_source_cgal_program( "test_without_detect_features.cpp" ) if(CGAL_ImageIO_USE_ZLIB) create_single_source_cgal_program( "test_meshing_3D_image.cpp" ) create_single_source_cgal_program( "test_meshing_3D_image_deprecated.cpp" ) diff --git a/Mesh_3/test/Mesh_3/test_without_detect_features.cpp b/Mesh_3/test/Mesh_3/test_without_detect_features.cpp new file mode 100644 index 00000000000..0319c23a426 --- /dev/null +++ b/Mesh_3/test/Mesh_3/test_without_detect_features.cpp @@ -0,0 +1,73 @@ +#include + +#include +#include +#include +#include + +#include +#include + +template +struct Tester { + // Domain + typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; + + + // Triangulation + typedef typename CGAL::Mesh_triangulation_3::type Tr; + + typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; + + // Criteria + typedef CGAL::Mesh_criteria_3 Mesh_criteria; + + int operator()(const char* fname, const char* out_fname) + { + std::ifstream input(fname); + using namespace CGAL::parameters; + + Polyhedron polyhedron; + input >> polyhedron; + if(input.fail()){ + std::cerr << "Error: Cannot read file " << fname << std::endl; + return EXIT_FAILURE; + } + + if (!CGAL::is_triangle_mesh(polyhedron)){ + std::cerr << "Input geometry is not triangulated." << std::endl; + return EXIT_FAILURE; + } + + // Create domain + Mesh_domain domain(polyhedron); + + // domain.detect_features() is not called, on purpose + + // Mesh criteria + Mesh_criteria criteria(edge_size = 0.2, + facet_angle = 25, facet_size = 0.2, facet_distance = 0.02, + cell_radius_edge_ratio = 3, cell_size = 0.2); + + // Mesh generation + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria); + + // Output + std::ofstream medit_file(out_fname); + c3t3.output_to_medit(medit_file); + return EXIT_SUCCESS; + } +}; + +int main(int argc, char*argv[]) +{ + const char* fname = (argc>1)?argv[1]:"data/cube.off"; + + typedef CGAL::Exact_predicates_inexact_constructions_kernel K; + typedef CGAL::Mesh_polyhedron_3::type Polyhedron; + typedef CGAL::Surface_mesh Surface_mesh; + + return + Tester()(fname, "out-polyhedron.mesh") | + Tester()(fname, "out-surface_mesh.mesh"); +}