@@ -17,7 +17,9 @@ struct TransformedGeometry{M<:Manifold,C<:CRS,G<:Geometry,T<:Transform} <: Geome
1717end
1818
1919function TransformedGeometry (g:: Geometry , t:: Transform )
20- p = t (centroid (g))
20+ D = paramdim (g)
21+ T = numtype (lentype (g))
22+ p = t (isparametrized (g) ? g (ntuple (i -> zero (T), D)... ) : centroid (g))
2123 TransformedGeometry {manifold(p),crs(p)} (g, t)
2224end
2325
@@ -43,10 +45,20 @@ transform(g::TransformedGeometry) = g.transform
4345
4446paramdim (g:: TransformedGeometry ) = paramdim (g. geometry)
4547
46- == (g₁:: TransformedGeometry , g₂:: TransformedGeometry ) = g₁. transform == g₂. transform && g₁. geometry == g₂. geometry
48+ == (g₁:: TransformedGeometry , g₂:: TransformedGeometry ) = _isequal (g₁, g₂)
49+
50+ == (g₁:: TransformedGeometry , g₂:: Geometry ) = _isequal (g₁, g₂)
51+
52+ == (g₁:: Geometry , g₂:: TransformedGeometry ) = _isequal (g₁, g₂)
4753
4854Base. isapprox (g₁:: TransformedGeometry , g₂:: TransformedGeometry ; atol= atol (lentype (g₁)), kwargs... ) =
49- isapprox (g₁. geometry, g₂. geometry; atol, kwargs... ) && g₁. transform == g₂. transform
55+ _isapprox (g₁, g₂; atol, kwargs... )
56+
57+ Base. isapprox (g₁:: TransformedGeometry , g₂:: Geometry ; atol= atol (lentype (g₁)), kwargs... ) =
58+ _isapprox (g₁, g₂; atol, kwargs... )
59+
60+ Base. isapprox (g₁:: Geometry , g₂:: TransformedGeometry ; atol= atol (lentype (g₁)), kwargs... ) =
61+ _isapprox (g₁, g₂; atol, kwargs... )
5062
5163(g:: TransformedGeometry )(uvw... ) = g. transform (g. geometry (uvw... ))
5264
@@ -74,7 +86,16 @@ rings(p::TransformedPolygon) = map(p.transform, rings(p.geometry))
7486# IO METHODS
7587# -----------
7688
77- function Base. summary (io:: IO , g:: TransformedGeometry )
78- name = prettyname (g. geometry)
79- print (io, " Transformed$name " )
89+ prettyname (g:: TransformedGeometry ) = " Transformed$(prettyname (g. geometry)) "
90+
91+ # -----------------
92+ # HELPER FUNCTIONS
93+ # -----------------
94+
95+ _isequal (g₁, g₂) = pointify (g₁) == pointify (g₂)
96+
97+ function _isapprox (g₁, g₂; kwargs... )
98+ ps₁ = pointify (g₁)
99+ ps₂ = pointify (g₂)
100+ length (ps₁) == length (ps₂) && all (isapprox (p₁, p₂; atol, kwargs... ) for (p₁, p₂) in zip (ps₁, ps₂))
80101end
0 commit comments