68 lines
1.6 KiB
C++
68 lines
1.6 KiB
C++
|
#ifndef BRIMEARSPOINT_HPP
|
||
|
#define BRIMEARSPOINT_HPP
|
||
|
|
||
|
#include <libslic3r/Point.hpp>
|
||
|
|
||
|
|
||
|
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<double>();
|
||
|
return result.cast<float>();
|
||
|
}
|
||
|
|
||
|
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<class Archive> void serialize(Archive &ar)
|
||
|
{
|
||
|
ar(pos, head_front_radius);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
using BrimPoints = std::vector<BrimPoint>;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif // BRIMEARSPOINT_HPP
|