Created
August 11, 2023 08:57
-
-
Save pentacular/c02a8dea2a74006716a41c618e700d4c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define CGAL_USE_GLPK | |
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> | |
#include <CGAL/GLPK_mixed_integer_program_traits.h> | |
#include <CGAL/Polygonal_surface_reconstruction.h> | |
#include <CGAL/Surface_mesh.h> | |
#include <CGAL/property_map.h> | |
int main() { | |
typedef CGAL::Exact_predicates_inexact_constructions_kernel Epick_kernel; | |
typedef Epick_kernel::Point_3 Epick_point; | |
typedef Epick_kernel::Vector_3 Epick_vector; | |
typedef CGAL::Surface_mesh<Epick_point> Epick_surface_mesh; | |
typedef boost::tuple<Epick_point, Epick_vector, int> PNI; | |
typedef CGAL::Nth_of_tuple_property_map<0, PNI> Point_map; | |
typedef CGAL::Nth_of_tuple_property_map<1, PNI> Normal_map; | |
typedef CGAL::Nth_of_tuple_property_map<2, PNI> Plane_id_map; | |
typedef std::vector<PNI> Point_vector; | |
Point_vector points{ | |
PNI(Epick_point(0.5, 0.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(1.5, -1.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(-1.5, 1.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(1.5, 1.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(-0.5, -0.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(-1.5, -1.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(-1.5, 1.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(1.5, -1.5, -1.5), Epick_vector(0, 0, -1), 0), | |
PNI(Epick_point(0.5, 0.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(1.5, 1.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(-1.5, 1.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(1.5, -1.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(-0.5, -0.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(1.5, -1.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(-1.5, 1.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(-1.5, -1.5, 1.5), Epick_vector(0, 0, 1), 1), | |
PNI(Epick_point(1.5, 0.5, 0.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, 1.5, -1.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, 1.5, 1.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, -1.5, 1.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, -0.5, -0.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, -1.5, 1.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, -1.5, -1.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(1.5, 1.5, -1.5), Epick_vector(1, 0, 0), 2), | |
PNI(Epick_point(-0.5, 1.5, 0.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(-1.5, 1.5, -1.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(-1.5, 1.5, 1.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(1.5, 1.5, 1.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(0.5, 1.5, -0.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(1.5, 1.5, 1.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(1.5, 1.5, -1.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(-1.5, 1.5, -1.5), Epick_vector(0, 1, 0), 3), | |
PNI(Epick_point(-1.5, -0.5, 0.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, -1.5, -1.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, -1.5, 1.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, 1.5, 1.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, 0.5, -0.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, 1.5, 1.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, 1.5, -1.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(-1.5, -1.5, -1.5), Epick_vector(-1, 0, 0), 4), | |
PNI(Epick_point(0.5, -1.5, 0.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(1.5, -1.5, -1.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(1.5, -1.5, 1.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(-1.5, -1.5, 1.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(-0.5, -1.5, -0.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(-1.5, -1.5, 1.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(-1.5, -1.5, -1.5), Epick_vector(0, -1, 0), 5), | |
PNI(Epick_point(1.5, -1.5, -1.5), Epick_vector(0, -1, 0), 5) | |
}; | |
typedef CGAL::Polygonal_surface_reconstruction<Epick_kernel> | |
Polygonal_surface_reconstruction; | |
typedef CGAL::GLPK_mixed_integer_program_traits<double> MIP_Solver; | |
Polygonal_surface_reconstruction algo(points, Point_map(), Normal_map(), | |
Plane_id_map()); | |
Epick_surface_mesh mesh; | |
if (!algo.reconstruct<MIP_Solver>(mesh)) { | |
std::cerr << " Failed: " << algo.error_message() << std::endl; | |
return 1; | |
} | |
std::cout << "Reconstructed mesh is closed: " << CGAL::is_closed(mesh) << std::endl; | |
std::cout << "Reconstructed mesh: " << mesh << std::endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment