fix(ui): Extrude and Revolve leave Profiles empty when the last sketch is already used (#684) (#705)
With nothing selected, Extrude and Revolve no longer pre-pick the last sketch's profile when a feature already builds from it, so OK no longer cuts into a part nobody picked. Fixes #684. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4ff8f3e14d
commit
2c4d197bf4
2 files changed
+104
-3
No files matched your search
@@ -572,7 +572,8 @@ impl Dialog {
|
||||
_ => None,
|
||||
});
|
||||
}
|
||||
// With nothing pre-selected, a single profile in the sketch being used is taken.
|
||||
// With nothing pre-selected, a single profile in the sketch being used is taken (#684:
|
||||
// not one a feature already builds from).
|
||||
if matches!(d.kind, Kind::Extrude { .. } | Kind::Revolve { .. })
|
||||
&& let Some(inp) = d.inputs.first_mut()
|
||||
&& inp.items.is_empty()
|
||||
@@ -785,16 +786,25 @@ impl Dialog {
|
||||
}
|
||||
}
|
||||
|
||||
/// Profiles of the sketch a feature would use (active, else the last), when there is just one.
|
||||
/// Profiles of the sketch a feature would use, when there is just one: the active sketch's, else
|
||||
/// the last sketch's while no feature builds from it yet. A used profile (a cube's sketch on its
|
||||
/// bottom face) is only taken when it is picked.
|
||||
fn default_profiles(s: &Session) -> Vec<Sel> {
|
||||
let st = s.world_state();
|
||||
let sid = s.active_sketch.or_else(|| s.doc.features.iter().rev().find(|f| matches!(f.kind, FeatureKind::Sketch { .. })).map(|f| f.id));
|
||||
let sid = s.active_sketch.or_else(|| {
|
||||
s.doc.features.iter().rev().find(|f| matches!(f.kind, FeatureKind::Sketch { .. })).map(|f| f.id).filter(|&id| !profiles_used(s, id))
|
||||
});
|
||||
match sid.and_then(|id| st.sketch(id).map(|ss| (id, ss.profiles.len()))) {
|
||||
Some((id, 1)) => vec![Sel::Profile { sketch: id, index: 0 }],
|
||||
_ => Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Does a feature build from this sketch's profiles (extrude, revolve, sweep, loft, emboss…)?
|
||||
fn profiles_used(s: &Session, sketch: u64) -> bool {
|
||||
s.doc.features.iter().any(|f| f.kind.profile_sels().iter().any(|(id, _)| *id == sketch))
|
||||
}
|
||||
|
||||
/// The plane of a planar body face: (point on it, unit normal).
|
||||
pub fn planar_face(s: &Session, body: &str, face: usize) -> Option<(Vec3, Vec3)> {
|
||||
let st = s.world_state();
|
||||
|
||||
Reference in new issue
Block a user