This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits 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 73c3ab4726 feat(Geometry): refactor Cone and Cylinder geometries. Add
Capsule,Frustrum,Plane,Ray geometries
73c3ab4726 is described below
commit 73c3ab4726db4449c440f473dfcca0a46c06b103
Author: jsorel <[email protected]>
AuthorDate: Wed May 6 09:46:38 2026 +0200
feat(Geometry): refactor Cone and Cylinder geometries. Add
Capsule,Frustrum,Plane,Ray geometries
---
.../main/org/apache/sis/geometries/Capsule.java | 126 +++++++++++++++++++
.../main/org/apache/sis/geometries/Cone.java | 30 -----
.../main/org/apache/sis/geometries/Cylinder.java | 108 +++++++++++++++-
.../main/org/apache/sis/geometries/Frustrum.java | 71 +++++++++++
.../main/org/apache/sis/geometries/Plane.java | 138 +++++++++++++++++++++
.../main/org/apache/sis/geometries/Ray.java | 128 +++++++++++++++++++
.../internal/shared/AbstractOrientedGeometry.java | 54 ++++++++
.../org/apache/sis/geometries/math/Transform.java | 2 +-
8 files changed, 623 insertions(+), 34 deletions(-)
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Capsule.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Capsule.java
new file mode 100644
index 0000000000..3c4f3952e0
--- /dev/null
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Capsule.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries;
+
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
+import static org.opengis.annotation.Specification.ISO_12113;
+import org.opengis.annotation.UML;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+
+/**
+ * A capsule (cylinder with hemispherical ends) centered at the origin and
defined by two "capping" spheres
+ * with potentially different radii, aligned along the Y axis in local space.
+ *
+ *
+ * @author Johann Sorel (Geomatys)
+ * @spec ISO_12113 KHR_implicit_shapes extension Capsule
+ */
+@UML(identifier="Capsule", specification=ISO_12113)
+public final class Capsule extends AbstractOrientedGeometry {
+
+ private double height = 1.0;
+ private double radiusTop = 1.0;
+ private double radiusBottom = 1.0;
+
+ public Capsule() {
+ }
+
+ @Override
+ public String getGeometryType() {
+ return "CAPSULE";
+ }
+
+ /**
+ * Height is along the Y axis, right handed as defined in GLTF.
+ * @return the cylinder height
+ */
+ public double getHeight() {
+ return height;
+ }
+
+ /**
+ * @param height new cylinder height
+ */
+ public void setHeight(double height) {
+ this.height = height;
+ }
+
+ /**
+ * @return cylinder top circle radius
+ */
+ public double getRadiusTop() {
+ return radiusTop;
+ }
+
+ /**
+ * @param radius new cylinder top radius
+ */
+ public void setRadiusTop(double radius) {
+ this.radiusTop = radius;
+ }
+
+ /**
+ * @return cylinder bottom circle radius
+ */
+ public double getRadiusBottom() {
+ return radiusBottom;
+ }
+
+ /**
+ * @param radius new cylinder bottom radius
+ */
+ public void setRadiusBottom(double radius) {
+ this.radiusBottom = radius;
+ }
+
+ /**
+ * A cylinder becomes a cone when the top or bottom radius is set to 0.0.
+ *
+ * @return true if cylinder is a cone, top or bottom radius is 0.0.
+ */
+ public boolean isCone() {
+ return radiusBottom == 0.0 || radiusTop == 0.0;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+
+ @Override
+ public CoordinateReferenceSystem getCoordinateReferenceSystem() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCoordinateReferenceSystem(CoordinateReferenceSystem crs)
throws IllegalArgumentException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public AttributesType getAttributesType() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+
+ @Override
+ public Envelope getUnorientedEnvelope() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cone.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cone.java
deleted file mode 100644
index 2715caa088..0000000000
---
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cone.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.geometries;
-
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
-
-
-/**
- * ISO 19107 : classified as a conic surface
- * @author Johann Sorel (Geomatys)
- */
-@UML(identifier="Cone", specification=ISO_19107) // section 8.5.3
-public interface Cone extends ParametricCurveSurface{
-
-}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java
index b9829c92c8..50e254aaf3 100644
---
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java
@@ -16,15 +16,117 @@
*/
package org.apache.sis.geometries;
-import static org.opengis.annotation.Specification.ISO_19107;
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
+import static org.opengis.annotation.Specification.ISO_12113;
import org.opengis.annotation.UML;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
/**
+ * A cylinder centered at the origin and aligned along the Y axis in local
space, with potentially different radii at each end.
+ * <p>
+ * A cone is a special case of cylinder when one of the radii is zero.
+ * <p>
+ * Synonym : conical frustrum is a volume defined by 2 circles aligned on the
same axis
+ *
* ISO 19107 : classified as a conic surface
+ *
* @author Johann Sorel (Geomatys)
+ * @spec ISO_19107 section 8.5.4 Cylinder
+ * @spec ISO_19107 section 8.5.3 Cone
+ * @spec ISO_12113 KHR_implicit_shapes extension Cylinder
*/
-@UML(identifier="Cylinder", specification=ISO_19107) // section 8.5.4
-public interface Cylinder extends Cone {
+@UML(identifier="Cylinder", specification=ISO_12113)
+public final class Cylinder extends AbstractOrientedGeometry {
+
+ private double height = 1.0;
+ private double radiusTop = 1.0;
+ private double radiusBottom = 1.0;
+
+ public Cylinder() {
+ }
+
+ @Override
+ public String getGeometryType() {
+ return "CYLINDER";
+ }
+
+ /**
+ * Height is along the Y axis, right handed as defined in GLTF.
+ * @return the cylinder height
+ */
+ public double getHeight() {
+ return height;
+ }
+
+ /**
+ * @param height new cylinder height
+ */
+ public void setHeight(double height) {
+ this.height = height;
+ }
+
+ /**
+ * @return cylinder top circle radius
+ */
+ public double getRadiusTop() {
+ return radiusTop;
+ }
+
+ /**
+ * @param radius new cylinder top radius
+ */
+ public void setRadiusTop(double radius) {
+ this.radiusTop = radius;
+ }
+
+ /**
+ * @return cylinder bottom circle radius
+ */
+ public double getRadiusBottom() {
+ return radiusBottom;
+ }
+
+ /**
+ * @param radius new cylinder bottom radius
+ */
+ public void setRadiusBottom(double radius) {
+ this.radiusBottom = radius;
+ }
+
+ /**
+ * A cylinder becomes a cone when the top or bottom radius is set to 0.0.
+ *
+ * @return true if cylinder is a cone, top or bottom radius is 0.0.
+ */
+ public boolean isCone() {
+ return radiusBottom == 0.0 || radiusTop == 0.0;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+
+ @Override
+ public CoordinateReferenceSystem getCoordinateReferenceSystem() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCoordinateReferenceSystem(CoordinateReferenceSystem crs)
throws IllegalArgumentException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public AttributesType getAttributesType() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Envelope getUnorientedEnvelope() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
new file mode 100644
index 0000000000..c0d8a2d361
--- /dev/null
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries;
+
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+/**
+ * A Frustum is a delimited space defined by one or many planes.
+ * It is often used to clip models outside the camera visible area.
+ *
+ * @author Johann Sorel
+ */
+public final class Frustrum extends AbstractGeometry {
+
+ private final Plane[] planes;
+
+ public Frustrum(Plane[] planes) {
+ this.planes = planes;
+ }
+
+ @Override
+ public String getGeometryType() {
+ return "FRUSTRUM";
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public Plane[] getPlanes() {
+ return planes;
+ }
+
+ @Override
+ public CoordinateReferenceSystem getCoordinateReferenceSystem() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCoordinateReferenceSystem(CoordinateReferenceSystem crs)
throws IllegalArgumentException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public AttributesType getAttributesType() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Envelope getEnvelope() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java
new file mode 100644
index 0000000000..166a1edb41
--- /dev/null
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries;
+
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
+import static org.opengis.annotation.Specification.ISO_12113;
+import org.opengis.annotation.UML;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+
+/**
+ * A plane centered at the origin in local space, with normal along the +Y
axis in local space,
+ * optionally with finite extents and may be double or single-sided.
+ * <p>
+ * Synonym : Quad , for a plane with finite extents
+ * <p>
+ * Synonym : Sheet , for a double-sided plane
+ *
+ *
+ * @author Johann Sorel (Geomatys)
+ * @spec ISO_12113 KHR_implicit_shapes extension Plane
+ */
+@UML(identifier="Plane", specification=ISO_12113)
+public final class Plane extends AbstractOrientedGeometry {
+
+ private double sizeX = Double.NaN;
+ private double sizeZ = Double.NaN;
+ private boolean doubleSided = false;
+
+ public Plane() {
+ }
+
+ @Override
+ public String getGeometryType() {
+ return "PLANE";
+ }
+
+ /**
+ * @return the plane X size
+ */
+ public double getSizeX() {
+ return sizeX;
+ }
+
+ /**
+ * @param size new plane X size
+ */
+ public void setSizeX(double size) {
+ this.sizeX = size;
+ }
+
+ /**
+ * @return the plane Z size
+ */
+ public double getSizeZ() {
+ return sizeZ;
+ }
+
+ /**
+ * @param size new plane Z size
+ */
+ public void setSizeZ(double size) {
+ this.sizeZ = size;
+ }
+
+ /**
+ * @return true if double sided
+ */
+ public boolean isDoubleSided() {
+ return doubleSided;
+ }
+
+ /**
+ * @param doubleSided true if double sided
+ */
+ public void setDoubleSided(boolean doubleSided) {
+ this.doubleSided = doubleSided;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+
+ /**
+ * A plane becomes a quad when the sizes are set.
+ *
+ * @return true if plane is a quad
+ */
+ public boolean isQuad() {
+ return Double.isFinite(sizeX) && Double.isFinite(sizeZ);
+ }
+
+ /**
+ * A plane becomes a sheet when it is double sided.
+ *
+ * @return true if plane is a sheet
+ */
+ public boolean isSheet() {
+ return doubleSided;
+ }
+
+ @Override
+ public CoordinateReferenceSystem getCoordinateReferenceSystem() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCoordinateReferenceSystem(CoordinateReferenceSystem crs)
throws IllegalArgumentException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public AttributesType getAttributesType() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+
+ @Override
+ public Envelope getUnorientedEnvelope() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
new file mode 100644
index 0000000000..0099ddf63f
--- /dev/null
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries;
+
+import java.util.Objects;
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.geometries.math.Vectors;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+
+/**
+ * A ray is a one direction infinite line.
+ * It is build from a position and a direction.
+ *
+ * @author Johann Sorel
+ */
+public final class Ray extends AbstractGeometry{
+
+ private Tuple<?> position;
+ private Vector<?> direction;
+
+ public Ray(int dimension) {
+ this(Vectors.createDouble(dimension),Vectors.createDouble(dimension));
+ }
+
+ public Ray(Tuple<?> position, Vector<?> direction) {
+ this.position = position;
+ this.direction = direction;
+ }
+
+ @Override
+ public String getGeometryType() {
+ return "RAY";
+ }
+
+ public Tuple<?> getPosition() {
+ return position;
+ }
+
+ public void setPosition(Tuple<?> position) {
+ this.position = position;
+ }
+
+ public Vector<?> getDirection() {
+ return direction;
+ }
+
+ public void setDirection(Vector<?> direction) {
+ this.direction = direction;
+ }
+
+ @Override
+ public BBox getEnvelope() {
+ final int dim = direction.getDimension();
+ final BBox bbox = new BBox(dim);
+ for (int i=0;i<dim;i++){
+ double d = direction.get(i);
+ if (d<0){
+ bbox.setRange(i, Double.NEGATIVE_INFINITY, position.get(i));
+ } else if (d>0){
+ bbox.setRange(i, position.get(i), Double.POSITIVE_INFINITY);
+ } else {
+ bbox.setRange(i, position.get(i), position.get(i));
+ }
+ }
+ return bbox;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+
+ @Override
+ public CoordinateReferenceSystem getCoordinateReferenceSystem() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void setCoordinateReferenceSystem(CoordinateReferenceSystem crs)
throws IllegalArgumentException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public AttributesType getAttributesType() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final Ray other = (Ray) obj;
+ if (this.position != other.position && (this.position == null ||
!this.position.equals(other.position))) {
+ return false;
+ }
+ return this.direction == other.direction || (this.direction != null &&
this.direction.equals(other.direction));
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 3;
+ hash = 89 * hash + Objects.hashCode(this.position);
+ hash = 89 * hash + Objects.hashCode(this.direction);
+ return hash;
+ }
+}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
new file mode 100644
index 0000000000..a6b08fd9c9
--- /dev/null
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries.internal.shared;
+
+import org.apache.sis.geometries.OrientedGeometry;
+import org.apache.sis.geometries.math.Similarity;
+import org.apache.sis.geometries.math.Similarity3D;
+import org.opengis.geometry.Envelope;
+
+
+/**
+ * Abstract oriented geometry.
+ *
+ * @author Johann Sorel (Geomatys)
+ */
+public abstract class AbstractOrientedGeometry extends AbstractGeometry
implements OrientedGeometry{
+
+ protected final Similarity<?> transform;
+
+ public AbstractOrientedGeometry() {
+ this.transform = new Similarity3D();
+ }
+
+ @Override
+ public Similarity<?> getTransform() {
+ return transform;
+ }
+
+ @Override
+ public Envelope getEnvelope() {
+ Envelope unenv = getUnorientedEnvelope();
+ if (unenv == null) return null;
+
+ double[] lower = unenv.getLowerCorner().getCoordinates();
+ double[] upper = unenv.getUpperCorner().getCoordinates();
+
+ throw new UnsupportedOperationException("Not supported yet");
+ }
+
+}
diff --git
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java
index 59150854c0..5ba1f3f39b 100644
---
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java
+++
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java
@@ -23,7 +23,7 @@ import static org.apache.sis.geometries.math.DataType.FLOAT;
* A Transformation is a mathematic operation which transform a tuple values.
* Example : Affine, Matrix, Similarity.
*
- * This class is a experimental light and GIS neutral version of MathTransform.
+ * This class is an experimental light and GIS neutral version of
MathTransform.
* This class will evolve to match requirements for the upcoming Java Vector
API and Java HAT Kernel.
*
* @author Johann Sorel (Geomatys)