From e9801e4528874d2be956b0fa948550a8aa8da8b9 Mon Sep 17 00:00:00 2001 From: jyviko <2501648+jyviko@users.noreply.github.com> Date: Thu, 15 Oct 2026 23:30:48 -0400 Subject: [PATCH] ui: draw the marked elements in the error colour Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo --- crates/ui-egui/src/lib.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/crates/ui-egui/src/lib.rs b/crates/ui-egui/src/lib.rs index 0422cb4..28586a2 100644 --- a/crates/ui-egui/src/lib.rs +++ b/crates/ui-egui/src/lib.rs @@ -1086,6 +1086,11 @@ impl ModelApp { Some(p) => results::scene(p, style, show, &t), None => scene::build(&self.display.1, style, show, &t), }; + // The elements Mark Bad Elements marked, in the error colour over the element faces. + if self.plot.1.is_none() && show.mesh && style != scene::Style::Wireframe { + let marked = fieldcraft_engine::view::marked(&self.session); + fieldcraft_engine::view::mark(&mut s, &self.display.1, &marked, theme::rgb(t.error)); + } let mut datums = Aabb3::EMPTY; if show.geometry && self.plot.1.is_none() { datums = scene::datums(&mut s, &self.session, &self.display.1.bounds, self.selected_datum().as_deref(), &t); @@ -2432,6 +2437,23 @@ mod tests { assert!(!status.error && !status.text.contains('{')); } + /// Mark Bad Elements draws the marked elements' faces in the error colour, and only while + /// they are marked. + #[test] + fn marked_elements_draw_in_the_error_colour() { + let mut app = ModelApp::new(Session::default()); + app.run_script(&fieldcraft_engine::sample::script()).unwrap(); + let error = theme::rgb(theme::Tokens::get(app.ui.dark).error); + let red = |app: &mut ModelApp| app.scene().1.tris.iter().filter(|t| t.color == error).count(); + assert_eq!(red(&mut app), 0); + let some = app.session.model.elements().keys().take(3).copied().collect::>(); + app.run("mesh.quality.mark", json!({"elements": some, "limits": {"scaled_jacobian": 1.5}})).unwrap(); + let marked = red(&mut app); + assert!(marked > 0 && marked < app.scene().1.tris.len(), "{marked}"); + app.run("mesh.quality.mark", json!({})).unwrap(); + assert_eq!(red(&mut app), 0); + } + #[test] fn starting_a_command_opens_its_form_and_running_it_closes_the_form() { let mut app = ModelApp::new(Session::default());