engine: geometry.defeature takes features out of the design for meshing (#433)

Suppresses the SolidCraft features named (holes filled, fillets and chamfers back to
their sharp edges, bosses removed) and rebuilds the design; a feature that cannot be
suppressed alone is merged into its neighbour for meshing only. Kept in the model,
replayed on open, undoable; geometry.defeature.delete turns them back on.

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 17:43:42 -04:00
1 parent 3f0cae70a2
commit f297ffca3a
13 files changed
+284 -9

No files matched your search

+4
View File
@@ -225,6 +225,8 @@ pub enum Collection {
FaceSplit,
/// A size control (`mesh.size.set`).
SizeControl,
/// A defeature (`geometry.defeature`).
Defeature,
}
impl Collection {
@@ -254,6 +256,7 @@ impl Collection {
Collection::Stitch => "stitch",
Collection::FaceSplit => "face split",
Collection::SizeControl => "size control",
Collection::Defeature => "defeature",
}
}
}
@@ -287,6 +290,7 @@ impl Session {
Collection::Stitch => Box::new(m.stitches().iter().map(|f| f.name.as_str())),
Collection::FaceSplit => Box::new(m.face_splits().iter().map(|f| f.name.as_str())),
Collection::SizeControl => Box::new(m.size_controls().keys().map(String::as_str)),
Collection::Defeature => Box::new(m.defeatures().iter().map(|f| f.name.as_str())),
};
names.take(MAX_NAMES).map(str::to_string).collect()
}