45 lines
2.0 KiB
Rust
45 lines
2.0 KiB
Rust
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());
|
|
}
|