#include #include #include #include #include #include #include #include #include #include // Domain using K = CGAL::Exact_predicates_inexact_constructions_kernel; using Mesh_domain = CGAL::Labeled_mesh_domain_3; // Triangulation using Tr = CGAL::Mesh_triangulation_3::type; using C3t3 = CGAL::Mesh_complex_3_in_triangulation_3; // Criteria using Mesh_criteria = CGAL::Mesh_criteria_3; namespace params = CGAL::parameters; int main(int argc, char* argv[]) { /// [Loads image] const std::string fname = (argc > 1) ? argv[1] : CGAL::data_file_path("images/420.inr");// liver.inr.gz"); CGAL::Image_3 image; if(!image.read(fname)){ std::cerr << "Error: Cannot read file " << fname << std::endl; return EXIT_FAILURE; } /// [Loads image] /// [Domain creation] const float sigma = (std::max)(image.vx(), (std::max)(image.vy(), image.vz())); CGAL::Image_3 img_weights = CGAL::Mesh_3::generate_label_weights(image, sigma); Mesh_domain domain = Mesh_domain::create_labeled_image_mesh_domain(image, params::weights(img_weights). relative_error_bound(1e-6)); /// [Domain creation] /// [Mesh criteria] Mesh_criteria criteria(params::facet_angle(30).facet_size(6).facet_distance(0.5). cell_radius_edge_ratio(3).cell_size(8)); /// [Mesh criteria] /// [Meshing] C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, params::no_exude(), params::no_perturb()); /// [Meshing] // Output std::ofstream medit_file("out.mesh"); CGAL::IO::write_MEDIT(medit_file, c3t3); medit_file.close(); std::ofstream bin_file("out.binary.cgal", std::ios_base::binary); CGAL::IO::save_binary_file(bin_file, c3t3); return 0; }