From 5a9f2ead6ed6cc800f7acf2850835d24c80e8acf Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 17 Jan 2024 10:44:29 +0100 Subject: [PATCH] Split colored face in model --- models/color/src/lib.rs | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/models/color/src/lib.rs b/models/color/src/lib.rs index 0bae8de02..565a87b7d 100644 --- a/models/color/src/lib.rs +++ b/models/color/src/lib.rs @@ -3,6 +3,7 @@ use fj::core::{ operations::{ insert::Insert, presentation::SetColor, + split::SplitFace, update::{UpdateFace, UpdateShell, UpdateSolid}, }, services::Services, @@ -15,14 +16,31 @@ pub fn model(services: &mut Services) -> Handle { cuboid .update_shell(cuboid.shells().only(), |shell| { - shell - .update_face(shell.faces().first(), |face| { - face.update_region(|region| { - region.set_color([0., 1., 0.]).insert(services) - }) - .insert(services) + let shell = shell.update_face(shell.faces().first(), |face| { + face.update_region(|region| { + region.set_color([0., 1., 0.]).insert(services) }) .insert(services) + }); + + // Split colored face, to make sure the same color is applied to the + // two derived faces. + let shell = { + let face = shell.faces().first(); + let line = { + let cycle = face.region().exterior(); + + [ + (cycle.half_edges().nth(0).unwrap(), [0.2]), + (cycle.half_edges().nth(2).unwrap(), [0.2]), + ] + }; + + let (shell, _) = shell.split_face(face, line, services); + shell + }; + + shell.insert(services) }) .insert(services) }