Colours in exports from materials and appearances; Appearance command

- Bodies export (STEP, 3MF) in the colour they are shown in: an appearance,
  else the physical material's look, else the colour the body was imported
  with (Document::body_color / painted). Physical materials used to export
  no colour at all.
- AppearanceCommand (Modify): a colour per body ("#rrggbb" or [r, g, b];
  null follows the material again), kept in the design and across renames.
- Material looks move to solvecraft-doc (material_color); the viewport draws
  appearance, material or imported colour, as exported.
- Engine test: brass and red ABS bodies export, re-import with their RGB, and
  keep it through open and export again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
This commit is contained in:
bherbruckandClaude Opus 5.5 committed 2026-10-08 08:11:28 +00:00
1 parent 578b35e88a
commit ae4570ed39
8 files changed
+200 -86

No files matched your search

+1 -16
View File
@@ -262,22 +262,7 @@ impl Tokens {
/// How a physical material looks (the default appearance follows the material).
pub fn material_color(name: &str) -> Option<Color32> {
Some(match name {
"Steel" => Color32::from_rgb(158, 164, 172),
"Stainless Steel" => Color32::from_rgb(186, 191, 198),
"Aluminum" => Color32::from_rgb(204, 208, 214),
"Brass" => Color32::from_rgb(208, 172, 88),
"Copper" => Color32::from_rgb(204, 122, 80),
"Titanium" => Color32::from_rgb(150, 148, 158),
"Cast Iron" => Color32::from_rgb(104, 104, 110),
"ABS Plastic" => Color32::from_rgb(222, 222, 216),
"PLA" => Color32::from_rgb(110, 160, 222),
"Nylon" => Color32::from_rgb(236, 230, 214),
"Polycarbonate" => Color32::from_rgb(196, 216, 232),
"Oak" => Color32::from_rgb(190, 146, 92),
"Glass" => Color32::from_rgb(170, 208, 218),
_ => return None,
})
solvecraft_engine::doc::material_color(name).map(|[r, g, b]| Color32::from_rgb(r, g, b))
}
/// Switch themes (the visuals follow on the next [`apply`]).