From 974bfbdfbd485021dd8c289970418aa7bd2d2ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Wed, 19 Feb 2025 10:18:31 +0100 Subject: [PATCH] Fix int32 overflow. --- src/libslic3r/SLA/SupportIslands/LineUtils.cpp | 10 +++------- src/libslic3r/SLA/SupportIslands/ParabolaUtils.cpp | 10 +++++----- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/SLA/SupportIslands/LineUtils.cpp b/src/libslic3r/SLA/SupportIslands/LineUtils.cpp index b287b6885f..f8f3236273 100644 --- a/src/libslic3r/SLA/SupportIslands/LineUtils.cpp +++ b/src/libslic3r/SLA/SupportIslands/LineUtils.cpp @@ -259,13 +259,9 @@ double LineUtils::perp_distance(const Linef &line, Vec2d p) bool LineUtils::is_parallel(const Line &first, const Line &second) { - Point dir1 = direction(first); - Point dir2 = direction(second); - coord_t cross( - static_cast(dir1.x()) * dir2.y() - - static_cast(dir2.x()) * dir1.y() - ); - return (cross == 0); + Vec2i64 dir1 = direction(first).cast(); + Vec2i64 dir2 = direction(second).cast(); + return Slic3r::cross2(dir1, dir2) == 0; } std::optional LineUtils::intersection(const Line &ray1, const Line &ray2) diff --git a/src/libslic3r/SLA/SupportIslands/ParabolaUtils.cpp b/src/libslic3r/SLA/SupportIslands/ParabolaUtils.cpp index d97b07bb49..6ba513a7e9 100644 --- a/src/libslic3r/SLA/SupportIslands/ParabolaUtils.cpp +++ b/src/libslic3r/SLA/SupportIslands/ParabolaUtils.cpp @@ -67,11 +67,11 @@ double ParabolaUtils::focal_length(const Parabola ¶bola) bool ParabolaUtils::is_over_zero(const ParabolaSegment ¶bola) { - Point line_direction = parabola.directrix.b - parabola.directrix.a; - Point focus_from = parabola.focus - parabola.from; - Point focus_to = parabola.focus - parabola.to; - bool is_positive_x1 = line_direction.dot(focus_from) > 0.; - bool is_positive_x2 = line_direction.dot(focus_to) > 0.; + Vec2i64 line_direction = (parabola.directrix.b - parabola.directrix.a).cast(); + Vec2i64 focus_from = (parabola.focus - parabola.from).cast(); + Vec2i64 focus_to = (parabola.focus - parabola.to).cast();; + bool is_positive_x1 = line_direction.dot(focus_from) > 0; + bool is_positive_x2 = line_direction.dot(focus_to) > 0; return is_positive_x1 != is_positive_x2; }