#ifndef SLA_CONTOUR3D_HPP #define SLA_CONTOUR3D_HPP #include namespace Slic3r { // Used for quads (TODO: remove this, and convert quads to triangles in OpenVDBUtils) using Vec4i = Eigen::Matrix; namespace sla { class IndexedMesh; /// Dumb vertex mesh consisting of triangles (or) quads. Capable of merging with /// other meshes of this type and converting to and from other mesh formats. struct Contour3D { std::vector points; std::vector faces3; std::vector faces4; Contour3D() = default; Contour3D(const TriangleMesh &trmesh); Contour3D(TriangleMesh &&trmesh); Contour3D(const IndexedMesh &emesh); Contour3D& merge(const Contour3D& ctr); Contour3D& merge(const Pointf3s& triangles); // Write the index triangle structure to OBJ file for debugging purposes. void to_obj(std::ostream& stream); void from_obj(std::istream &stream); inline bool empty() const { return points.empty() || (faces4.empty() && faces3.empty()); } }; /// Mesh from an existing contour. TriangleMesh to_triangle_mesh(const Contour3D& ctour); /// Mesh from an evaporating 3D contour TriangleMesh to_triangle_mesh(Contour3D&& ctour); }} // namespace Slic3r::sla #endif // CONTOUR3D_HPP