From 578fcbc37c116950cfb9a1d412fe761e1973f371 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Wed, 8 Jan 2020 17:12:06 +0100 Subject: [PATCH] Performance improvements in raycaster --- src/libslic3r/SLA/Common.cpp | 19 +++++++++++-------- src/libslic3r/SLA/EigenMesh3D.hpp | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/SLA/Common.cpp b/src/libslic3r/SLA/Common.cpp index 3710bf3bed..a0fc2f3bb6 100644 --- a/src/libslic3r/SLA/Common.cpp +++ b/src/libslic3r/SLA/Common.cpp @@ -333,20 +333,23 @@ EigenMesh3D::hit_result EigenMesh3D::filter_hits( bool entry; }; std::vector hole_isects; + hole_isects.reserve(m_holes.size()); + + auto sf = s.cast(); + auto dirf = dir.cast(); // Collect hits on all holes, preserve information about entry/exit for (const sla::DrainHole& hole : m_holes) { std::array, 2> isects; - if (hole.get_intersections(s.cast(), - dir.cast(), isects)) { - hole_isects.emplace_back(isects[0].first, isects[0].second, true); - hole_isects.emplace_back(isects[1].first, isects[1].second, false); + if (hole.get_intersections(sf, dirf, isects)) { + if (isects[0].first > 0.f) hole_isects.emplace_back(isects[0].first, isects[0].second, true); + if (isects[1].first > 0.f) hole_isects.emplace_back(isects[1].first, isects[1].second, false); } } - // Remove hole hits behind the source - for (int i=0; i