Reconstruct constant-section meshes as parametric solids
This commit is contained in:
1 parent
417511367c
commit
df4c8a2994
19 files changed
+717
-12
No files matched your search
@@ -0,0 +1,44 @@
|
||||
use serde_json::json;
|
||||
use solvecraft_engine::doc::{Document, FeatureKind, MeshData};
|
||||
use solvecraft_engine::geom::Vec3;
|
||||
use solvecraft_engine::{Sel, Session};
|
||||
use solvecraft_ui_egui::scenario::Harness;
|
||||
|
||||
#[test]
|
||||
fn convert_mesh_uses_preselection_and_reopens_its_timeline_dialog() {
|
||||
let body = solvecraft_engine::kernel::box_solid(Vec3::ZERO, Vec3::new(10., 20., 30.)).unwrap();
|
||||
let mesh = body.tessellate(0.01).unwrap();
|
||||
let mut doc = Document::default();
|
||||
doc.add_feature(
|
||||
FeatureKind::MeshImport {
|
||||
file: "box.stl".into(),
|
||||
meshes: vec![MeshData {
|
||||
name: "Mesh".into(),
|
||||
positions: mesh.positions.iter().flat_map(|p| [p.x, p.y, p.z]).collect(),
|
||||
triangles: mesh.triangles.iter().flatten().copied().collect(),
|
||||
color: None,
|
||||
}],
|
||||
},
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let mut h = Harness::new();
|
||||
h.app.session = Session::new(doc);
|
||||
h.app.session.selection = vec![Sel::Body { name: "Mesh".into() }];
|
||||
h.step(&json!({"start":"mesh.convert"})).unwrap();
|
||||
let dialog = h.app.dialog.as_ref().unwrap();
|
||||
assert_eq!(dialog.inputs[0].items, vec![Sel::Body { name: "Mesh".into() }]);
|
||||
h.step(&json!({"widget":"OK"})).unwrap();
|
||||
assert!(h.app.dialog.is_none(), "{:?}", h.app.status);
|
||||
assert!(!h.app.session.model.state().body("Mesh").unwrap().body.is_mesh());
|
||||
let feature = h.app.session.doc.features.last().unwrap().id;
|
||||
let response = h.call("ui.editFeature", json!({"feature":feature}));
|
||||
assert_eq!(response["ok"], true, "{response}");
|
||||
let dialog = h.app.dialog.as_ref().unwrap();
|
||||
assert!(
|
||||
matches!(&dialog.kind,solvecraft_ui_egui::dialogs::Kind::Surface(solvecraft_ui_egui::dialogs_surface::Surf::ConvertMesh { tolerance }) if tolerance=="0.05 mm")
|
||||
);
|
||||
assert!(h.app.session.model.state().body("Mesh").unwrap().body.is_mesh());
|
||||
h.step(&json!({"key":"Escape"})).unwrap();
|
||||
assert!(!h.app.session.model.state().body("Mesh").unwrap().body.is_mesh());
|
||||
}
|
||||
Reference in new issue
Block a user