#ifndef libslic3r_MeshBoolean_hpp_ #define libslic3r_MeshBoolean_hpp_ #include #include #include #include namespace Slic3r { namespace MeshBoolean { using EigenMesh = std::pair; TriangleMesh eigen_to_triangle_mesh(const EigenMesh &emesh); EigenMesh triangle_mesh_to_eigen(const TriangleMesh &mesh); void minus(EigenMesh &A, const EigenMesh &B); void self_union(EigenMesh &A); void minus(TriangleMesh& A, const TriangleMesh& B); void self_union(TriangleMesh& mesh); namespace cgal { struct CGALMesh; struct CGALMeshDeleter { void operator()(CGALMesh *ptr); }; std::unique_ptr triangle_mesh_to_cgal(const std::vector &V, const std::vector &F); inline std::unique_ptr triangle_mesh_to_cgal(const indexed_triangle_set &M) { return triangle_mesh_to_cgal(M.vertices, M.indices); } inline std::unique_ptr triangle_mesh_to_cgal(const TriangleMesh &M) { return triangle_mesh_to_cgal(M.its); } TriangleMesh cgal_to_triangle_mesh(const CGALMesh &cgalmesh); // Do boolean mesh difference with CGAL bypassing igl. void minus(TriangleMesh &A, const TriangleMesh &B); void plus(TriangleMesh &A, const TriangleMesh &B); void intersect(TriangleMesh &A, const TriangleMesh &B); void minus(CGALMesh &A, CGALMesh &B); void plus(CGALMesh &A, CGALMesh &B); void intersect(CGALMesh &A, CGALMesh &B); bool does_self_intersect(const TriangleMesh &mesh); bool does_self_intersect(const CGALMesh &mesh); } } // namespace MeshBoolean } // namespace Slic3r #endif // libslic3r_MeshBoolean_hpp_