engine: geometry.stitch, imported surfaces stitched for meshing (#507)

geometry.stitch {name, surface, tolerance} records a stitch; the
surfaces keep what was read (TaggedSurface::original) and are stitched
again from it whenever a surface is imported, the model opened, or a
stitch added or deleted (geometry.stitch.delete). Opening a model also
warns about merges that no longer apply.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
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 12:07:16 -04:00
1 parent 12b3128f53
commit 4e6fd59409
15 files changed
+259 -8

No files matched your search

+4
View File
@@ -219,6 +219,8 @@ pub enum Collection {
Partition,
/// A face merge (`geometry.faces.merge`).
FaceMerge,
/// A stitch (`geometry.stitch`).
Stitch,
}
impl Collection {
@@ -245,6 +247,7 @@ impl Collection {
Collection::DatumPoint => "datum point",
Collection::Partition => "partition",
Collection::FaceMerge => "face merge",
Collection::Stitch => "stitch",
}
}
}
@@ -275,6 +278,7 @@ impl Session {
Collection::DatumPoint => Box::new(m.datums().iter().filter(|(_, d)| d.point().is_some()).map(|(n, _)| n.as_str())),
Collection::Partition => Box::new(m.partitions().iter().map(|p| p.name.as_str())),
Collection::FaceMerge => Box::new(m.face_merges().iter().map(|f| f.name.as_str())),
Collection::Stitch => Box::new(m.stitches().iter().map(|f| f.name.as_str())),
};
names.take(MAX_NAMES).map(str::to_string).collect()
}