From 5443f77489e5f673dd77b7f78e30b7600295fd95 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Fri, 26 Mar 2021 18:20:31 +0100 Subject: [PATCH] Increase performance of "best misalignment" method --- src/libslic3r/SLA/Rotfinder.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/SLA/Rotfinder.cpp b/src/libslic3r/SLA/Rotfinder.cpp index c97cf50107..89de1cf83d 100644 --- a/src/libslic3r/SLA/Rotfinder.cpp +++ b/src/libslic3r/SLA/Rotfinder.cpp @@ -63,12 +63,14 @@ double get_misalginment_score(const TriangleMesh &mesh, const Transform3f &tr) if (mesh.its.vertices.empty()) return std::nan(""); auto accessfn = [&mesh, &tr](size_t fi) { - Vec3f n = normal(get_transformed_triangle(mesh, tr, fi)); + auto triangle = get_transformed_triangle(mesh, tr, fi); + Vec3f U = triangle[1] - triangle[0]; + Vec3f V = triangle[2] - triangle[0]; + Vec3f C = U.cross(V); // We should score against the alignment with the reference planes - return scaled(std::abs(n.dot(Vec3f::UnitX())) + - std::abs(n.dot(Vec3f::UnitY())) + - std::abs(n.dot(Vec3f::UnitZ()))); + return scaled(std::abs(C.dot(Vec3f::UnitX())) + + std::abs(C.dot(Vec3f::UnitY()))); }; size_t facecount = mesh.its.indices.size();