#ifndef SLA_HOLLOWING_HPP #define SLA_HOLLOWING_HPP #include #include #include #include namespace Slic3r { class TriangleMesh; namespace sla { struct HollowingConfig { double min_thickness = 2.; double quality = 0.5; double closing_distance = 0.5; bool enabled = true; }; struct DrainHole { Vec3f pos; Vec3f normal; float radius; float height; DrainHole() : pos(Vec3f::Zero()), normal(Vec3f::UnitZ()), radius(5.f), height(10.f) {} DrainHole(Vec3f p, Vec3f n, float r, float h) : pos(p), normal(n), radius(r), height(h) {} bool operator==(const DrainHole &sp) const; bool operator!=(const DrainHole &sp) const { return !(sp == (*this)); } bool is_inside(const Vec3f& pt) const; bool get_intersections(const Vec3f& s, const Vec3f& dir, std::array, 2>& out) const; Contour3D to_mesh() const; template inline void serialize(Archive &ar) { ar(pos, normal, radius, height); } }; using DrainHoles = std::vector; std::unique_ptr generate_interior(const TriangleMesh &mesh, const HollowingConfig & = {}, const JobController &ctl = {}); void cut_drainholes(std::vector & obj_slices, const std::vector &slicegrid, float closing_radius, const sla::DrainHoles & holes, std::function thr); } } #endif // HOLLOWINGFILTER_H