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