From b1844cc2a222034a101a70db51a714c1b0a9a242 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 13 Dec 2024 17:25:47 +0800 Subject: [PATCH] FIX: tree support may miss contact points along overhang contours We use EdgeCache to sample contact points along overhang contours. However, the EdgeCache misses the last edge if the polygon is not closed. jira: STUDIO-9179 Change-Id: Id06b565b12f513e753a66135c74eab60979ea612 --- src/libnest2d/include/libnest2d/placers/nfpplacer.hpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index c180d780e..785178d83 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -183,6 +183,11 @@ template class EdgeCache { contour_.full_distance += length(contour_.emap.back()); contour_.distances.emplace_back(contour_.full_distance); } + if (*sl::cbegin(sh)!=*sl::rcbegin(sh)) { + contour_.emap.emplace_back(*std::prev(endit), *sl::cbegin(sh)); + contour_.full_distance += length(contour_.emap.back()); + contour_.distances.emplace_back(contour_.full_distance); + } } for(auto& h : shapelike::holes(sh)) { // For the holes @@ -198,6 +203,11 @@ template class EdgeCache { hc.full_distance += length(hc.emap.back()); hc.distances.emplace_back(hc.full_distance); } + if (*sl::cbegin(h) != *sl::rcbegin(h)) { + hc.emap.emplace_back(*std::prev(endit), *sl::cbegin(h)); + hc.full_distance += length(hc.emap.back()); + hc.distances.emplace_back(hc.full_distance); + } holes_.emplace_back(std::move(hc)); }