Skip to content

Commit

Permalink
Merge pull request #1838 from hannobraun/cuboid
Browse files Browse the repository at this point in the history
Add `cuboid` example model
  • Loading branch information
hannobraun authored May 23, 2023
2 parents 33e3b8e + fa1031a commit 4a169f4
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 0 deletions.
11 changes: 11 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ members = [
"crates/fj-viewer",
"crates/fj-window",

"models/cuboid",

"tools/autolib",
"tools/automator",
"tools/cross-compiler",
Expand Down
18 changes: 18 additions & 0 deletions models/cuboid/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[package]
name = "cuboid"
version = "0.1.0"
edition = "2021"


[dependencies]
anyhow = "1.0.71"
itertools = "0.10.5"

[dependencies.fj-kernel]
path = "../../crates/fj-kernel"

[dependencies.fj-math]
path = "../../crates/fj-math"

[dependencies.fj-window]
path = "../../crates/fj-window"
52 changes: 52 additions & 0 deletions models/cuboid/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
use fj_kernel::{
algorithms::sweep::Sweep,
geometry::region::Region,
objects::{Cycle, HalfEdge, Sketch, Solid},
operations::{BuildCycle, BuildHalfEdge, Insert, UpdateCycle},
services::Services,
storage::Handle,
};
use fj_math::{Point, Vector};
use itertools::Itertools;

pub fn cuboid(x: f64, y: f64, z: f64) -> Handle<Solid> {
let mut services = Services::new();

let sketch = {
let exterior = {
#[rustfmt::skip]
let rectangle = [
[-x / 2., -y / 2.],
[ x / 2., -y / 2.],
[ x / 2., y / 2.],
[-x / 2., y / 2.],
];

let mut cycle = Cycle::empty();

let segments = rectangle
.into_iter()
.map(Point::from)
.circular_tuple_windows();

for (start, end) in segments {
let half_edge =
HalfEdge::line_segment([start, end], None, &mut services)
.insert(&mut services);

cycle = cycle.add_half_edges([half_edge]);
}

cycle.insert(&mut services)
};

let region = Region::new(exterior, Vec::new(), None);

Sketch::new([region]).insert(&mut services)
};

let surface = services.objects.surfaces.xy_plane();

let path = Vector::from([0., 0., z]);
(sketch, surface).sweep(path, &mut services)
}
16 changes: 16 additions & 0 deletions models/cuboid/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
use std::ops::Deref;

use fj_kernel::algorithms::{approx::Tolerance, triangulate::Triangulate};

fn main() -> anyhow::Result<()> {
let cuboid = cuboid::cuboid(3., 2., 1.);

// The tolerance makes no difference for this model, as there aren't any
// curves.
let tolerance = Tolerance::from_scalar(1.)?;

let mesh = (cuboid.deref(), tolerance).triangulate();
fj_window::run(mesh, false)?;

Ok(())
}

0 comments on commit 4a169f4

Please sign in to comment.