diff --git a/Cargo.lock b/Cargo.lock index 117bdbee9..fd91ac569 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -686,7 +686,6 @@ checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" name = "cuboid" version = "0.1.0" dependencies = [ - "anyhow", "clap", "fj", ] @@ -1364,7 +1363,6 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" name = "holes" version = "0.1.0" dependencies = [ - "anyhow", "clap", "cuboid", "fj", @@ -3430,7 +3428,6 @@ dependencies = [ name = "spacer" version = "0.1.0" dependencies = [ - "anyhow", "clap", "fj", ] @@ -3474,7 +3471,6 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" name = "star" version = "0.1.0" dependencies = [ - "anyhow", "clap", "fj", ] diff --git a/crates/fj/src/instance.rs b/crates/fj/src/instance.rs index e650f9507..2a937ccfa 100644 --- a/crates/fj/src/instance.rs +++ b/crates/fj/src/instance.rs @@ -46,53 +46,8 @@ impl Instance { for<'r> (&'r M, Tolerance): Triangulate, for<'r> &'r M: BoundingVolume<3>, { - tracing_subscriber::registry() - .with(tracing_subscriber::fmt::layer()) - .with(tracing_subscriber::EnvFilter::from_default_env()) - .init(); - let args = Args::parse(); - - if !args.ignore_validation { - self.core.layers.validation.take_errors()?; - } - - let aabb = model.aabb(&self.core.layers.geometry).unwrap_or(Aabb { - min: Point::origin(), - max: Point::origin(), - }); - - let tolerance = match args.tolerance { - None => { - // Compute a reasonable default for the tolerance value. To do - // this, we just look at the smallest non-zero extent of the - // bounding box and divide that by some value. - - let mut min_extent = Scalar::MAX; - for extent in aabb.size().components { - if extent > Scalar::ZERO && extent < min_extent { - min_extent = extent; - } - } - - let tolerance = min_extent / Scalar::from_f64(1000.); - Tolerance::from_scalar(tolerance)? - } - Some(user_defined_tolerance) => user_defined_tolerance, - }; - - let tri_mesh = (model, tolerance).triangulate(&mut self.core); - - if let Some(path) = args.export { - export::export(tri_mesh.all_triangles(), &path)?; - return Ok(()); - } - - make_viewer_and_spawn_thread(|viewer| { - viewer.display_model(tri_mesh); - })?; - - Ok(()) + self.process_model_args(model, args) } /// Process a model with pre-parsed arguments diff --git a/models/cuboid/Cargo.toml b/models/cuboid/Cargo.toml index f5b334b92..aefaaeaf8 100644 --- a/models/cuboid/Cargo.toml +++ b/models/cuboid/Cargo.toml @@ -3,11 +3,6 @@ name = "cuboid" version = "0.1.0" edition = "2021" -[[bin]] -name = "cuboid" -path = "src/main.rs" - [dependencies] fj = { path = "../../crates/fj" } clap = { version = "4.5", features = ["derive"] } -anyhow = "1.0" diff --git a/models/cuboid/src/main.rs b/models/cuboid/src/main.rs index 5dd122db6..d0a883344 100644 --- a/models/cuboid/src/main.rs +++ b/models/cuboid/src/main.rs @@ -1,30 +1,28 @@ use clap::Parser; -use fj::{Args, Instance}; #[derive(Parser)] struct Parameters { - /// Size of the cuboid, as a comma-separated vector `x,y,z` - #[arg(long, value_parser = parse_vector_3, default_value = "1,1,1")] - size: [f64; 3], + /// Size of the cuboid along the x-axis + #[arg(long, default_value = "3.0")] + x: f64, + + /// Size of the cuboid along the y-axis + #[arg(long, default_value = "2.0")] + y: f64, + + /// Size of the cuboid along the z-axis + #[arg(long, default_value = "1.0")] + z: f64, #[command(flatten)] - fj: Args, + fj: fj::Args, } -fn parse_vector_3(arg: &str) -> anyhow::Result<[f64; 3]> { - Ok(arg - .split(',') - .map(str::parse) - .collect::, _>>()? - .as_slice() - .try_into()?) -} - -fn main() -> anyhow::Result<()> { - let mut fj = Instance::new(); +fn main() -> fj::Result { + let mut fj = fj::Instance::new(); let params = Parameters::parse(); - let model = cuboid::model(params.size, &mut fj.core); + let model = cuboid::model([params.x, params.y, params.z], &mut fj.core); fj.process_model_args(&model, params.fj)?; Ok(()) diff --git a/models/holes/Cargo.toml b/models/holes/Cargo.toml index a51f67b6d..98c3a2420 100644 --- a/models/holes/Cargo.toml +++ b/models/holes/Cargo.toml @@ -3,12 +3,7 @@ name = "holes" version = "0.1.0" edition = "2021" -[[bin]] -name = "holes" -path = "src/main.rs" - [dependencies] fj = { path = "../../crates/fj" } clap = { version = "4.5", features = ["derive"] } -anyhow = "1.0" cuboid = { path = "../cuboid" } diff --git a/models/holes/src/lib.rs b/models/holes/src/lib.rs index 9724d1ffe..013cbdef8 100644 --- a/models/holes/src/lib.rs +++ b/models/holes/src/lib.rs @@ -13,7 +13,7 @@ pub fn model(radius: impl Into, core: &mut fj::core::Core) -> Solid { let radius = radius.into(); let size = radius * 4.; - let cuboid = ::cuboid::model([size * 2., size, size], core); + let cuboid = cuboid::model([size * 2., size, size], core); cuboid.update_shell( cuboid.shells().only(), diff --git a/models/holes/src/main.rs b/models/holes/src/main.rs index 2c2e83f34..bf32325f5 100644 --- a/models/holes/src/main.rs +++ b/models/holes/src/main.rs @@ -1,6 +1,4 @@ -use anyhow::Result; use clap::Parser; -use fj::{Args, Instance}; #[derive(Parser)] struct Parameters { @@ -9,11 +7,11 @@ struct Parameters { radius: f64, #[command(flatten)] - fj: Args, + fj: fj::Args, } -fn main() -> Result<()> { - let mut fj = Instance::new(); +fn main() -> fj::Result { + let mut fj = fj::Instance::new(); let params = Parameters::parse(); let model = holes::model(params.radius, &mut fj.core); diff --git a/models/spacer/Cargo.toml b/models/spacer/Cargo.toml index 1a321051b..6196e97c0 100644 --- a/models/spacer/Cargo.toml +++ b/models/spacer/Cargo.toml @@ -3,11 +3,6 @@ name = "spacer" version = "0.1.0" edition = "2021" -[[bin]] -name = "spacer" -path = "src/main.rs" - [dependencies] fj = { path = "../../crates/fj" } clap = { version = "4.5", features = ["derive"] } -anyhow = "1.0" diff --git a/models/spacer/src/main.rs b/models/spacer/src/main.rs index 26d0bc78b..7ec06b34e 100644 --- a/models/spacer/src/main.rs +++ b/models/spacer/src/main.rs @@ -1,6 +1,4 @@ -use anyhow::Result; use clap::Parser; -use fj::{Args, Instance}; #[derive(Parser)] struct Parameters { @@ -17,11 +15,11 @@ struct Parameters { height: f64, #[command(flatten)] - fj: Args, + fj: fj::Args, } -fn main() -> Result<()> { - let mut fj = Instance::new(); +fn main() -> fj::Result { + let mut fj = fj::Instance::new(); let params = Parameters::parse(); let model = spacer::model( diff --git a/models/star/Cargo.toml b/models/star/Cargo.toml index c205fd4f7..738ef3b92 100644 --- a/models/star/Cargo.toml +++ b/models/star/Cargo.toml @@ -3,11 +3,6 @@ name = "star" version = "0.1.0" edition = "2021" -[[bin]] -name = "star" -path = "src/main.rs" - [dependencies] fj = { path = "../../crates/fj" } clap = { version = "4.5", features = ["derive"] } -anyhow = "1.0" diff --git a/models/star/src/main.rs b/models/star/src/main.rs index d44ea64e1..eb6da2287 100644 --- a/models/star/src/main.rs +++ b/models/star/src/main.rs @@ -1,6 +1,4 @@ -use anyhow::Result; use clap::Parser; -use fj::{Args, Instance}; #[derive(Parser)] struct Parameters { @@ -21,11 +19,11 @@ struct Parameters { height: f64, #[command(flatten)] - fj: Args, + fj: fj::Args, } -fn main() -> Result<()> { - let mut fj = Instance::new(); +fn main() -> fj::Result { + let mut fj = fj::Instance::new(); let params = Parameters::parse(); let model = star::model(