From 517b7a911c6abeb254db1a414114efab4d7cebf5 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Fri, 9 Oct 2026 12:33:38 +0000 Subject: [PATCH] Split Face cuts with the sketch's exact segments (lines and arcs, kernel::SplitTool::Curves now takes Seg2); a test fillet gets its style Co-Authored-By: Claude Opus 5.5 --- crates/doc/src/eval.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/doc/src/eval.rs b/crates/doc/src/eval.rs index ed61e36f..86158b33 100644 --- a/crates/doc/src/eval.rs +++ b/crates/doc/src/eval.rs @@ -2453,10 +2453,11 @@ fn eval_feature(doc: &Document, vals: &BTreeMap, f: &Feature, st: } (None, Some(sid)) => { let ss = st.sketch(*sid).ok_or_else(|| DocError::Unknown(format!("sketch {sid}")))?; - let curves: Vec> = (0..ss.sketch.curves.len()) + // Each curve's exact segments (lines and arcs split by their own plane and cylinder). + let curves: Vec> = (0..ss.sketch.curves.len()) .filter(|ci| ss.sketch.curves.get(*ci).is_some_and(|c| !c.construction)) - .map(|ci| ss.sketch.polyline(ci)) - .filter(|pl| pl.len() >= 2) + .map(|ci| ss.sketch.segs(ci)) + .filter(|segs| !segs.is_empty()) .collect(); if curves.is_empty() { return Err(DocError::Invalid(format!("sketch `{}` has no curves to split with", ss.name))); @@ -2854,7 +2855,11 @@ mod chain_tests { None, ) .unwrap(); - doc.add_feature(FeatureKind::Fillet { edges: vec![Vec3::new(20.0, 0.0, 20.0)], radius: "4".into(), body: None }, None).unwrap(); + doc.add_feature( + FeatureKind::Fillet { edges: vec![Vec3::new(20.0, 0.0, 20.0)], radius: "4".into(), body: None, style: crate::FilletStyle::Constant }, + None, + ) + .unwrap(); let mut m = Model::new(); m.evaluate(&doc); let st = m.state();