From 06c270678f339c90d8253ba59210c449f393fd4a Mon Sep 17 00:00:00 2001 From: Anshul Singhvi Date: Tue, 9 Jun 2026 15:43:17 -0700 Subject: [PATCH 1/3] Add Rect4 type aliases and Extents.extent override for Rect4 (ZM) Adds `Rect4{T}` and concrete aliases (`Rect4d`, `Rect4f`, `Rect4i`) following the existing `Rect2`/`Rect3` pattern, and implements `Extents.extent` for 4D rectangles returning an Extent with X, Y, Z, M fields. Co-Authored-By: Claude Sonnet 4.6 --- src/GeometryBasics.jl | 2 +- src/primitives/rectangles.jl | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/GeometryBasics.jl b/src/GeometryBasics.jl index d01865ae..10991e63 100644 --- a/src/GeometryBasics.jl +++ b/src/GeometryBasics.jl @@ -57,7 +57,7 @@ export uv_mesh, normal_mesh, uv_normal_mesh export height, origin, radius, width, widths export HyperSphere, Circle, Sphere, Cone export Cylinder, Pyramid, extremity -export HyperRectangle, Rect, Rect2, Rect3, Recti, Rect2i, Rect3i, Rectf, Rect2f, Rect3f, Rectd, Rect2d, Rect3d, RectT +export HyperRectangle, Rect, Rect2, Rect3, Rect4, Recti, Rect2i, Rect3i, Rect4i, Rectf, Rect2f, Rect3f, Rect4f, Rectd, Rect2d, Rect3d, Rect4d, RectT export before, during, meets, overlaps, intersects, finishes export centered, direction, area, volume, update export max_dist_dim, max_euclidean, max_euclideansq, min_dist_dim, min_euclidean diff --git a/src/primitives/rectangles.jl b/src/primitives/rectangles.jl index 621dc769..2f2e4057 100644 --- a/src/primitives/rectangles.jl +++ b/src/primitives/rectangles.jl @@ -31,29 +31,34 @@ A rectangle in N dimensions, formally the Cartesian product of intervals. See al |`N`(dim)|`Rect{N,T}`|`Rectd{N}`|`Rectf{N}`|`Recti{N}`| |`2` |`Rect2{T}` |`Rect2d` |`Rect2f` |`Rect2i` | |`3` |`Rect3{T}` |`Rect3d` |`Rect3f` |`Rect3i` | +|`4` |`Rect4{T}` |`Rect4d` |`Rect4f` |`Rect4i` | There is an additional unexported alias `RectT` that simply reverses the order of type parameters: `RectT{T,N} == Rect{N,T}`. """ -Rect, Rect2, Rect3, RectT, Rectd, Rect2d, Rect3d, Rectf, Rect2f, Rect3f, Recti, Rect2i, Rect3i +Rect, Rect2, Rect3, Rect4, RectT, Rectd, Rect2d, Rect3d, Rect4d, Rectf, Rect2f, Rect3f, Rect4f, Recti, Rect2i, Rect3i, Rect4i const Rect{N,T} = HyperRectangle{N,T} const Rect2{T} = Rect{2,T} const Rect3{T} = Rect{3,T} +const Rect4{T} = Rect{4,T} const RectT{T,N} = Rect{N,T} const Rectd{N} = Rect{N,Float64} const Rect2d = Rect2{Float64} const Rect3d = Rect3{Float64} +const Rect4d = Rect4{Float64} const Rectf{N} = Rect{N,Float32} const Rect2f = Rect2{Float32} const Rect3f = Rect3{Float32} +const Rect4f = Rect4{Float32} const Recti{N} = Rect{N,Int} const Rect2i = Rect2{Int} const Rect3i = Rect3{Int} +const Rect4i = Rect4{Int} # Constructors @@ -599,3 +604,8 @@ function Extents.extent(rect::Rect3) (xmin, ymin, zmin), (xmax, ymax, zmax) = extrema(rect) return Extents.Extent(X=(xmin, xmax), Y=(ymin, ymax), Z=(zmin, zmax)) end + +function Extents.extent(rect::Rect4) + (xmin, ymin, zmin, mmin), (xmax, ymax, zmax, mmax) = extrema(rect) + return Extents.Extent(X=(xmin, xmax), Y=(ymin, ymax), Z=(zmin, zmax), M=(mmin, mmax)) +end From 9d09f0ad6c3bfee3b787035325d3f7ec098266fa Mon Sep 17 00:00:00 2001 From: Anshul Singhvi Date: Tue, 9 Jun 2026 15:51:00 -0700 Subject: [PATCH 2/3] Add test for Extents.extent(::Rect4) Covers the new Rect4 extent method and aliases, matching the existing Rect2/Rect3 test pattern in the Extent testset. Co-Authored-By: Claude Sonnet 4.6 --- test/geointerface.jl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/geointerface.jl b/test/geointerface.jl index b72b16d6..99acc4e2 100644 --- a/test/geointerface.jl +++ b/test/geointerface.jl @@ -128,6 +128,12 @@ end @test ext.X == (0.0f0, 1.0f0) @test ext.Y == (0.0f0, 1.0f0) @test ext.Z == (0.0f0, 1.0f0) + rect = Rect4f(Vec{4,Float32}(0), Vec{4,Float32}(1.0)) + ext = extent(rect) + @test ext.X == (0.0f0, 1.0f0) + @test ext.Y == (0.0f0, 1.0f0) + @test ext.Z == (0.0f0, 1.0f0) + @test ext.M == (0.0f0, 1.0f0) end @testset "coordtype" begin From 6b45ee6cb21c3bf8f03d597c4419bf8a00ed9a90 Mon Sep 17 00:00:00 2001 From: ffreyer Date: Wed, 10 Jun 2026 16:45:09 +0200 Subject: [PATCH 3/3] fix error --- ext/ExtentsExt.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/ExtentsExt.jl b/ext/ExtentsExt.jl index fd25d3b7..2b48a7ff 100644 --- a/ext/ExtentsExt.jl +++ b/ext/ExtentsExt.jl @@ -13,7 +13,7 @@ function Extents.extent(rect::GeometryBasics.Rect3) return Extents.Extent(X=(xmin, xmax), Y=(ymin, ymax), Z=(zmin, zmax)) end -function Extents.extent(rect::Rect4) +function Extents.extent(rect::GeometryBasics.Rect4) (xmin, ymin, zmin, mmin), (xmax, ymax, zmax, mmax) = extrema(rect) return Extents.Extent(X=(xmin, xmax), Y=(ymin, ymax), Z=(zmin, zmax), M=(mmin, mmax)) end