This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
new 1084046ff4 Correction in `transform(MathTransform)` method contract:
CRS is null. Avoid copying the shape in `toJava2D()`.
1084046ff4 is described below
commit 1084046ff466aa99f682933595d526b90a3ee115
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Mon Jan 29 11:13:31 2024 +0100
Correction in `transform(MathTransform)` method contract: CRS is null.
Avoid copying the shape in `toJava2D()`.
---
.../org/apache/sis/geometry/wrapper/GeometryWrapper.java | 15 +++++++++------
.../main/org/apache/sis/geometry/wrapper/j2d/Wrapper.java | 6 +++---
.../main/org/apache/sis/geometry/wrapper/jts/Wrapper.java | 10 ++++++----
3 files changed, 18 insertions(+), 13 deletions(-)
diff --git
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/GeometryWrapper.java
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/GeometryWrapper.java
index 319ca1672f..882fa1e96d 100644
---
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/GeometryWrapper.java
+++
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/GeometryWrapper.java
@@ -475,16 +475,17 @@ public abstract class GeometryWrapper extends
AbstractGeometry implements Geomet
/**
* Transforms this geometry using the given transform.
* If the transform is {@code null}, then the geometry is returned
unchanged.
- * The geometry CRS remains unchanged.
+ * Otherwise, a new geometry is returned without CRS.
*
* @param transform the math transform to apply, or {@code null}.
* @return the transformed geometry (may be the same geometry instance,
but never {@code null}).
* @throws UnsupportedOperationException if this operation is not
supported for current implementation.
* @throws TransformException if the geometry cannot be transformed.
*/
- public GeometryWrapper transform(MathTransform transform)
- throws TransformException
- {
+ public GeometryWrapper transform(MathTransform transform) throws
TransformException {
+ if (transform == null || transform.isIdentity()) {
+ return this;
+ }
throw new
UnsupportedOperationException(Geometries.unsupported("transform"));
}
@@ -542,9 +543,11 @@ public abstract class GeometryWrapper extends
AbstractGeometry implements Geomet
/**
* Returns a Java2D shape made from this geometry.
+ * The returned shape may be a view backed by the {@linkplain
#implementation() geometry implementation},
+ * or may be an internal object returned directly. Caller should not
attempt to modify the returned shape.
+ * Changes in the geometry implementation may or may not be reflected in
the returned Java2D shape.
*
- * @param geometry the geometry as a shape, not {@code null}.
- * @return the Java2D shape.
+ * @return a view, copy or direct reference to the geometry as a Java2D
shape.
* @throws UnsupportedOperationException if this operation is not
supported for current implementation.
*/
public Shape toJava2D() {
diff --git
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/j2d/Wrapper.java
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/j2d/Wrapper.java
index 8ca25c929c..b03fe61104 100644
---
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/j2d/Wrapper.java
+++
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/j2d/Wrapper.java
@@ -22,7 +22,6 @@ import java.util.Iterator;
import java.util.function.BiPredicate;
import java.awt.Shape;
import java.awt.geom.Area;
-import java.awt.geom.GeneralPath;
import java.awt.geom.Path2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
@@ -199,11 +198,12 @@ add: for (;;) {
}
/**
- * @return shape copy.
+ * {@return directly the underlying Java2D geometry}. This method does not
copy the shape.
+ * Caller should not modify the returned shape (by casting to an
implementation class).
*/
@Override
public Shape toJava2D() {
- return new GeneralPath(geometry);
+ return geometry;
}
/**
diff --git
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java
index 882e9106df..aeede8b8a3 100644
---
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java
+++
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/geometry/wrapper/jts/Wrapper.java
@@ -17,7 +17,6 @@
package org.apache.sis.geometry.wrapper.jts;
import java.awt.Shape;
-import java.awt.geom.GeneralPath;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
@@ -733,7 +732,7 @@ add: for (Geometry next = geometry;;) {
/**
* Transforms this geometry using the given transform.
* If the transform is {@code null}, then the geometry is returned
unchanged.
- * The geometry CRS remains unchanged.
+ * Otherwise, a new geometry is returned without CRS.
*
* @param transform the math transform to apply, or {@code null}.
* @return the transformed geometry (may be the same geometry instance,
but never {@code null}).
@@ -745,11 +744,14 @@ add: for (Geometry next = geometry;;) {
}
/**
- * @return GeneralPath from current JTS Geometry.
+ * Returns a view over the JTS geometry as a Java2D shape. Changes in the
JTS geometry
+ * after this method call may be reflected in the returned shape in an
unspecified way.
+ *
+ * @return a view over the geometry as a Java2D shape.
*/
@Override
public Shape toJava2D() {
- return new GeneralPath(JTS.asShape(geometry));
+ return JTS.asShape(geometry);
}
/**