mesh: fixed patch vertex matching takes the map entry once

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-16 10:55:27 -04:00
1 parent 6f07e4c09c
commit 7b7d38fabd
1 file changed
+7 -12
+7 -12
View File
@@ -78,15 +78,8 @@ impl<'a> Grid<'a> {
/// The node after `p` on the grid line coming from `q`: the one neighbour of `p` in no quad
/// with the edge `q`–`p`.
fn straight_on(&self, q: u32, p: u32) -> Option<u32> {
let beside: BTreeSet<u32> = self
.quads_at
.get(p as usize)
.into_iter()
.flatten()
.map(|&k| self.quad(k))
.filter(|quad| quad.contains(&q))
.flatten()
.collect();
let beside: BTreeSet<u32> =
self.quads_at.get(p as usize).into_iter().flatten().map(|&k| self.quad(k)).filter(|quad| quad.contains(&q)).flatten().collect();
let mut on = self.nbrs.get(p as usize)?.iter().filter(|r| **r != q && !beside.contains(r));
let r = on.next()?;
on.next().is_none().then_some(*r)
@@ -207,10 +200,12 @@ impl<'a> Grid<'a> {
}
}
for &v in vertices {
if !node_of.contains_key(&v) {
let nearest = (0..self.patch.nodes.len() as u32).filter(|n| !taken.contains(n)).min_by(|x, y| dist(node(*x), at(v)).total_cmp(&dist(node(*y), at(v))));
if let std::collections::btree_map::Entry::Vacant(slot) = node_of.entry(v) {
let nearest = (0..self.patch.nodes.len() as u32)
.filter(|n| !taken.contains(n))
.min_by(|x, y| dist(node(*x), at(v)).total_cmp(&dist(node(*y), at(v))));
if let Some(n) = nearest {
node_of.insert(v, n);
slot.insert(n);
taken.insert(n);
}
}