Large STEP imports: no more multi-minute hang, shared STEP text, cancel and progress (#925)

This commit is contained in:
bherbruck authored and GitHub committed 2026-10-14 05:01:12 -04:00
1 parent dfbf7dd6a8
commit 2f91338d3d
18 files changed
+525 -45

No files matched your search

+1 -1
View File
@@ -319,7 +319,7 @@ pub(super) fn paste(
bodies.insert(body.name.clone(), new_name.clone());
let feature_name = unique(&format!("{} Base", body.name), &mut used);
let id = scratch.doc_mut().add_feature(
FeatureKind::Import { file: format!("{} independent base", body.name), step, components: Vec::new() },
FeatureKind::Import { file: format!("{} independent base", body.name), step: step.into(), components: Vec::new() },
Some(&feature_name),
)?;
if let Some(f) = scratch.doc_mut().feature_mut(id) {
@@ -71,7 +71,10 @@ fn certified_annulus_side_rows_follow_radius_edits_and_clone() {
fn imported(session: &mut Session, step: String, name: &str) -> u64 {
let owner = session.active_component;
let id = session.doc_mut().add_feature(FeatureKind::Import { file: "fixture.step".into(), step, components: vec![] }, Some(name)).unwrap();
let id = session
.doc_mut()
.add_feature(FeatureKind::Import { file: "fixture.step".into(), step: step.into(), components: vec![] }, Some(name))
.unwrap();
let feature = session.doc_mut().feature_mut(id).unwrap();
feature.body_names = vec![name.into()];
feature.component = owner;
@@ -262,8 +265,8 @@ fn certified_import_payload_binding_roundtrip_clone_and_replacement_refusal() {
assert_eq!(painted_radius(&s, "Imported", 10.), pieces);
// Identical geometry, entity IDs and item IDs, but a replaced embedded payload.
let FeatureKind::Import { step: payload, .. } = &mut s.doc_mut().feature_mut(source).unwrap().kind else { panic!() };
*payload = step.replace("certificate fixture", "replacement fixture");
assert_ne!(*payload, step);
*payload = step.replace("certificate fixture", "replacement fixture").into();
assert_ne!(&**payload, step.as_str());
s.refresh();
assert!(s.doc.face_colors(s.model.state().body("Imported").unwrap()).is_empty());
assert_eq!(painted_radius(&s, "Imported (copy)", 10.), pieces);