From 49f8de6924eccc0e53e80c5c76c834e0b29ab321 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 16:38:18 +0100 Subject: [PATCH 01/16] Rename `kernel::shape` to `operations` The near-collision with `kernel::shape` has always been unfortunate, so renaming one of them is a good idea. I think `operations` is a good name for the module, as that's what it's focused on: Translating the operations from the `fj` crate into something the kernel understands. --- fj-app/src/kernel/mod.rs | 2 +- fj-app/src/kernel/{shapes => operations}/circle.rs | 0 fj-app/src/kernel/{shapes => operations}/difference_2d.rs | 0 fj-app/src/kernel/{shapes => operations}/group.rs | 0 fj-app/src/kernel/{shapes => operations}/mod.rs | 0 fj-app/src/kernel/{shapes => operations}/sketch.rs | 0 fj-app/src/kernel/{shapes => operations}/sweep.rs | 0 fj-app/src/kernel/{shapes => operations}/transform.rs | 0 fj-app/src/main.rs | 2 +- 9 files changed, 2 insertions(+), 2 deletions(-) rename fj-app/src/kernel/{shapes => operations}/circle.rs (100%) rename fj-app/src/kernel/{shapes => operations}/difference_2d.rs (100%) rename fj-app/src/kernel/{shapes => operations}/group.rs (100%) rename fj-app/src/kernel/{shapes => operations}/mod.rs (100%) rename fj-app/src/kernel/{shapes => operations}/sketch.rs (100%) rename fj-app/src/kernel/{shapes => operations}/sweep.rs (100%) rename fj-app/src/kernel/{shapes => operations}/transform.rs (100%) diff --git a/fj-app/src/kernel/mod.rs b/fj-app/src/kernel/mod.rs index 2635f15f3..d6a5cfc95 100644 --- a/fj-app/src/kernel/mod.rs +++ b/fj-app/src/kernel/mod.rs @@ -78,6 +78,6 @@ pub mod algorithms; pub mod geometry; +pub mod operations; pub mod shape; -pub mod shapes; pub mod topology; diff --git a/fj-app/src/kernel/shapes/circle.rs b/fj-app/src/kernel/operations/circle.rs similarity index 100% rename from fj-app/src/kernel/shapes/circle.rs rename to fj-app/src/kernel/operations/circle.rs diff --git a/fj-app/src/kernel/shapes/difference_2d.rs b/fj-app/src/kernel/operations/difference_2d.rs similarity index 100% rename from fj-app/src/kernel/shapes/difference_2d.rs rename to fj-app/src/kernel/operations/difference_2d.rs diff --git a/fj-app/src/kernel/shapes/group.rs b/fj-app/src/kernel/operations/group.rs similarity index 100% rename from fj-app/src/kernel/shapes/group.rs rename to fj-app/src/kernel/operations/group.rs diff --git a/fj-app/src/kernel/shapes/mod.rs b/fj-app/src/kernel/operations/mod.rs similarity index 100% rename from fj-app/src/kernel/shapes/mod.rs rename to fj-app/src/kernel/operations/mod.rs diff --git a/fj-app/src/kernel/shapes/sketch.rs b/fj-app/src/kernel/operations/sketch.rs similarity index 100% rename from fj-app/src/kernel/shapes/sketch.rs rename to fj-app/src/kernel/operations/sketch.rs diff --git a/fj-app/src/kernel/shapes/sweep.rs b/fj-app/src/kernel/operations/sweep.rs similarity index 100% rename from fj-app/src/kernel/shapes/sweep.rs rename to fj-app/src/kernel/operations/sweep.rs diff --git a/fj-app/src/kernel/shapes/transform.rs b/fj-app/src/kernel/operations/transform.rs similarity index 100% rename from fj-app/src/kernel/shapes/transform.rs rename to fj-app/src/kernel/operations/transform.rs diff --git a/fj-app/src/main.rs b/fj-app/src/main.rs index 572ff6bce..08fc99086 100644 --- a/fj-app/src/main.rs +++ b/fj-app/src/main.rs @@ -30,7 +30,7 @@ use crate::{ camera::Camera, config::Config, graphics::{DrawConfig, Renderer}, - kernel::shapes::ToShape as _, + kernel::operations::ToShape as _, mesh::MeshMaker, model::Model, window::Window, From 48db26569a637ada1ddb6617fabc306e58a98e06 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 16:42:20 +0100 Subject: [PATCH 02/16] Move `kernel::operations` to crate root I'm about to extract the kernel into a separate crate, and I don't want this module to be a part of it. Nothing else in the kernel depends on it, and it's a different thing, I think: It's the connection between the kernel and the operations in the `fj` crate. It's totally conceivable that someone would want to use the kernel, without wanting to be bound to the `fj` operations. So both from a software architecture and from a use case perspective, I think this module should be a separate thing. --- fj-app/src/kernel/mod.rs | 1 - fj-app/src/main.rs | 3 ++- fj-app/src/{kernel => }/operations/circle.rs | 0 fj-app/src/{kernel => }/operations/difference_2d.rs | 0 fj-app/src/{kernel => }/operations/group.rs | 0 fj-app/src/{kernel => }/operations/mod.rs | 2 +- fj-app/src/{kernel => }/operations/sketch.rs | 0 fj-app/src/{kernel => }/operations/sweep.rs | 0 fj-app/src/{kernel => }/operations/transform.rs | 0 9 files changed, 3 insertions(+), 3 deletions(-) rename fj-app/src/{kernel => }/operations/circle.rs (100%) rename fj-app/src/{kernel => }/operations/difference_2d.rs (100%) rename fj-app/src/{kernel => }/operations/group.rs (100%) rename fj-app/src/{kernel => }/operations/mod.rs (98%) rename fj-app/src/{kernel => }/operations/sketch.rs (100%) rename fj-app/src/{kernel => }/operations/sweep.rs (100%) rename fj-app/src/{kernel => }/operations/transform.rs (100%) diff --git a/fj-app/src/kernel/mod.rs b/fj-app/src/kernel/mod.rs index d6a5cfc95..9a647f743 100644 --- a/fj-app/src/kernel/mod.rs +++ b/fj-app/src/kernel/mod.rs @@ -78,6 +78,5 @@ pub mod algorithms; pub mod geometry; -pub mod operations; pub mod shape; pub mod topology; diff --git a/fj-app/src/main.rs b/fj-app/src/main.rs index 08fc99086..d1cc8aa1e 100644 --- a/fj-app/src/main.rs +++ b/fj-app/src/main.rs @@ -6,6 +6,7 @@ mod input; mod kernel; mod mesh; mod model; +mod operations; mod window; use std::collections::HashSet; @@ -30,9 +31,9 @@ use crate::{ camera::Camera, config::Config, graphics::{DrawConfig, Renderer}, - kernel::operations::ToShape as _, mesh::MeshMaker, model::Model, + operations::ToShape as _, window::Window, }; diff --git a/fj-app/src/kernel/operations/circle.rs b/fj-app/src/operations/circle.rs similarity index 100% rename from fj-app/src/kernel/operations/circle.rs rename to fj-app/src/operations/circle.rs diff --git a/fj-app/src/kernel/operations/difference_2d.rs b/fj-app/src/operations/difference_2d.rs similarity index 100% rename from fj-app/src/kernel/operations/difference_2d.rs rename to fj-app/src/operations/difference_2d.rs diff --git a/fj-app/src/kernel/operations/group.rs b/fj-app/src/operations/group.rs similarity index 100% rename from fj-app/src/kernel/operations/group.rs rename to fj-app/src/operations/group.rs diff --git a/fj-app/src/kernel/operations/mod.rs b/fj-app/src/operations/mod.rs similarity index 98% rename from fj-app/src/kernel/operations/mod.rs rename to fj-app/src/operations/mod.rs index e7b00773d..7e86ea2ef 100644 --- a/fj-app/src/kernel/operations/mod.rs +++ b/fj-app/src/operations/mod.rs @@ -8,7 +8,7 @@ pub mod transform; use fj_debug::DebugInfo; use fj_math::{Aabb, Scalar}; -use super::shape::Shape; +use crate::kernel::shape::Shape; /// Implemented by all shapes pub trait ToShape { diff --git a/fj-app/src/kernel/operations/sketch.rs b/fj-app/src/operations/sketch.rs similarity index 100% rename from fj-app/src/kernel/operations/sketch.rs rename to fj-app/src/operations/sketch.rs diff --git a/fj-app/src/kernel/operations/sweep.rs b/fj-app/src/operations/sweep.rs similarity index 100% rename from fj-app/src/kernel/operations/sweep.rs rename to fj-app/src/operations/sweep.rs diff --git a/fj-app/src/kernel/operations/transform.rs b/fj-app/src/operations/transform.rs similarity index 100% rename from fj-app/src/kernel/operations/transform.rs rename to fj-app/src/operations/transform.rs From eccff5d725a352bbee200a897f41da317cf4f49c Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 16:59:52 +0100 Subject: [PATCH 03/16] Extract `fj-kernel` from `fj-app` --- Cargo.lock | 27 +++++++++++----- Cargo.toml | 2 ++ fj-app/Cargo.toml | 9 +++--- fj-app/src/main.rs | 1 - fj-app/src/operations/circle.rs | 5 ++- fj-app/src/operations/difference_2d.rs | 5 ++- fj-app/src/operations/group.rs | 5 ++- fj-app/src/operations/mod.rs | 3 +- fj-app/src/operations/sketch.rs | 5 ++- fj-app/src/operations/sweep.rs | 3 +- fj-app/src/operations/transform.rs | 3 +- fj-kernel/Cargo.toml | 31 +++++++++++++++++++ .../src}/algorithms/approximation.rs | 4 +-- .../src}/algorithms/mod.rs | 0 .../src}/algorithms/sweep.rs | 4 +-- .../src}/algorithms/triangulation.rs | 2 +- .../src}/geometry/curves/circle.rs | 0 .../src}/geometry/curves/line.rs | 0 .../src}/geometry/curves/mod.rs | 0 .../kernel => fj-kernel/src}/geometry/mod.rs | 0 .../src}/geometry/points.rs | 0 .../src}/geometry/surfaces/mod.rs | 2 +- .../src}/geometry/surfaces/swept.rs | 6 ++-- .../src/kernel/mod.rs => fj-kernel/src/lib.rs | 0 .../src}/shape/geometry.rs | 2 +- .../kernel => fj-kernel/src}/shape/handle.rs | 0 .../kernel => fj-kernel/src}/shape/iter.rs | 0 .../src/kernel => fj-kernel/src}/shape/mod.rs | 0 .../src}/shape/topology.rs | 4 +-- .../src}/shape/validate.rs | 2 +- .../src}/topology/edges.rs | 2 +- .../src}/topology/faces.rs | 2 +- .../kernel => fj-kernel/src}/topology/mod.rs | 0 .../src}/topology/vertices.rs | 2 +- 34 files changed, 84 insertions(+), 47 deletions(-) create mode 100644 fj-kernel/Cargo.toml rename {fj-app/src/kernel => fj-kernel/src}/algorithms/approximation.rs (99%) rename {fj-app/src/kernel => fj-kernel/src}/algorithms/mod.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/algorithms/sweep.rs (99%) rename {fj-app/src/kernel => fj-kernel/src}/algorithms/triangulation.rs (98%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/curves/circle.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/curves/line.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/curves/mod.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/mod.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/points.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/surfaces/mod.rs (98%) rename {fj-app/src/kernel => fj-kernel/src}/geometry/surfaces/swept.rs (96%) rename fj-app/src/kernel/mod.rs => fj-kernel/src/lib.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/shape/geometry.rs (99%) rename {fj-app/src/kernel => fj-kernel/src}/shape/handle.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/shape/iter.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/shape/mod.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/shape/topology.rs (99%) rename {fj-app/src/kernel => fj-kernel/src}/shape/validate.rs (99%) rename {fj-app/src/kernel => fj-kernel/src}/topology/edges.rs (98%) rename {fj-app/src/kernel => fj-kernel/src}/topology/faces.rs (99%) rename {fj-app/src/kernel => fj-kernel/src}/topology/mod.rs (100%) rename {fj-app/src/kernel => fj-kernel/src}/topology/vertices.rs (97%) diff --git a/Cargo.lock b/Cargo.lock index 02bd332ec..5de234255 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -626,23 +626,19 @@ name = "fj-app" version = "0.5.0" dependencies = [ "anyhow", - "approx 0.5.1", "bytemuck", "clap", "figment", "fj", "fj-debug", + "fj-kernel", "fj-math", "futures", "libloading", - "map-macro", "nalgebra", "notify", - "parking_lot 0.12.0", - "parry2d-f64", "parry3d-f64", "serde", - "spade", "thiserror", "threemf", "tracing", @@ -659,6 +655,23 @@ dependencies = [ "parry3d-f64", ] +[[package]] +name = "fj-kernel" +version = "0.5.0" +dependencies = [ + "anyhow", + "approx 0.5.1", + "fj-debug", + "fj-math", + "map-macro", + "nalgebra", + "parking_lot 0.12.0", + "parry2d-f64", + "parry3d-f64", + "spade", + "thiserror", +] + [[package]] name = "fj-math" version = "0.5.0" @@ -1129,9 +1142,9 @@ dependencies = [ [[package]] name = "map-macro" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3dec3b229449b1a54bd96dc32108086263d6830624e576dc0e6c80e619a0130" +checksum = "9d5b0858fc6e216d2d6222d661021d9b184550acd757fbd80a8f86224069422c" [[package]] name = "matchers" diff --git a/Cargo.toml b/Cargo.toml index a672aadfe..961bb9076 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "fj", "fj-app", "fj-debug", + "fj-kernel", "fj-math", "models/cuboid", @@ -16,5 +17,6 @@ members = [ default-members = [ "fj-app", "fj-debug", + "fj-kernel", "fj-math", ] diff --git a/fj-app/Cargo.toml b/fj-app/Cargo.toml index fd648d68c..663310e2e 100644 --- a/fj-app/Cargo.toml +++ b/fj-app/Cargo.toml @@ -13,17 +13,12 @@ categories = ["mathematics", "rendering"] [dependencies] anyhow = "1.0.56" -approx = "0.5.1" bytemuck = "1.8.0" futures = "0.3.21" libloading = "0.7.2" -map-macro = "0.2.0" nalgebra = "0.30.0" notify = "5.0.0-pre.14" -parking_lot = "0.12.0" -parry2d-f64 = "0.8.0" parry3d-f64 = "0.8.0" -spade = "2.0.0" thiserror = "1.0.30" threemf = "0.2.0" tracing = "0.1.32" @@ -47,6 +42,10 @@ path = "../fj" version = "0.5.0" path = "../fj-debug" +[dependencies.fj-kernel] +version = "0.5.0" +path = "../fj-kernel" + [dependencies.fj-math] version = "0.5.0" path = "../fj-math" diff --git a/fj-app/src/main.rs b/fj-app/src/main.rs index d1cc8aa1e..39a547cf4 100644 --- a/fj-app/src/main.rs +++ b/fj-app/src/main.rs @@ -3,7 +3,6 @@ mod camera; mod config; mod graphics; mod input; -mod kernel; mod mesh; mod model; mod operations; diff --git a/fj-app/src/operations/circle.rs b/fj-app/src/operations/circle.rs index 98e9e8d32..c495e6a87 100644 --- a/fj-app/src/operations/circle.rs +++ b/fj-app/src/operations/circle.rs @@ -1,11 +1,10 @@ use fj_debug::DebugInfo; -use fj_math::{Aabb, Point, Scalar}; - -use crate::kernel::{ +use fj_kernel::{ geometry::Surface, shape::Shape, topology::{edges::Cycle, faces::Face}, }; +use fj_math::{Aabb, Point, Scalar}; use super::ToShape; diff --git a/fj-app/src/operations/difference_2d.rs b/fj-app/src/operations/difference_2d.rs index b44f7b151..265804849 100644 --- a/fj-app/src/operations/difference_2d.rs +++ b/fj-app/src/operations/difference_2d.rs @@ -1,9 +1,7 @@ use std::collections::HashMap; use fj_debug::DebugInfo; -use fj_math::{Aabb, Scalar}; - -use crate::kernel::{ +use fj_kernel::{ shape::Shape, topology::{ edges::{Cycle, Edge}, @@ -11,6 +9,7 @@ use crate::kernel::{ vertices::Vertex, }, }; +use fj_math::{Aabb, Scalar}; use super::ToShape; diff --git a/fj-app/src/operations/group.rs b/fj-app/src/operations/group.rs index 2c44b42b4..2d40de3e2 100644 --- a/fj-app/src/operations/group.rs +++ b/fj-app/src/operations/group.rs @@ -1,9 +1,7 @@ use std::collections::HashMap; use fj_debug::DebugInfo; -use fj_math::{Aabb, Scalar}; - -use crate::kernel::{ +use fj_kernel::{ shape::Shape, topology::{ edges::{Cycle, Edge}, @@ -11,6 +9,7 @@ use crate::kernel::{ vertices::Vertex, }, }; +use fj_math::{Aabb, Scalar}; use super::ToShape; diff --git a/fj-app/src/operations/mod.rs b/fj-app/src/operations/mod.rs index 7e86ea2ef..0c180610e 100644 --- a/fj-app/src/operations/mod.rs +++ b/fj-app/src/operations/mod.rs @@ -6,10 +6,9 @@ pub mod sweep; pub mod transform; use fj_debug::DebugInfo; +use fj_kernel::shape::Shape; use fj_math::{Aabb, Scalar}; -use crate::kernel::shape::Shape; - /// Implemented by all shapes pub trait ToShape { /// Compute the boundary representation of the shape diff --git a/fj-app/src/operations/sketch.rs b/fj-app/src/operations/sketch.rs index 8deb59928..bcd4b9baf 100644 --- a/fj-app/src/operations/sketch.rs +++ b/fj-app/src/operations/sketch.rs @@ -1,11 +1,10 @@ use fj_debug::DebugInfo; -use fj_math::{Aabb, Point, Scalar}; - -use crate::kernel::{ +use fj_kernel::{ geometry::Surface, shape::Shape, topology::{edges::Cycle, faces::Face, vertices::Vertex}, }; +use fj_math::{Aabb, Point, Scalar}; use super::ToShape; diff --git a/fj-app/src/operations/sweep.rs b/fj-app/src/operations/sweep.rs index 0ddc6d80f..cf8099c92 100644 --- a/fj-app/src/operations/sweep.rs +++ b/fj-app/src/operations/sweep.rs @@ -1,8 +1,7 @@ use fj_debug::DebugInfo; +use fj_kernel::{algorithms::sweep::sweep_shape, shape::Shape}; use fj_math::{Aabb, Scalar, Vector}; -use crate::kernel::{algorithms::sweep::sweep_shape, shape::Shape}; - use super::ToShape; impl ToShape for fj::Sweep { diff --git a/fj-app/src/operations/transform.rs b/fj-app/src/operations/transform.rs index 6a2ffd1f1..f297e0122 100644 --- a/fj-app/src/operations/transform.rs +++ b/fj-app/src/operations/transform.rs @@ -1,9 +1,8 @@ use fj_debug::DebugInfo; +use fj_kernel::shape::Shape; use fj_math::{Aabb, Scalar, Transform}; use parry3d_f64::math::Isometry; -use crate::kernel::shape::Shape; - use super::ToShape; impl ToShape for fj::Transform { diff --git a/fj-kernel/Cargo.toml b/fj-kernel/Cargo.toml new file mode 100644 index 000000000..c2fa657c2 --- /dev/null +++ b/fj-kernel/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "fj-kernel" +version = "0.5.0" +edition = "2021" + +description = "The world needs another CAD program." +readme = "../README.md" +repository = "https://github.com/hannobraun/fornjot" +license = "0BSD" +keywords = ["cad", "programmatic", "code-cad"] +categories = ["mathematics"] + + +[dependencies] +anyhow = "1.0.56" +approx = "0.5.1" +map-macro = "0.2.0" +nalgebra = "0.30.0" +parking_lot = "0.12.0" +parry2d-f64 = "0.8.0" +parry3d-f64 = "0.8.0" +spade = "2.0.0" +thiserror = "1.0.30" + +[dependencies.fj-debug] +version = "0.5.0" +path = "../fj-debug" + +[dependencies.fj-math] +version = "0.5.0" +path = "../fj-math" diff --git a/fj-app/src/kernel/algorithms/approximation.rs b/fj-kernel/src/algorithms/approximation.rs similarity index 99% rename from fj-app/src/kernel/algorithms/approximation.rs rename to fj-kernel/src/algorithms/approximation.rs index 60baff4e2..138540cdf 100644 --- a/fj-app/src/kernel/algorithms/approximation.rs +++ b/fj-kernel/src/algorithms/approximation.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use fj_math::{Point, Scalar, Segment}; -use crate::kernel::topology::{ +use crate::topology::{ edges::{Cycle, Edge}, faces::Face, vertices::Vertex, @@ -134,7 +134,7 @@ mod tests { use fj_math::{Point, Scalar, Segment}; use map_macro::set; - use crate::kernel::{ + use crate::{ geometry::Surface, shape::Shape, topology::{edges::Cycle, faces::Face, vertices::Vertex}, diff --git a/fj-app/src/kernel/algorithms/mod.rs b/fj-kernel/src/algorithms/mod.rs similarity index 100% rename from fj-app/src/kernel/algorithms/mod.rs rename to fj-kernel/src/algorithms/mod.rs diff --git a/fj-app/src/kernel/algorithms/sweep.rs b/fj-kernel/src/algorithms/sweep.rs similarity index 99% rename from fj-app/src/kernel/algorithms/sweep.rs rename to fj-kernel/src/algorithms/sweep.rs index 09d5c8f66..b1723811e 100644 --- a/fj-app/src/kernel/algorithms/sweep.rs +++ b/fj-kernel/src/algorithms/sweep.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use fj_math::{Scalar, Transform, Triangle, Vector}; -use crate::kernel::{ +use crate::{ geometry::{surfaces::Swept, Surface}, shape::{Handle, Shape}, topology::{ @@ -323,7 +323,7 @@ impl Relation { mod tests { use fj_math::{Point, Scalar, Vector}; - use crate::kernel::{ + use crate::{ geometry::{surfaces::Swept, Surface}, shape::{Handle, Shape}, topology::{edges::Cycle, faces::Face, vertices::Vertex}, diff --git a/fj-app/src/kernel/algorithms/triangulation.rs b/fj-kernel/src/algorithms/triangulation.rs similarity index 98% rename from fj-app/src/kernel/algorithms/triangulation.rs rename to fj-kernel/src/algorithms/triangulation.rs index 435fbf65d..fcd23dd50 100644 --- a/fj-app/src/kernel/algorithms/triangulation.rs +++ b/fj-kernel/src/algorithms/triangulation.rs @@ -2,7 +2,7 @@ use fj_math::Scalar; use parry2d_f64::utils::point_in_triangle::{corner_direction, Orientation}; use spade::HasPosition; -use crate::kernel::geometry; +use crate::geometry; /// Create a Delaunay triangulation of all points pub fn triangulate( diff --git a/fj-app/src/kernel/geometry/curves/circle.rs b/fj-kernel/src/geometry/curves/circle.rs similarity index 100% rename from fj-app/src/kernel/geometry/curves/circle.rs rename to fj-kernel/src/geometry/curves/circle.rs diff --git a/fj-app/src/kernel/geometry/curves/line.rs b/fj-kernel/src/geometry/curves/line.rs similarity index 100% rename from fj-app/src/kernel/geometry/curves/line.rs rename to fj-kernel/src/geometry/curves/line.rs diff --git a/fj-app/src/kernel/geometry/curves/mod.rs b/fj-kernel/src/geometry/curves/mod.rs similarity index 100% rename from fj-app/src/kernel/geometry/curves/mod.rs rename to fj-kernel/src/geometry/curves/mod.rs diff --git a/fj-app/src/kernel/geometry/mod.rs b/fj-kernel/src/geometry/mod.rs similarity index 100% rename from fj-app/src/kernel/geometry/mod.rs rename to fj-kernel/src/geometry/mod.rs diff --git a/fj-app/src/kernel/geometry/points.rs b/fj-kernel/src/geometry/points.rs similarity index 100% rename from fj-app/src/kernel/geometry/points.rs rename to fj-kernel/src/geometry/points.rs diff --git a/fj-app/src/kernel/geometry/surfaces/mod.rs b/fj-kernel/src/geometry/surfaces/mod.rs similarity index 98% rename from fj-app/src/kernel/geometry/surfaces/mod.rs rename to fj-kernel/src/geometry/surfaces/mod.rs index 1d060d0a2..adbdb2f32 100644 --- a/fj-app/src/kernel/geometry/surfaces/mod.rs +++ b/fj-kernel/src/geometry/surfaces/mod.rs @@ -5,7 +5,7 @@ pub use self::swept::Swept; use fj_math::{Point, Transform, Vector}; use nalgebra::vector; -use crate::kernel::geometry; +use crate::geometry; use super::{Curve, Line}; diff --git a/fj-app/src/kernel/geometry/surfaces/swept.rs b/fj-kernel/src/geometry/surfaces/swept.rs similarity index 96% rename from fj-app/src/kernel/geometry/surfaces/swept.rs rename to fj-kernel/src/geometry/surfaces/swept.rs index b8f6149fd..45027d914 100644 --- a/fj-app/src/kernel/geometry/surfaces/swept.rs +++ b/fj-kernel/src/geometry/surfaces/swept.rs @@ -1,6 +1,6 @@ use fj_math::{Point, Transform, Vector}; -use crate::kernel::geometry::Curve; +use crate::geometry::Curve; /// A surface that was swept from a curve #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] @@ -16,7 +16,7 @@ impl Swept { /// Construct a plane from 3 points #[cfg(test)] pub fn plane_from_points([a, b, c]: [Point<3>; 3]) -> Self { - use crate::kernel::geometry::Line; + use crate::geometry::Line; let curve = Curve::Line(Line::from_points([a, b])); let path = c - a; @@ -57,7 +57,7 @@ mod tests { use fj_math::{Point, Vector}; - use crate::kernel::geometry::{Curve, Line}; + use crate::geometry::{Curve, Line}; use super::Swept; diff --git a/fj-app/src/kernel/mod.rs b/fj-kernel/src/lib.rs similarity index 100% rename from fj-app/src/kernel/mod.rs rename to fj-kernel/src/lib.rs diff --git a/fj-app/src/kernel/shape/geometry.rs b/fj-kernel/src/shape/geometry.rs similarity index 99% rename from fj-app/src/kernel/shape/geometry.rs rename to fj-kernel/src/shape/geometry.rs index 873ce7d13..e13554172 100644 --- a/fj-app/src/kernel/shape/geometry.rs +++ b/fj-kernel/src/shape/geometry.rs @@ -1,6 +1,6 @@ use fj_math::{Point, Transform}; -use crate::kernel::{ +use crate::{ geometry::{Curve, Surface}, topology::faces::Face, }; diff --git a/fj-app/src/kernel/shape/handle.rs b/fj-kernel/src/shape/handle.rs similarity index 100% rename from fj-app/src/kernel/shape/handle.rs rename to fj-kernel/src/shape/handle.rs diff --git a/fj-app/src/kernel/shape/iter.rs b/fj-kernel/src/shape/iter.rs similarity index 100% rename from fj-app/src/kernel/shape/iter.rs rename to fj-kernel/src/shape/iter.rs diff --git a/fj-app/src/kernel/shape/mod.rs b/fj-kernel/src/shape/mod.rs similarity index 100% rename from fj-app/src/kernel/shape/mod.rs rename to fj-kernel/src/shape/mod.rs diff --git a/fj-app/src/kernel/shape/topology.rs b/fj-kernel/src/shape/topology.rs similarity index 99% rename from fj-app/src/kernel/shape/topology.rs rename to fj-kernel/src/shape/topology.rs index 56bef7f09..32d1a76e4 100644 --- a/fj-app/src/kernel/shape/topology.rs +++ b/fj-kernel/src/shape/topology.rs @@ -3,7 +3,7 @@ use std::collections::HashSet; use fj_debug::DebugInfo; use fj_math::{Point, Scalar, Triangle, Vector}; -use crate::kernel::{ +use crate::{ geometry::{Circle, Curve, Line}, topology::{ edges::{Cycle, Edge}, @@ -261,7 +261,7 @@ mod tests { use fj_math::{Point, Scalar}; - use crate::kernel::{ + use crate::{ geometry::{Curve, Line, Surface}, shape::{handle::Handle, Shape, ValidationError}, topology::{ diff --git a/fj-app/src/kernel/shape/validate.rs b/fj-kernel/src/shape/validate.rs similarity index 99% rename from fj-app/src/kernel/shape/validate.rs rename to fj-kernel/src/shape/validate.rs index c1497178c..4c3c8b283 100644 --- a/fj-app/src/kernel/shape/validate.rs +++ b/fj-kernel/src/shape/validate.rs @@ -1,6 +1,6 @@ use std::collections::HashSet; -use crate::kernel::{ +use crate::{ geometry::{Curve, Surface}, topology::{ edges::{Cycle, Edge}, diff --git a/fj-app/src/kernel/topology/edges.rs b/fj-kernel/src/topology/edges.rs similarity index 98% rename from fj-app/src/kernel/topology/edges.rs rename to fj-kernel/src/topology/edges.rs index c2e3cd340..ebcfad3fd 100644 --- a/fj-app/src/kernel/topology/edges.rs +++ b/fj-kernel/src/topology/edges.rs @@ -1,6 +1,6 @@ use std::hash::{Hash, Hasher}; -use crate::kernel::{geometry::Curve, shape::Handle}; +use crate::{geometry::Curve, shape::Handle}; use super::vertices::Vertex; diff --git a/fj-app/src/kernel/topology/faces.rs b/fj-kernel/src/topology/faces.rs similarity index 99% rename from fj-app/src/kernel/topology/faces.rs rename to fj-kernel/src/topology/faces.rs index a5b805d88..bbb363809 100644 --- a/fj-app/src/kernel/topology/faces.rs +++ b/fj-kernel/src/topology/faces.rs @@ -8,7 +8,7 @@ use fj_math::{Aabb, Scalar, Segment, Triangle}; use parry2d_f64::query::{Ray as Ray2, RayCast as _}; use parry3d_f64::query::Ray as Ray3; -use crate::kernel::{ +use crate::{ algorithms::{approximation::Approximation, triangulation::triangulate}, geometry::Surface, shape::Handle, diff --git a/fj-app/src/kernel/topology/mod.rs b/fj-kernel/src/topology/mod.rs similarity index 100% rename from fj-app/src/kernel/topology/mod.rs rename to fj-kernel/src/topology/mod.rs diff --git a/fj-app/src/kernel/topology/vertices.rs b/fj-kernel/src/topology/vertices.rs similarity index 97% rename from fj-app/src/kernel/topology/vertices.rs rename to fj-kernel/src/topology/vertices.rs index 76c85f38f..5e54439ea 100644 --- a/fj-app/src/kernel/topology/vertices.rs +++ b/fj-kernel/src/topology/vertices.rs @@ -2,7 +2,7 @@ use std::hash::Hash; use fj_math::Point; -use crate::kernel::shape::Handle; +use crate::shape::Handle; /// A vertex /// From 7f051a855e4dddf8c95a5f8cbfc4fffbd0b21287 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:04:23 +0100 Subject: [PATCH 04/16] Fix Clippy warning This is another one of those that only showed up, as I extracted code into a separate crate. --- fj-kernel/src/shape/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fj-kernel/src/shape/mod.rs b/fj-kernel/src/shape/mod.rs index 71965f066..d50a1d685 100644 --- a/fj-kernel/src/shape/mod.rs +++ b/fj-kernel/src/shape/mod.rs @@ -109,6 +109,12 @@ impl Shape { } } +impl Default for Shape { + fn default() -> Self { + Self::new() + } +} + type Points = Store>; type Curves = Store; type Surfaces = Store; From a5d4ddedb313fa051c228819999e82b8eecb03c7 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:08:50 +0100 Subject: [PATCH 05/16] Add re-exports to `algorithms` --- fj-app/src/operations/sweep.rs | 2 +- fj-kernel/src/algorithms/mod.rs | 5 +++++ fj-kernel/src/topology/faces.rs | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fj-app/src/operations/sweep.rs b/fj-app/src/operations/sweep.rs index cf8099c92..15f816fc8 100644 --- a/fj-app/src/operations/sweep.rs +++ b/fj-app/src/operations/sweep.rs @@ -1,5 +1,5 @@ use fj_debug::DebugInfo; -use fj_kernel::{algorithms::sweep::sweep_shape, shape::Shape}; +use fj_kernel::{algorithms::sweep_shape, shape::Shape}; use fj_math::{Aabb, Scalar, Vector}; use super::ToShape; diff --git a/fj-kernel/src/algorithms/mod.rs b/fj-kernel/src/algorithms/mod.rs index 77c393267..0ff398c24 100644 --- a/fj-kernel/src/algorithms/mod.rs +++ b/fj-kernel/src/algorithms/mod.rs @@ -1,3 +1,8 @@ pub mod approximation; pub mod sweep; pub mod triangulation; + +pub use self::{ + approximation::Approximation, sweep::sweep_shape, + triangulation::triangulate, +}; diff --git a/fj-kernel/src/topology/faces.rs b/fj-kernel/src/topology/faces.rs index bbb363809..87337ef0a 100644 --- a/fj-kernel/src/topology/faces.rs +++ b/fj-kernel/src/topology/faces.rs @@ -9,7 +9,7 @@ use parry2d_f64::query::{Ray as Ray2, RayCast as _}; use parry3d_f64::query::Ray as Ray3; use crate::{ - algorithms::{approximation::Approximation, triangulation::triangulate}, + algorithms::{triangulate, Approximation}, geometry::Surface, shape::Handle, }; From 0cebb309db347ccd8acfcafbf46aca64f871694a Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:09:20 +0100 Subject: [PATCH 06/16] Make modules in `algorihms` private This simplifies the public API. --- fj-kernel/src/algorithms/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fj-kernel/src/algorithms/mod.rs b/fj-kernel/src/algorithms/mod.rs index 0ff398c24..cdbbd0604 100644 --- a/fj-kernel/src/algorithms/mod.rs +++ b/fj-kernel/src/algorithms/mod.rs @@ -1,6 +1,6 @@ -pub mod approximation; -pub mod sweep; -pub mod triangulation; +mod approximation; +mod sweep; +mod triangulation; pub use self::{ approximation::Approximation, sweep::sweep_shape, From c7b3efff8e063cd075821744e2dfa48b3ef58627 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:16:28 +0100 Subject: [PATCH 07/16] Rename `Swept` to `SweptCurve` This makes the name a bit less compact, but more clear. --- fj-kernel/src/algorithms/sweep.rs | 8 ++++---- fj-kernel/src/geometry/surfaces/mod.rs | 6 +++--- fj-kernel/src/geometry/surfaces/swept.rs | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/fj-kernel/src/algorithms/sweep.rs b/fj-kernel/src/algorithms/sweep.rs index b1723811e..3c7269d2f 100644 --- a/fj-kernel/src/algorithms/sweep.rs +++ b/fj-kernel/src/algorithms/sweep.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use fj_math::{Scalar, Transform, Triangle, Vector}; use crate::{ - geometry::{surfaces::Swept, Surface}, + geometry::{surfaces::SweptCurve, Surface}, shape::{Handle, Shape}, topology::{ edges::{Cycle, Edge}, @@ -237,7 +237,7 @@ pub fn sweep_shape( source_to_top.edges.get(edge_source).unwrap().clone(); let surface = - target.geometry().add_surface(Surface::Swept(Swept { + target.geometry().add_surface(Surface::Swept(SweptCurve { curve: bottom_edge.get().curve(), path, })); @@ -324,7 +324,7 @@ mod tests { use fj_math::{Point, Scalar, Vector}; use crate::{ - geometry::{surfaces::Swept, Surface}, + geometry::{surfaces::SweptCurve, Surface}, shape::{Handle, Shape}, topology::{edges::Cycle, faces::Face, vertices::Vertex}, }; @@ -408,7 +408,7 @@ mod tests { .unwrap(); let surface = shape.geometry().add_surface(Surface::Swept( - Swept::plane_from_points( + SweptCurve::plane_from_points( [a, b, c].map(|vertex| vertex.get().point()), ), )); diff --git a/fj-kernel/src/geometry/surfaces/mod.rs b/fj-kernel/src/geometry/surfaces/mod.rs index adbdb2f32..1db485583 100644 --- a/fj-kernel/src/geometry/surfaces/mod.rs +++ b/fj-kernel/src/geometry/surfaces/mod.rs @@ -1,6 +1,6 @@ pub mod swept; -pub use self::swept::Swept; +pub use self::swept::SweptCurve; use fj_math::{Point, Transform, Vector}; use nalgebra::vector; @@ -13,13 +13,13 @@ use super::{Curve, Line}; #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] pub enum Surface { /// A swept curve - Swept(Swept), + Swept(SweptCurve), } impl Surface { /// Construct a `Surface` that represents the x-y plane pub fn x_y_plane() -> Self { - Self::Swept(Swept { + Self::Swept(SweptCurve { curve: Curve::Line(Line { origin: Point::origin(), direction: vector![1., 0., 0.].into(), diff --git a/fj-kernel/src/geometry/surfaces/swept.rs b/fj-kernel/src/geometry/surfaces/swept.rs index 45027d914..3c6f6531e 100644 --- a/fj-kernel/src/geometry/surfaces/swept.rs +++ b/fj-kernel/src/geometry/surfaces/swept.rs @@ -4,7 +4,7 @@ use crate::geometry::Curve; /// A surface that was swept from a curve #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] -pub struct Swept { +pub struct SweptCurve { /// The curve that this surface was swept from pub curve: Curve, @@ -12,7 +12,7 @@ pub struct Swept { pub path: Vector<3>, } -impl Swept { +impl SweptCurve { /// Construct a plane from 3 points #[cfg(test)] pub fn plane_from_points([a, b, c]: [Point<3>; 3]) -> Self { @@ -59,11 +59,11 @@ mod tests { use crate::geometry::{Curve, Line}; - use super::Swept; + use super::SweptCurve; #[test] fn point_model_to_surface() { - let swept = Swept { + let swept = SweptCurve { curve: Curve::Line(Line { origin: Point::from([1., 0., 0.]), direction: Vector::from([0., 2., 0.]), @@ -76,7 +76,7 @@ mod tests { verify(&swept, Point::from([1., 1.])); verify(&swept, Point::from([2., 3.])); - fn verify(swept: &Swept, surface_point: Point<2>) { + fn verify(swept: &SweptCurve, surface_point: Point<2>) { let point = swept.point_surface_to_model(&surface_point); let result = swept.point_model_to_surface(&point); @@ -86,7 +86,7 @@ mod tests { #[test] fn point_surface_to_model() { - let swept = Swept { + let swept = SweptCurve { curve: Curve::Line(Line { origin: Point::from([1., 0., 0.]), direction: Vector::from([0., 2., 0.]), @@ -102,7 +102,7 @@ mod tests { #[test] fn vector_surface_to_model() { - let swept = Swept { + let swept = SweptCurve { curve: Curve::Line(Line { origin: Point::from([1., 0., 0.]), direction: Vector::from([0., 2., 0.]), From 4fee84d653fc5c747681e3d866075b3dc6e1669c Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:17:42 +0100 Subject: [PATCH 08/16] Update name of enum variant --- fj-kernel/src/algorithms/sweep.rs | 9 +++++---- fj-kernel/src/geometry/surfaces/mod.rs | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/fj-kernel/src/algorithms/sweep.rs b/fj-kernel/src/algorithms/sweep.rs index 3c7269d2f..12b62c862 100644 --- a/fj-kernel/src/algorithms/sweep.rs +++ b/fj-kernel/src/algorithms/sweep.rs @@ -236,11 +236,12 @@ pub fn sweep_shape( let top_edge = source_to_top.edges.get(edge_source).unwrap().clone(); - let surface = - target.geometry().add_surface(Surface::Swept(SweptCurve { + let surface = target.geometry().add_surface( + Surface::SweptCurve(SweptCurve { curve: bottom_edge.get().curve(), path, - })); + }), + ); let cycle = target .topology() @@ -407,7 +408,7 @@ mod tests { }) .unwrap(); - let surface = shape.geometry().add_surface(Surface::Swept( + let surface = shape.geometry().add_surface(Surface::SweptCurve( SweptCurve::plane_from_points( [a, b, c].map(|vertex| vertex.get().point()), ), diff --git a/fj-kernel/src/geometry/surfaces/mod.rs b/fj-kernel/src/geometry/surfaces/mod.rs index 1db485583..4fc73864c 100644 --- a/fj-kernel/src/geometry/surfaces/mod.rs +++ b/fj-kernel/src/geometry/surfaces/mod.rs @@ -13,13 +13,13 @@ use super::{Curve, Line}; #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)] pub enum Surface { /// A swept curve - Swept(SweptCurve), + SweptCurve(SweptCurve), } impl Surface { /// Construct a `Surface` that represents the x-y plane pub fn x_y_plane() -> Self { - Self::Swept(SweptCurve { + Self::SweptCurve(SweptCurve { curve: Curve::Line(Line { origin: Point::origin(), direction: vector![1., 0., 0.].into(), @@ -32,7 +32,9 @@ impl Surface { #[must_use] pub fn transform(self, transform: &Transform) -> Self { match self { - Self::Swept(surface) => Self::Swept(surface.transform(transform)), + Self::SweptCurve(surface) => { + Self::SweptCurve(surface.transform(transform)) + } } } @@ -42,7 +44,9 @@ impl Surface { point_3d: Point<3>, ) -> geometry::Point<2> { let point_2d = match self { - Self::Swept(surface) => surface.point_model_to_surface(&point_3d), + Self::SweptCurve(surface) => { + surface.point_model_to_surface(&point_3d) + } }; geometry::Point::new(point_2d, point_3d) @@ -51,14 +55,16 @@ impl Surface { /// Convert a point in surface coordinates to model coordinates pub fn point_surface_to_model(&self, point: &Point<2>) -> Point<3> { match self { - Self::Swept(surface) => surface.point_surface_to_model(point), + Self::SweptCurve(surface) => surface.point_surface_to_model(point), } } /// Convert a vector in surface coordinates to model coordinates pub fn vector_surface_to_model(&self, vector: &Vector<2>) -> Vector<3> { match self { - Self::Swept(surface) => surface.vector_surface_to_model(vector), + Self::SweptCurve(surface) => { + surface.vector_surface_to_model(vector) + } } } } From 5f56748880cb27e5b6f6b8f405b4d4557faf5f2c Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:18:50 +0100 Subject: [PATCH 09/16] Update order of code Public re-exports of `self` types are closely related to the module declarations, while the other `use` statements are related to the implementation below them. I like to emphasize this via their proximity. --- fj-kernel/src/geometry/curves/mod.rs | 4 ++-- fj-kernel/src/shape/mod.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fj-kernel/src/geometry/curves/mod.rs b/fj-kernel/src/geometry/curves/mod.rs index c422ee1a0..343062679 100644 --- a/fj-kernel/src/geometry/curves/mod.rs +++ b/fj-kernel/src/geometry/curves/mod.rs @@ -1,10 +1,10 @@ mod circle; mod line; -use fj_math::{Point, Scalar, Transform, Vector}; - pub use self::{circle::Circle, line::Line}; +use fj_math::{Point, Scalar, Transform, Vector}; + /// A one-dimensional shape /// /// The word "curve" is used as an umbrella term for all one-dimensional shapes, diff --git a/fj-kernel/src/shape/mod.rs b/fj-kernel/src/shape/mod.rs index d50a1d685..7e6191e4b 100644 --- a/fj-kernel/src/shape/mod.rs +++ b/fj-kernel/src/shape/mod.rs @@ -4,8 +4,6 @@ pub mod iter; pub mod topology; pub mod validate; -use fj_math::{Point, Scalar}; - pub use self::{ geometry::Geometry, handle::Handle, @@ -14,6 +12,8 @@ pub use self::{ validate::{ValidationError, ValidationResult}, }; +use fj_math::{Point, Scalar}; + use super::{ geometry::{Curve, Surface}, topology::{ From 8588aee08588b7815767ea09e42f49494ba0b3b8 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:23:47 +0100 Subject: [PATCH 10/16] Add missing re-export --- fj-kernel/src/algorithms/sweep.rs | 4 ++-- fj-kernel/src/geometry/mod.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fj-kernel/src/algorithms/sweep.rs b/fj-kernel/src/algorithms/sweep.rs index 12b62c862..6f33acadf 100644 --- a/fj-kernel/src/algorithms/sweep.rs +++ b/fj-kernel/src/algorithms/sweep.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use fj_math::{Scalar, Transform, Triangle, Vector}; use crate::{ - geometry::{surfaces::SweptCurve, Surface}, + geometry::{Surface, SweptCurve}, shape::{Handle, Shape}, topology::{ edges::{Cycle, Edge}, @@ -325,7 +325,7 @@ mod tests { use fj_math::{Point, Scalar, Vector}; use crate::{ - geometry::{surfaces::SweptCurve, Surface}, + geometry::{Surface, SweptCurve}, shape::{Handle, Shape}, topology::{edges::Cycle, faces::Face, vertices::Vertex}, }; diff --git a/fj-kernel/src/geometry/mod.rs b/fj-kernel/src/geometry/mod.rs index 7b9e5fdf3..8c475a9c0 100644 --- a/fj-kernel/src/geometry/mod.rs +++ b/fj-kernel/src/geometry/mod.rs @@ -5,5 +5,5 @@ pub mod surfaces; pub use self::{ curves::{Circle, Curve, Line}, points::Point, - surfaces::Surface, + surfaces::{Surface, SweptCurve}, }; From d8ced4f3c33557cf2f2c818deaddcc41db2359e8 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:24:39 +0100 Subject: [PATCH 11/16] Simplify public API of `geometry` module --- fj-kernel/src/geometry/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fj-kernel/src/geometry/mod.rs b/fj-kernel/src/geometry/mod.rs index 8c475a9c0..59d2782ee 100644 --- a/fj-kernel/src/geometry/mod.rs +++ b/fj-kernel/src/geometry/mod.rs @@ -1,6 +1,6 @@ -pub mod curves; -pub mod points; -pub mod surfaces; +mod curves; +mod points; +mod surfaces; pub use self::{ curves::{Circle, Curve, Line}, From 815dd933711d261c980e0026365d58358f9e86e6 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:28:17 +0100 Subject: [PATCH 12/16] Simplify public API of `shape` module --- fj-kernel/src/shape/mod.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fj-kernel/src/shape/mod.rs b/fj-kernel/src/shape/mod.rs index 7e6191e4b..3238da950 100644 --- a/fj-kernel/src/shape/mod.rs +++ b/fj-kernel/src/shape/mod.rs @@ -1,8 +1,8 @@ -pub mod geometry; -pub mod handle; -pub mod iter; -pub mod topology; -pub mod validate; +mod geometry; +mod handle; +mod iter; +mod topology; +mod validate; pub use self::{ geometry::Geometry, From 4cd98f20d78716aa103fbbafdc04ab4427a8d4ce Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:37:31 +0100 Subject: [PATCH 13/16] Add re-exports to `topology` module --- fj-app/src/operations/circle.rs | 2 +- fj-app/src/operations/difference_2d.rs | 6 +----- fj-app/src/operations/group.rs | 6 +----- fj-app/src/operations/sketch.rs | 2 +- fj-kernel/src/algorithms/approximation.rs | 8 ++------ fj-kernel/src/algorithms/sweep.rs | 8 ++------ fj-kernel/src/shape/geometry.rs | 2 +- fj-kernel/src/shape/mod.rs | 6 +----- fj-kernel/src/shape/topology.rs | 12 ++---------- fj-kernel/src/shape/validate.rs | 6 +----- fj-kernel/src/topology/mod.rs | 6 ++++++ 11 files changed, 19 insertions(+), 45 deletions(-) diff --git a/fj-app/src/operations/circle.rs b/fj-app/src/operations/circle.rs index c495e6a87..0bb8880c0 100644 --- a/fj-app/src/operations/circle.rs +++ b/fj-app/src/operations/circle.rs @@ -2,7 +2,7 @@ use fj_debug::DebugInfo; use fj_kernel::{ geometry::Surface, shape::Shape, - topology::{edges::Cycle, faces::Face}, + topology::{Cycle, Face}, }; use fj_math::{Aabb, Point, Scalar}; diff --git a/fj-app/src/operations/difference_2d.rs b/fj-app/src/operations/difference_2d.rs index 265804849..9abe08efd 100644 --- a/fj-app/src/operations/difference_2d.rs +++ b/fj-app/src/operations/difference_2d.rs @@ -3,11 +3,7 @@ use std::collections::HashMap; use fj_debug::DebugInfo; use fj_kernel::{ shape::Shape, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; use fj_math::{Aabb, Scalar}; diff --git a/fj-app/src/operations/group.rs b/fj-app/src/operations/group.rs index 2d40de3e2..94b4de971 100644 --- a/fj-app/src/operations/group.rs +++ b/fj-app/src/operations/group.rs @@ -3,11 +3,7 @@ use std::collections::HashMap; use fj_debug::DebugInfo; use fj_kernel::{ shape::Shape, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; use fj_math::{Aabb, Scalar}; diff --git a/fj-app/src/operations/sketch.rs b/fj-app/src/operations/sketch.rs index bcd4b9baf..cc48fc3c1 100644 --- a/fj-app/src/operations/sketch.rs +++ b/fj-app/src/operations/sketch.rs @@ -2,7 +2,7 @@ use fj_debug::DebugInfo; use fj_kernel::{ geometry::Surface, shape::Shape, - topology::{edges::Cycle, faces::Face, vertices::Vertex}, + topology::{Cycle, Face, Vertex}, }; use fj_math::{Aabb, Point, Scalar}; diff --git a/fj-kernel/src/algorithms/approximation.rs b/fj-kernel/src/algorithms/approximation.rs index 138540cdf..161e27187 100644 --- a/fj-kernel/src/algorithms/approximation.rs +++ b/fj-kernel/src/algorithms/approximation.rs @@ -2,11 +2,7 @@ use std::collections::HashSet; use fj_math::{Point, Scalar, Segment}; -use crate::topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, -}; +use crate::topology::{Cycle, Edge, Face, Vertex}; /// An approximation of an edge, multiple edges, or a face #[derive(Debug, PartialEq)] @@ -137,7 +133,7 @@ mod tests { use crate::{ geometry::Surface, shape::Shape, - topology::{edges::Cycle, faces::Face, vertices::Vertex}, + topology::{Cycle, Face, Vertex}, }; use super::{approximate_edge, Approximation}; diff --git a/fj-kernel/src/algorithms/sweep.rs b/fj-kernel/src/algorithms/sweep.rs index 6f33acadf..1b2bd3542 100644 --- a/fj-kernel/src/algorithms/sweep.rs +++ b/fj-kernel/src/algorithms/sweep.rs @@ -5,11 +5,7 @@ use fj_math::{Scalar, Transform, Triangle, Vector}; use crate::{ geometry::{Surface, SweptCurve}, shape::{Handle, Shape}, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; use super::approximation::Approximation; @@ -327,7 +323,7 @@ mod tests { use crate::{ geometry::{Surface, SweptCurve}, shape::{Handle, Shape}, - topology::{edges::Cycle, faces::Face, vertices::Vertex}, + topology::{Cycle, Face, Vertex}, }; use super::sweep_shape; diff --git a/fj-kernel/src/shape/geometry.rs b/fj-kernel/src/shape/geometry.rs index e13554172..75af93c4e 100644 --- a/fj-kernel/src/shape/geometry.rs +++ b/fj-kernel/src/shape/geometry.rs @@ -2,7 +2,7 @@ use fj_math::{Point, Transform}; use crate::{ geometry::{Curve, Surface}, - topology::faces::Face, + topology::Face, }; use super::{ diff --git a/fj-kernel/src/shape/mod.rs b/fj-kernel/src/shape/mod.rs index 3238da950..683f01f20 100644 --- a/fj-kernel/src/shape/mod.rs +++ b/fj-kernel/src/shape/mod.rs @@ -16,11 +16,7 @@ use fj_math::{Point, Scalar}; use super::{ geometry::{Curve, Surface}, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; use self::handle::Storage; diff --git a/fj-kernel/src/shape/topology.rs b/fj-kernel/src/shape/topology.rs index 32d1a76e4..ed8199e18 100644 --- a/fj-kernel/src/shape/topology.rs +++ b/fj-kernel/src/shape/topology.rs @@ -5,11 +5,7 @@ use fj_math::{Point, Scalar, Triangle, Vector}; use crate::{ geometry::{Circle, Curve, Line}, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; use super::{ @@ -264,11 +260,7 @@ mod tests { use crate::{ geometry::{Curve, Line, Surface}, shape::{handle::Handle, Shape, ValidationError}, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; const MIN_DISTANCE: f64 = 5e-7; diff --git a/fj-kernel/src/shape/validate.rs b/fj-kernel/src/shape/validate.rs index 4c3c8b283..167e37089 100644 --- a/fj-kernel/src/shape/validate.rs +++ b/fj-kernel/src/shape/validate.rs @@ -2,11 +2,7 @@ use std::collections::HashSet; use crate::{ geometry::{Curve, Surface}, - topology::{ - edges::{Cycle, Edge}, - faces::Face, - vertices::Vertex, - }, + topology::{Cycle, Edge, Face, Vertex}, }; use super::Handle; diff --git a/fj-kernel/src/topology/mod.rs b/fj-kernel/src/topology/mod.rs index 8be51df18..4b12a9469 100644 --- a/fj-kernel/src/topology/mod.rs +++ b/fj-kernel/src/topology/mod.rs @@ -14,3 +14,9 @@ pub mod edges; pub mod faces; pub mod vertices; + +pub use self::{ + edges::{Cycle, Edge}, + faces::Face, + vertices::Vertex, +}; From b6bc41a5019aa220b4e3d4e09859b627c71fe172 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:37:47 +0100 Subject: [PATCH 14/16] Simplify public API of `topology` module --- fj-kernel/src/topology/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fj-kernel/src/topology/mod.rs b/fj-kernel/src/topology/mod.rs index 4b12a9469..e6f8544f1 100644 --- a/fj-kernel/src/topology/mod.rs +++ b/fj-kernel/src/topology/mod.rs @@ -11,9 +11,9 @@ //! definition of identity. Two [`Handle`]s are only considered equal, if they //! refer to objects in the same memory location. -pub mod edges; -pub mod faces; -pub mod vertices; +mod edges; +mod faces; +mod vertices; pub use self::{ edges::{Cycle, Edge}, From db4a3f829cab0dd3b8eb810929faa57f1fe8fa80 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:41:07 +0100 Subject: [PATCH 15/16] Update documentation of `fj-kernel` --- fj-kernel/src/algorithms/mod.rs | 5 +++++ fj-kernel/src/geometry/curves/circle.rs | 5 +++++ fj-kernel/src/geometry/curves/line.rs | 2 +- fj-kernel/src/geometry/curves/mod.rs | 1 + fj-kernel/src/geometry/mod.rs | 7 +++++++ fj-kernel/src/shape/iter.rs | 3 +++ fj-kernel/src/shape/mod.rs | 4 ++++ fj-kernel/src/shape/topology.rs | 1 + fj-kernel/src/topology/edges.rs | 1 + fj-kernel/src/topology/faces.rs | 3 +++ fj-kernel/src/topology/mod.rs | 5 +++++ fj-kernel/src/topology/vertices.rs | 1 + 12 files changed, 37 insertions(+), 1 deletion(-) diff --git a/fj-kernel/src/algorithms/mod.rs b/fj-kernel/src/algorithms/mod.rs index cdbbd0604..14e0f3d1d 100644 --- a/fj-kernel/src/algorithms/mod.rs +++ b/fj-kernel/src/algorithms/mod.rs @@ -1,3 +1,8 @@ +//! Collection of algorithms that are used by the kernel +//! +//! Algorithmic code is collected in this module, to keep other modules focused +//! on their respective purpose. + mod approximation; mod sweep; mod triangulation; diff --git a/fj-kernel/src/geometry/curves/circle.rs b/fj-kernel/src/geometry/curves/circle.rs index 68eceeedb..e2596e091 100644 --- a/fj-kernel/src/geometry/curves/circle.rs +++ b/fj-kernel/src/geometry/curves/circle.rs @@ -22,6 +22,7 @@ impl Circle { self.center } + /// Create a new instance that is transformed by `transform` #[must_use] pub fn transform(self, transform: &Transform) -> Self { let radius = self.radius.to_xyz(); @@ -75,6 +76,10 @@ impl Circle { Vector::from([x, y, Scalar::ZERO]) } + /// Approximate the circle + /// + /// `tolerance` specifies how much the approximation is allowed to deviate + /// from the circle. pub fn approx(&self, tolerance: Scalar, out: &mut Vec>) { let radius = self.radius.magnitude(); diff --git a/fj-kernel/src/geometry/curves/line.rs b/fj-kernel/src/geometry/curves/line.rs index 0ceeb225d..24865ce0d 100644 --- a/fj-kernel/src/geometry/curves/line.rs +++ b/fj-kernel/src/geometry/curves/line.rs @@ -28,7 +28,7 @@ impl Line { self.origin } - /// Transform the line + /// Create a new instance that is transformed by `transform` #[must_use] pub fn transform(self, transform: &Transform) -> Self { Self { diff --git a/fj-kernel/src/geometry/curves/mod.rs b/fj-kernel/src/geometry/curves/mod.rs index 343062679..e39a18b7f 100644 --- a/fj-kernel/src/geometry/curves/mod.rs +++ b/fj-kernel/src/geometry/curves/mod.rs @@ -32,6 +32,7 @@ impl Curve { } } + /// Create a new instance that is transformed by `transform` #[must_use] pub fn transform(self, transform: &Transform) -> Self { match self { diff --git a/fj-kernel/src/geometry/mod.rs b/fj-kernel/src/geometry/mod.rs index 59d2782ee..4781fe43d 100644 --- a/fj-kernel/src/geometry/mod.rs +++ b/fj-kernel/src/geometry/mod.rs @@ -1,3 +1,10 @@ +//! Geometry objects +//! +//! Simplifying a bit, geometry is responsible for where things are, but now how +//! they are related. The types in this module are referred to by the types in +//! [`crate::topology`], which are responsible for defining how objects are +//! related. + mod curves; mod points; mod surfaces; diff --git a/fj-kernel/src/shape/iter.rs b/fj-kernel/src/shape/iter.rs index a460f5cd5..53cd76ec4 100644 --- a/fj-kernel/src/shape/iter.rs +++ b/fj-kernel/src/shape/iter.rs @@ -5,6 +5,9 @@ use super::{ Store, }; +/// An iterator over geometric or topological objects +/// +/// Returned by various methods of the [`Shape`] API. pub struct Iter<'r, T> { inner: Inner<'r, T>, } diff --git a/fj-kernel/src/shape/mod.rs b/fj-kernel/src/shape/mod.rs index 683f01f20..18cf72a9f 100644 --- a/fj-kernel/src/shape/mod.rs +++ b/fj-kernel/src/shape/mod.rs @@ -1,3 +1,7 @@ +//! The API used for creating and manipulating shapes +//! +//! See [`Shape`], which is the main entry point to this API. + mod geometry; mod handle; mod iter; diff --git a/fj-kernel/src/shape/topology.rs b/fj-kernel/src/shape/topology.rs index ed8199e18..46cb5cc94 100644 --- a/fj-kernel/src/shape/topology.rs +++ b/fj-kernel/src/shape/topology.rs @@ -239,6 +239,7 @@ impl Topology<'_> { Iter::new(self.geometry.faces) } + /// Triangulate the shape pub fn triangles( &self, tolerance: Scalar, diff --git a/fj-kernel/src/topology/edges.rs b/fj-kernel/src/topology/edges.rs index ebcfad3fd..f844cd9f9 100644 --- a/fj-kernel/src/topology/edges.rs +++ b/fj-kernel/src/topology/edges.rs @@ -16,6 +16,7 @@ use super::vertices::Vertex; /// equality of topological objects. #[derive(Clone, Debug, Eq, Ord, PartialOrd)] pub struct Cycle { + /// The edges that make up the cycle pub edges: Vec>, } diff --git a/fj-kernel/src/topology/faces.rs b/fj-kernel/src/topology/faces.rs index 87337ef0a..30529231a 100644 --- a/fj-kernel/src/topology/faces.rs +++ b/fj-kernel/src/topology/faces.rs @@ -43,6 +43,8 @@ pub enum Face { /// It might be less error-prone to specify the edges in surface /// coordinates. cycles: Vec>, + + /// The color of the face color: [u8; 4], }, @@ -88,6 +90,7 @@ impl Face { } } + /// Triangulate the face pub fn triangles( &self, tolerance: Scalar, diff --git a/fj-kernel/src/topology/mod.rs b/fj-kernel/src/topology/mod.rs index e6f8544f1..6a72f0fd5 100644 --- a/fj-kernel/src/topology/mod.rs +++ b/fj-kernel/src/topology/mod.rs @@ -1,5 +1,10 @@ //! Topological objects //! +//! Simplifying a bit, topology is responsible for defining how objects are +//! related, as opposed to geometry, which is responsible for where things are. +//! +//! The types in this module use the types from [`crate::geometry`]. +//! //! # Equality //! //! Equality of topological objects is defined in terms of the geometry they diff --git a/fj-kernel/src/topology/vertices.rs b/fj-kernel/src/topology/vertices.rs index 5e54439ea..638e95477 100644 --- a/fj-kernel/src/topology/vertices.rs +++ b/fj-kernel/src/topology/vertices.rs @@ -19,6 +19,7 @@ use crate::shape::Handle; /// equality of topological objects. #[derive(Clone, Debug, Eq, Ord, PartialOrd)] pub struct Vertex { + /// The point that defines the location of the vertex pub point: Handle>, } From b529f33b3b379d6ab22df1498e06e9a47a7177e2 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 17 Mar 2022 17:41:18 +0100 Subject: [PATCH 16/16] Deny missing documentation in `fj-kernel` --- fj-kernel/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fj-kernel/src/lib.rs b/fj-kernel/src/lib.rs index 9a647f743..7e432c703 100644 --- a/fj-kernel/src/lib.rs +++ b/fj-kernel/src/lib.rs @@ -76,6 +76,8 @@ //! on a per-shape basis. Forcing the user to deal with these issues up-front //! should lead to less work overall. +#![deny(missing_docs)] + pub mod algorithms; pub mod geometry; pub mod shape;