#ifndef BRIMEARSPOINT_HPP #define BRIMEARSPOINT_HPP #include namespace Slic3r { // An enum to keep track of where the current points on the ModelObject came from. enum class PointsStatus { NoPoints, // No points were generated so far. Generating, // The autogeneration algorithm triggered, but not yet finished. AutoGenerated, // Points were autogenerated (i.e. copied from the backend). UserModified // User has done some edits. }; struct BrimPoint { Vec3f pos; float head_front_radius; BrimPoint() : pos(Vec3f::Zero()), head_front_radius(0.f) {} BrimPoint(float pos_x, float pos_y, float pos_z, float head_radius) : pos(pos_x, pos_y, pos_z) , head_front_radius(head_radius) {} BrimPoint(Vec3f position, float head_radius) : pos(position) , head_front_radius(head_radius) {} Vec3f transform(const Transform3d &trsf) { Vec3d result = trsf * pos.cast(); return result.cast(); } void set_transform(const Transform3d& trsf) { pos = transform(trsf); } bool operator==(const BrimPoint &sp) const { float rdiff = std::abs(head_front_radius - sp.head_front_radius); return (pos == sp.pos) && rdiff < float(EPSILON); } bool operator!=(const BrimPoint &sp) const { return !(sp == (*this)); } template void serialize(Archive &ar) { ar(pos, head_front_radius); } }; using BrimPoints = std::vector; } #endif // BRIMEARSPOINT_HPP