Skip to content

Commit

Permalink
Merge pull request #2168 from hannobraun/color
Browse files Browse the repository at this point in the history
Preserve color when splitting face
  • Loading branch information
hannobraun authored Jan 17, 2024
2 parents edab216 + 5a9f2ea commit 76b902c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 22 deletions.
41 changes: 25 additions & 16 deletions crates/fj-core/src/operations/split/face.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use crate::{
operations::{
build::{BuildFace, BuildHalfEdge},
insert::Insert,
presentation::SetColor,
split::SplitEdge,
update::{
UpdateCycle, UpdateFace, UpdateHalfEdge, UpdateRegion, UpdateShell,
Expand Down Expand Up @@ -131,14 +132,18 @@ impl SplitFace for Shell {
services,
)
.update_region(|region| {
region
.update_exterior(|cycle| {
cycle
.add_half_edges(half_edges_b_to_c_inclusive)
.add_half_edges([dividing_half_edge_c_to_b])
.insert(services)
})
.insert(services)
let mut region = region.update_exterior(|cycle| {
cycle
.add_half_edges(half_edges_b_to_c_inclusive)
.add_half_edges([dividing_half_edge_c_to_b])
.insert(services)
});

if let Some(color) = face.region().color() {
region = region.set_color(color);
}

region.insert(services)
})
.insert(services);

Expand All @@ -152,14 +157,18 @@ impl SplitFace for Shell {
services,
)
.update_region(|region| {
region
.update_exterior(|cycle| {
cycle
.add_half_edges(half_edges_d_to_a_inclusive)
.add_half_edges([dividing_half_edge_a_to_d])
.insert(services)
})
.insert(services)
let mut region = region.update_exterior(|cycle| {
cycle
.add_half_edges(half_edges_d_to_a_inclusive)
.add_half_edges([dividing_half_edge_a_to_d])
.insert(services)
});

if let Some(color) = face.region().color() {
region = region.set_color(color);
}

region.insert(services)
})
.insert(services);

Expand Down
30 changes: 24 additions & 6 deletions models/color/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use fj::core::{
operations::{
insert::Insert,
presentation::SetColor,
split::SplitFace,
update::{UpdateFace, UpdateShell, UpdateSolid},
},
services::Services,
Expand All @@ -15,14 +16,31 @@ pub fn model(services: &mut Services) -> Handle<Solid> {

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

0 comments on commit 76b902c

Please sign in to comment.