From 83e9f17aa817c28c03ea68db610aca59feebca44 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Thu, 7 May 2026 22:24:45 +0800 Subject: [PATCH] Fix issue that `Geometry::deg2rad()` do calculation in the same type as the parameter, which means if the parameter is `int` then you lose all the precision --- src/libslic3r/Geometry.hpp | 6 +++++- src/libslic3r/TriangleSelector.cpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp index 0ae7524fa0..e610a9ed4f 100644 --- a/src/libslic3r/Geometry.hpp +++ b/src/libslic3r/Geometry.hpp @@ -298,7 +298,11 @@ bool directions_perpendicular(double angle1, double angle2, double max_diff = 0) template bool contains(const std::vector &vector, const Point &point); template T rad2deg(T angle) { return T(180.0) * angle / T(PI); } double rad2deg_dir(double angle); -template constexpr T deg2rad(const T angle) { return T(PI) * angle / T(180.0); } +template constexpr T deg2rad(const T angle) +{ + static_assert(std::is_floating_point::value, "Why do you want to calculate angle in integer?"); + return T(PI) * angle / T(180.0); +} template T angle_to_0_2PI(T angle) { static const T TWO_PI = T(2) * T(PI); diff --git a/src/libslic3r/TriangleSelector.cpp b/src/libslic3r/TriangleSelector.cpp index e4d1a4521c..19f638a160 100644 --- a/src/libslic3r/TriangleSelector.cpp +++ b/src/libslic3r/TriangleSelector.cpp @@ -2399,7 +2399,7 @@ private: return line.distance(p); } }; -const double TriangleCursor::facet_angle_limit = cos(Geometry::deg2rad(5)); +const double TriangleCursor::facet_angle_limit = cos(Geometry::deg2rad(5.0)); // Remap painting data from source mesh to target mesh using spatial mapping.