Files
solidcraft-upstream/crates/ui-egui/tests/mesh_conversion.rs
T

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());
}