mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-16 17:56:07 +08:00
FIX crop parallel line with y
This commit is contained in:
parent
a3d17119f6
commit
fe5f9ac382
@ -36,11 +36,12 @@ std::optional<Slic3r::Line> LineUtils::crop_ray(const Line & ray,
|
|||||||
coord_t abs_diff = abs(diff);
|
coord_t abs_diff = abs(diff);
|
||||||
if (abs_diff > radius) return {};
|
if (abs_diff > radius) return {};
|
||||||
// create cross points
|
// create cross points
|
||||||
double move_y = sqrt(radius * radius - (double) x * x);
|
double move_y = sqrt(radius * radius - static_cast<double>(x) * x);
|
||||||
coord_t y = std::round(move_y);
|
coord_t y = static_cast<coord_t>(std::round(move_y));
|
||||||
Point first(x, y);
|
coord_t cy = center.y();
|
||||||
Point second(x,-y);
|
Point first(x, cy + y);
|
||||||
return Line(first + center, second + center);
|
Point second(x,cy - y);
|
||||||
|
return Line(first, second);
|
||||||
} else {
|
} else {
|
||||||
Line moved_line(ray.a - center, ray.b - center);
|
Line moved_line(ray.a - center, ray.b - center);
|
||||||
double a, b, c;
|
double a, b, c;
|
||||||
@ -87,7 +88,7 @@ std::optional<Slic3r::Line> LineUtils::crop_half_ray(const Line & half_ray,
|
|||||||
{
|
{
|
||||||
std::optional<Line> segment = crop_ray(half_ray, center, radius);
|
std::optional<Line> segment = crop_ray(half_ray, center, radius);
|
||||||
if (!segment.has_value()) return {};
|
if (!segment.has_value()) return {};
|
||||||
Point dir = half_ray.b - half_ray.a;
|
Point dir = LineUtils::direction(half_ray);
|
||||||
using fnc = std::function<bool(const Point &)>;
|
using fnc = std::function<bool(const Point &)>;
|
||||||
fnc use_point_x = [&half_ray, &dir](const Point &p) -> bool {
|
fnc use_point_x = [&half_ray, &dir](const Point &p) -> bool {
|
||||||
return (p.x() > half_ray.a.x()) == (dir.x() > 0);
|
return (p.x() > half_ray.a.x()) == (dir.x() > 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user