From dd3682c8acf8c45ddbbfa4243d22dc5b0d7702a1 Mon Sep 17 00:00:00 2001 From: epernod Date: Tue, 7 Jan 2025 00:59:08 +0100 Subject: [PATCH] Backup work on snapping with successive point snap/not snap --- .../TriangleCut_benchmark-03_snapping.scn | 2 +- ...t_benchmark-03_snapping.scn.qglviewer.view | 2 ++ .../Controllers/TriangleCuttingController.inl | 26 +++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn.qglviewer.view diff --git a/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn b/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn index 7dbf34d..731a0cb 100644 --- a/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn +++ b/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn @@ -48,7 +48,7 @@ - + diff --git a/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn.qglviewer.view b/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn.qglviewer.view new file mode 100644 index 0000000..088c644 --- /dev/null +++ b/scenes/TopologyBenchmarks/TriangleCut_benchmark-03_snapping.scn.qglviewer.view @@ -0,0 +1,2 @@ +-0.740008 44.5146 -4.62505 +-0.707107 6.93889e-18 1.14281e-17 0.707107 diff --git a/src/Tearing/Controllers/TriangleCuttingController.inl b/src/Tearing/Controllers/TriangleCuttingController.inl index 1046fb8..70d800e 100644 --- a/src/Tearing/Controllers/TriangleCuttingController.inl +++ b/src/Tearing/Controllers/TriangleCuttingController.inl @@ -499,12 +499,32 @@ void TriangleCuttingController::processCut() std::vector >& PTAs = PTA_map[triIds[i]]; PTAs.push_back(PTA); } + + std::set psnap; + for (unsigned int i = 0; i < edges_list.size(); ++i) + { + const Topology::Edge& edge = edges[edges_list[i]]; + if (coords_list[i] > snapThreshold) + psnap.insert(edge[0]); + else if (1.0 - coords_list[i] > snapThreshold) + psnap.insert(edge[1]); + } + std::cout << "psnap: " << psnap << std::endl; - // create PointToAdd from edges for (unsigned int i = 0; i < edges_list.size(); ++i) { const Topology::Edge& edge = edges[edges_list[i]]; + if (psnap.find(edge[0]) != psnap.end()) + coords_list[i] = 1.0; + else if (psnap.find(edge[1]) != psnap.end()) + coords_list[i] = 0.0; + } + // create PointToAdd from edges + for (unsigned int i = 0; i < edges_list.size(); ++i) + { + const Topology::Edge& edge = edges[edges_list[i]]; + std::cout << "Edge: " << edges_list[i] << " | " << edge << " | " << coords_list[i] << std::endl; type::vector _coefs = { coords_list[i], 1.0 - coords_list[i] }; type::vector _ancestors = { edge[0], edge[1] }; @@ -516,18 +536,20 @@ void TriangleCuttingController::processCut() auto itM = cloneMap.find(PTA->m_idPoint); if (itM == cloneMap.end()) { + std::cout << "Edge: " << edges_list[i] << " snap PTA: " << nbrPoints << std::endl; std::cout << "snap2: " << PTA->m_idPoint << " -> " << PTA->m_idClone << std::endl; cloneMap[PTA->m_idPoint] = PTA->m_idClone; m_pointsToAdd.push_back(PTA); nbrPoints++; } else { - std::cout << " pass snap: " << nbrPoints << std::endl; + std::cout << "Edge: " << edges_list[i] << " pass snap: " << PTA->m_idPoint << " -> " << PTA->m_idClone << std::endl; PTA = m_pointsToAdd.back(); } } else { + std::cout << "Edge: " << edges_list[i] << " Add PTA: " << nbrPoints << std::endl; m_pointsToAdd.push_back(PTA); nbrPoints = nbrPoints +2; }