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 f1961d6459 feat(Geometry): replace Vector by ReadOnly.Vector where a 
modifiable version is not requiere
f1961d6459 is described below

commit f1961d6459103f16a5ecb88bb628d7b73f87f831
Author: jsorel <[email protected]>
AuthorDate: Thu Oct 8 16:02:40 2026 +0200

    feat(Geometry): replace Vector by ReadOnly.Vector where a modifiable 
version is not requiere
---
 .../main/org/apache/sis/geometries/BBox.java             |  5 +++--
 .../main/org/apache/sis/geometries/DataPoints.java       |  5 +++--
 .../main/org/apache/sis/geometries/HyperPlane.java       | 13 +++++++------
 .../main/org/apache/sis/geometries/Plane.java            | 13 +++++++------
 .../main/org/apache/sis/geometries/Point.java            |  7 ++++---
 .../main/org/apache/sis/geometries/Ray.java              | 13 +++++++------
 .../org/apache/sis/geometries/adapter/JTSAdapter.java    |  5 +++--
 .../sis/geometries/internal/shared/ArrayDataPoints.java  |  7 ++++---
 .../internal/shared/ConcatenatedDataPoints.java          |  5 +++--
 .../geometries/internal/shared/DefaultDataPoints.java    |  5 +++--
 .../sis/geometries/internal/shared/DefaultPoint.java     |  3 ++-
 .../sis/geometries/internal/shared/EmptyDataPoints.java  |  5 +++--
 .../sis/geometries/internal/shared/IndexedPoint.java     |  3 ++-
 .../internal/shared/SinglePositionDataPoints.java        |  5 +++--
 .../org/apache/sis/geometries/mesh/MeshPrimitive.java    |  7 ++++---
 .../operation/simplify/greedyinsert/WTriangle.java       |  5 +++--
 .../operation/triangulate/delaunay/OrientedEdge.java     |  5 +++--
 .../operation/triangulate/delaunay/OrientedTriangle.java |  5 +++--
 .../main/org/apache/sis/geometries/point/MultiPoint.java |  5 +++--
 .../main/org/apache/sis/geometries/solid/Capsule.java    | 16 ++++++++--------
 .../main/org/apache/sis/geometries/solid/Cylinder.java   | 15 ++++++++-------
 .../main/org/apache/sis/geometries/solid/Ellipsoid.java  |  7 ++++---
 .../main/org/apache/sis/geometries/solid/Sphere.java     |  7 ++++---
 .../main/org/apache/sis/geometries/surface/Triangle.java |  3 ++-
 24 files changed, 96 insertions(+), 73 deletions(-)

diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
index 3fd7dbdd11..4bc0e2a9a6 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
@@ -24,6 +24,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.IndexedPoint;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vectors;
 import org.apache.sis.maths.Vector;
@@ -187,7 +188,7 @@ public final class BBox extends GeneralEnvelope implements 
Geometry {
         }
 
         @Override
-        public void setPosition(int index, Vector<?> value) {
+        public void setPosition(int index, ReadOnly.Vector<?> value) {
             ensureValid(index);
             final int dim = getDimension();
             for (int i = 0; i < dim; i++) {
@@ -205,7 +206,7 @@ public final class BBox extends GeneralEnvelope implements 
Geometry {
         }
 
         @Override
-        public void setAttribute(int index, String name, Vector<?> value) {
+        public void setAttribute(int index, String name, ReadOnly.Vector<?> 
value) {
             if (!DataPointsType.ATT_POSITION.equals(name)) {
                 throw new IllegalArgumentException("A box holds no \"" + name 
+ "\" attribute.");
             }
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
index 189b644e08..2b699574e5 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
@@ -24,6 +24,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vector;
 
@@ -109,7 +110,7 @@ public interface DataPoints {
      * @param index searched index
      * @param value new attribute value
      */
-    void setPosition(int index, Vector<?> value);
+    void setPosition(int index, ReadOnly.Vector<?> value);
 
     /**
      * Get attribute value.
@@ -127,7 +128,7 @@ public interface DataPoints {
      * @param name attribute name
      * @param value new attribute value
      */
-    void setAttribute(int index, String name, Vector<?> value);
+    void setAttribute(int index, String name, ReadOnly.Vector<?> value);
 
     /**
      * Get all attribute values as an Array.
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
index 66b60cfe94..a71323bed5 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
@@ -22,6 +22,7 @@ import org.opengis.annotation.UML;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -80,20 +81,20 @@ public final class HyperPlane extends AbstractGeometry{
         return points;
     }
 
-    public Vector<?> getPosition() {
+    public ReadOnly.Vector<?> getPosition() {
         return points.getPosition(0);
     }
 
-    public void setPosition(Vector<?> position) {
+    public void setPosition(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
-    public Vector<?> getNormal() {
+    public ReadOnly.Vector<?> getNormal() {
         return normal;
     }
 
-    public void setNormal(Vector<?> normal) {
-        this.normal = normal;
+    public void setNormal(ReadOnly.Vector<?> normal) {
+        this.normal = normal.copy();
     }
 
     /**
@@ -106,7 +107,7 @@ public final class HyperPlane extends AbstractGeometry{
      */
     @Override
     public BBox getEnvelope() {
-        final Vector<?> position = getPosition();
+        final ReadOnly.Vector<?> position = getPosition();
         final int dim = normal.getDimension();
         final BBox bbox = new BBox(dim);
         /*
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
index 13c13f0a38..ab2c678992 100644
--- 
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
@@ -22,6 +22,7 @@ import org.opengis.annotation.UML;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -92,20 +93,20 @@ public final class Plane extends AbstractGeometry{
         return points;
     }
 
-    public Vector<?> getPosition() {
+    public ReadOnly.Vector<?> getPosition() {
         return points.getPosition(0);
     }
 
-    public void setPosition(Vector<?> position) {
+    public void setPosition(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
-    public Vector<?> getNormal() {
+    public ReadOnly.Vector<?> getNormal() {
         return normal;
     }
 
-    public void setNormal(Vector<?> normal) {
-        this.normal = normal;
+    public void setNormal(ReadOnly.Vector<?> normal) {
+        this.normal = normal.copy();
     }
 
     /**
@@ -167,7 +168,7 @@ public final class Plane extends AbstractGeometry{
      */
     @Override
     public BBox getEnvelope() {
-        final Vector<?> position = getPosition();
+        final ReadOnly.Vector<?> position = getPosition();
         final int dim = normal.getDimension();
         final BBox bbox = new BBox(dim);
         /*
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
index 3763a767c2..e35674e779 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
@@ -28,6 +28,7 @@ import org.apache.sis.geometries.internal.shared.DefaultPoint;
 import org.apache.sis.geometries.internal.shared.IndexedPoint;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -94,7 +95,7 @@ public sealed interface Point extends Primitive
      * @param name  name of the attribute to set.
      * @param tuple new attribute value.
      */
-    void setAttribute(String name, Vector<?> tuple);
+    void setAttribute(String name, ReadOnly.Vector<?> tuple);
 
     /**
      * View this point as a single point sequence
@@ -132,7 +133,7 @@ public sealed interface Point extends Primitive
             }
 
             @Override
-            public void setPosition(int index, Vector<?> value) {
+            public void setPosition(int index, ReadOnly.Vector<?> value) {
                 if (index != 0) throw new IndexOutOfBoundsException();
                 Point.this.getPosition().set(value);
             }
@@ -144,7 +145,7 @@ public sealed interface Point extends Primitive
             }
 
             @Override
-            public void setAttribute(int index, String name, Vector<?> value) {
+            public void setAttribute(int index, String name, 
ReadOnly.Vector<?> value) {
                 if (index != 0) throw new IndexOutOfBoundsException();
                 Point.this.setAttribute(name, value);
             }
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
index 1bc4f69b71..dffa41de94 100644
--- 
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
@@ -20,6 +20,7 @@ import java.util.Objects;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -77,25 +78,25 @@ public final class Ray extends AbstractGeometry{
         return points;
     }
 
-    public Vector<?> getPosition() {
+    public ReadOnly.Vector<?> getPosition() {
         return points.getPosition(0);
     }
 
-    public void setPosition(Vector<?> position) {
+    public void setPosition(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
-    public Vector<?> getDirection() {
+    public ReadOnly.Vector<?> getDirection() {
         return direction;
     }
 
-    public void setDirection(Vector<?> direction) {
-        this.direction = direction;
+    public void setDirection(ReadOnly.Vector<?> direction) {
+        this.direction = direction.copy();
     }
 
     @Override
     public BBox getEnvelope() {
-        final Vector<?> position = getPosition();
+        final ReadOnly.Vector<?> position = getPosition();
         final int dim = direction.getDimension();
         final BBox bbox = new BBox(dim);
         for (int i=0;i<dim;i++){
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
index 9a6881dd3e..369251e044 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
@@ -42,6 +42,7 @@ import org.apache.sis.maths.Array;
 import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vectors;
 import org.apache.sis.maths.Vector;
@@ -279,7 +280,7 @@ public final class JTSAdapter {
         }
 
         @Override
-        public void setPosition(int index, Vector value) {
+        public void setPosition(int index, ReadOnly.Vector value) {
             for (int i = 0; i < dim; i++) {
                 jts.setOrdinate(index, i, value.get(i));
             }
@@ -294,7 +295,7 @@ public final class JTSAdapter {
         }
 
         @Override
-        public void setAttribute(int index, String name, Vector value) {
+        public void setAttribute(int index, String name, ReadOnly.Vector 
value) {
             if (DataPointsType.ATT_POSITION.equals(name)) {
                 setPosition(index, value);
             } else {
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
index 96abdcb00f..5907bde516 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
@@ -30,6 +30,7 @@ import org.apache.sis.maths.Array;
 import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.maths.Vector;
@@ -97,7 +98,7 @@ public final class ArrayDataPoints implements DataPoints, 
DataPointsType {
     }
 
     @Override
-    public void setPosition(int index, Vector value) {
+    public void setPosition(int index, ReadOnly.Vector value) {
         positions.set(index, value);
     }
 
@@ -128,7 +129,7 @@ public final class ArrayDataPoints implements DataPoints, 
DataPointsType {
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector value) {
         attributes.get(name).set(index, value);
     }
 
@@ -214,7 +215,7 @@ public final class ArrayDataPoints implements DataPoints, 
DataPointsType {
         }
 
         @Override
-        public void setAttribute(String name, Vector tuple) {
+        public void setAttribute(String name, ReadOnly.Vector tuple) {
             final Array tupleGrid = parent.attributes.get(name);
             if (tupleGrid == null) throw new 
IllegalArgumentException("Attribute " + name + " do not exist");
             final Cursor cursor = tupleGrid.cursor();
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ConcatenatedDataPoints.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ConcatenatedDataPoints.java
index 11a030d41d..bdec3d2233 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ConcatenatedDataPoints.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ConcatenatedDataPoints.java
@@ -24,6 +24,7 @@ import org.apache.sis.geometries.DataPointsType;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -154,7 +155,7 @@ public final class ConcatenatedDataPoints implements 
DataPoints {
     }
 
     @Override
-    public void setPosition(int index, Vector<?> value) {
+    public void setPosition(int index, ReadOnly.Vector<?> value) {
         final int i = sourceOf(index);
         sources[i].setPosition(index - offsets[i], value);
     }
@@ -166,7 +167,7 @@ public final class ConcatenatedDataPoints implements 
DataPoints {
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector<?> value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector<?> value) 
{
         final int i = sourceOf(index);
         sources[i].setAttribute(index - offsets[i], name, value);
     }
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
index 81bc6893c1..23d0318920 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
@@ -22,6 +22,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.DataPointsType;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.maths.Vector;
 
@@ -77,7 +78,7 @@ public final class DefaultDataPoints implements DataPoints {
     }
 
     @Override
-    public void setPosition(int index, Vector value) {
+    public void setPosition(int index, ReadOnly.Vector value) {
         points.get(index).getPosition().set(value);
     }
 
@@ -87,7 +88,7 @@ public final class DefaultDataPoints implements DataPoints {
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector value) {
         points.get(index).setAttribute(name, value);
     }
 
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
index 7c006f19e0..027515aae8 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
@@ -23,6 +23,7 @@ import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.DataPointsType;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vector;
 
@@ -94,7 +95,7 @@ public non-sealed class DefaultPoint extends AbstractGeometry 
implements Point {
     }
 
     @Override
-    public void setAttribute(String name, Vector tuple) {
+    public void setAttribute(String name, ReadOnly.Vector tuple) {
         points.setAttribute(0, name, tuple);
     }
 
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/EmptyDataPoints.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/EmptyDataPoints.java
index a840e9ac76..fd3e873b5b 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/EmptyDataPoints.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/EmptyDataPoints.java
@@ -20,6 +20,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.DataPointsType;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -89,7 +90,7 @@ public final class EmptyDataPoints implements DataPoints {
     }
 
     @Override
-    public void setPosition(int index, Vector<?> value) {
+    public void setPosition(int index, ReadOnly.Vector<?> value) {
         throw new IndexOutOfBoundsException("This sequence holds no 
position.");
     }
 
@@ -99,7 +100,7 @@ public final class EmptyDataPoints implements DataPoints {
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector<?> value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector<?> value) 
{
         throw new IndexOutOfBoundsException("This sequence holds no 
position.");
     }
 
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/IndexedPoint.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/IndexedPoint.java
index 298e1656ab..b15198864a 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/IndexedPoint.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/IndexedPoint.java
@@ -20,6 +20,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.DataPointsType;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -63,7 +64,7 @@ public non-sealed class IndexedPoint implements Point {
     }
 
     @Override
-    public void setAttribute(String name, Vector tuple) {
+    public void setAttribute(String name, ReadOnly.Vector tuple) {
         parent.setAttribute(index, name, tuple);
     }
 
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/SinglePositionDataPoints.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/SinglePositionDataPoints.java
index 981ec72d99..b0dcaa51c4 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/SinglePositionDataPoints.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/SinglePositionDataPoints.java
@@ -22,6 +22,7 @@ import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.DataPointsType;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vector;
 
@@ -98,7 +99,7 @@ public final class SinglePositionDataPoints implements 
DataPoints {
     }
 
     @Override
-    public void setPosition(int index, Vector<?> value) {
+    public void setPosition(int index, ReadOnly.Vector<?> value) {
         ensureValid(index);
         position.get().set(value);
     }
@@ -110,7 +111,7 @@ public final class SinglePositionDataPoints implements 
DataPoints {
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector<?> value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector<?> value) 
{
         ensureValid(index);
         if (!DataPointsType.ATT_POSITION.equals(name)) {
             throw new IllegalArgumentException("This sequence holds no \"" + 
name + "\" attribute.");
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
index 4bb254a75b..5c290e46d7 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
@@ -51,6 +51,7 @@ import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vector1D;
@@ -1040,7 +1041,7 @@ public sealed interface MeshPrimitive extends Geometry
         }
 
         @Override
-        public void setAttribute(String name, Vector tuple) {
+        public void setAttribute(String name, ReadOnly.Vector tuple) {
             final Array tupleGrid = parent.attributes.get(name);
             if (tupleGrid == null) throw new 
IllegalArgumentException("Attribute " + name + " do not exist");
             final Cursor cursor = tupleGrid.cursor();
@@ -1124,12 +1125,12 @@ public sealed interface MeshPrimitive extends Geometry
         }
 
         @Override
-        public void setPosition(int index, Vector value) {
+        public void setPosition(int index, ReadOnly.Vector value) {
             primitive.getPositions().set(this.index[index], value);
         }
 
         @Override
-        public void setAttribute(int index, String name, Vector value) {
+        public void setAttribute(int index, String name, ReadOnly.Vector 
value) {
             primitive.getAttribute(name).set(this.index[index], value);
         }
 
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
index 5f51939781..bd5d8ca74f 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
@@ -30,6 +30,7 @@ import org.apache.sis.geometries.internal.shared.IndexedPoint;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -85,7 +86,7 @@ public final class WTriangle extends AbstractGeometry 
implements Triangle {
         }
 
         @Override
-        public void setPosition(int index, Vector value) {
+        public void setPosition(int index, ReadOnly.Vector value) {
             throw new UnsupportedOperationException("Not supported.");
         }
 
@@ -98,7 +99,7 @@ public final class WTriangle extends AbstractGeometry 
implements Triangle {
         }
 
         @Override
-        public void setAttribute(int index, String name, Vector value) {
+        public void setAttribute(int index, String name, ReadOnly.Vector 
value) {
             if (DataPointsType.ATT_POSITION.equals(name)) {
                 setPosition(index, value);
                 return;
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
index 8e7d43181b..f9ec9d9b7d 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
@@ -26,6 +26,7 @@ import 
org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -254,7 +255,7 @@ public final class OrientedEdge extends AbstractGeometry 
implements LineString,
     }
 
     @Override
-    public void setPosition(int index, Vector value) {
+    public void setPosition(int index, ReadOnly.Vector value) {
         throw new UnsupportedOperationException("Not supported.");
     }
 
@@ -267,7 +268,7 @@ public final class OrientedEdge extends AbstractGeometry 
implements LineString,
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector value) {
         if (DataPointsType.ATT_POSITION.equals(name)) {
             setPosition(index, value);
             return;
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
index 46a28f5252..7682faf715 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
@@ -29,6 +29,7 @@ import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.referencing.internal.shared.ShapeUtilities;
 import org.apache.sis.maths.Vector;
 
@@ -284,7 +285,7 @@ public final class OrientedTriangle extends 
AbstractGeometry implements Triangle
     }
 
     @Override
-    public void setPosition(int index, Vector value) {
+    public void setPosition(int index, ReadOnly.Vector value) {
         throw new UnsupportedOperationException("Not supported.");
     }
 
@@ -297,7 +298,7 @@ public final class OrientedTriangle extends 
AbstractGeometry implements Triangle
     }
 
     @Override
-    public void setAttribute(int index, String name, Vector value) {
+    public void setAttribute(int index, String name, ReadOnly.Vector value) {
         if (DataPointsType.ATT_POSITION.equals(name)) {
             setPosition(index, value);
             return;
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
index 1b766fbd4b..f85567d92a 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
@@ -26,6 +26,7 @@ import org.apache.sis.geometries.DataPointsType;
 import org.apache.sis.geometries.internal.shared.DefaultMultiPoint;
 import org.apache.sis.geometries.internal.shared.DefaultRawMultiPoint;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 
 
@@ -94,7 +95,7 @@ public sealed interface MultiPoint<T extends Point> extends 
GeometryCollection<T
             }
 
             @Override
-            public void setPosition(int index, Vector value) {
+            public void setPosition(int index, ReadOnly.Vector value) {
                 MultiPoint.this.getGeometryN(index).getPosition().set(value);
             }
 
@@ -104,7 +105,7 @@ public sealed interface MultiPoint<T extends Point> extends 
GeometryCollection<T
             }
 
             @Override
-            public void setAttribute(int index, String name, Vector value) {
+            public void setAttribute(int index, String name, ReadOnly.Vector 
value) {
                 MultiPoint.this.getGeometryN(index).setAttribute(name, value);
             }
 
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
index 154a7ecc57..755a477115 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
@@ -28,7 +28,7 @@ import org.apache.sis.geometries.GeometryType;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vectors;
 import org.apache.sis.maths.Vector;
 
@@ -92,28 +92,28 @@ public final class Capsule extends AbstractGeometry{
     /**
      * @return the center of the bottom sphere
      */
-    public Vector<?> getBottom() {
+    public ReadOnly.Vector<?> getBottom() {
         return points.getPosition(0);
     }
 
     /**
      * @param position new center of the bottom sphere
      */
-    public void setBottom(Vector<?> position) {
+    public void setBottom(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
     /**
      * @return the center of the top sphere
      */
-    public Vector<?> getTop() {
+    public ReadOnly.Vector<?> getTop() {
         return points.getPosition(1);
     }
 
     /**
      * @param position new center of the top sphere
      */
-    public void setTop(Vector<?> position) {
+    public void setTop(ReadOnly.Vector<?> position) {
         points.setPosition(1, position);
     }
 
@@ -123,7 +123,7 @@ public final class Capsule extends AbstractGeometry{
      * an axis being real values even when the positions they are derived from 
are integers.
      */
     private Vector<?> getAxis() {
-        final Vector<?> bottom = getBottom();
+        final ReadOnly.Vector<?> bottom = getBottom();
         final Vector<?> axis = Vectors.create(bottom.getSampleSystem(), 
DataType.DOUBLE);
         axis.set(getTop());
         axis.subtract(bottom);
@@ -184,8 +184,8 @@ public final class Capsule extends AbstractGeometry{
      */
     @Override
     public BBox getEnvelope() {
-        final Vector<?> bottom = getBottom();
-        final Vector<?> top = getTop();
+        final ReadOnly.Vector<?> bottom = getBottom();
+        final ReadOnly.Vector<?> top = getTop();
         final int dim = points.getDimension();
         final BBox bbox = new BBox(dim);
         for (int i=0;i<dim;i++){
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
index 210cf54f99..ece17f57ec 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
@@ -28,6 +28,7 @@ import org.apache.sis.geometries.GeometryType;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
 import org.apache.sis.maths.Vector;
@@ -98,28 +99,28 @@ public final class Cylinder extends AbstractGeometry{
     /**
      * @return the center of the bottom circle
      */
-    public Vector<?> getBottom() {
+    public ReadOnly.Vector<?> getBottom() {
         return points.getPosition(0);
     }
 
     /**
      * @param position new center of the bottom circle
      */
-    public void setBottom(Vector<?> position) {
+    public void setBottom(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
     /**
      * @return the center of the top circle
      */
-    public Vector<?> getTop() {
+    public ReadOnly.Vector<?> getTop() {
         return points.getPosition(1);
     }
 
     /**
      * @param position new center of the top circle
      */
-    public void setTop(Vector<?> position) {
+    public void setTop(ReadOnly.Vector<?> position) {
         points.setPosition(1, position);
     }
 
@@ -129,7 +130,7 @@ public final class Cylinder extends AbstractGeometry{
      * an axis being real values even when the positions they are derived from 
are integers.
      */
     private Vector<?> getAxis() {
-        final Vector<?> bottom = getBottom();
+        final ReadOnly.Vector<?> bottom = getBottom();
         final Vector<?> axis = Vectors.create(bottom.getSampleSystem(), 
DataType.DOUBLE);
         axis.set(getTop());
         axis.subtract(bottom);
@@ -200,8 +201,8 @@ public final class Cylinder extends AbstractGeometry{
      */
     @Override
     public BBox getEnvelope() {
-        final Vector<?> bottom = getBottom();
-        final Vector<?> top = getTop();
+        final ReadOnly.Vector<?> bottom = getBottom();
+        final ReadOnly.Vector<?> top = getTop();
         final Vector<?> axis = getAxis();
         final double height = axis.length();
         final int dim = points.getDimension();
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java
index 346c27174f..71baf5d083 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java
@@ -36,6 +36,7 @@ import 
org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.surface.ParametricCurveSurface;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.util.ArgumentChecks;
 
@@ -268,14 +269,14 @@ public final class Ellipsoid extends AbstractGeometry 
implements ParametricCurve
      *
      * @return ellipsoid center.
      */
-    public Vector<?> getCenter() {
+    public ReadOnly.Vector<?> getCenter() {
         return points.getPosition(0);
     }
 
     /**
      * @param position new center of the ellipsoid
      */
-    public void setCenter(Vector<?> position) {
+    public void setCenter(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
@@ -287,7 +288,7 @@ public final class Ellipsoid extends AbstractGeometry 
implements ParametricCurve
      */
     @Override
     public Envelope getEnvelope() {
-        final Vector<?> center = getCenter();
+        final Vector<?> center = getCenter().copy();
         final BBox env = new BBox(center, center);
         env.setCoordinateReferenceSystem(getCoordinateReferenceSystem());
         for (int i = 0, n = getDimension(); i < n; i++) {
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
index f43f7feb31..f7ac70b00f 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
@@ -35,6 +35,7 @@ import 
org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.surface.ParametricCurveSurface;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.util.ArgumentChecks;
 
@@ -200,14 +201,14 @@ public final class Sphere extends AbstractGeometry 
implements ParametricCurveSur
      *
      * @return sphere center.
      */
-    public Vector<?> getCenter() {
+    public ReadOnly.Vector<?> getCenter() {
         return points.getPosition(0);
     }
 
     /**
      * @param position new center of the sphere
      */
-    public void setCenter(Vector<?> position) {
+    public void setCenter(ReadOnly.Vector<?> position) {
         points.setPosition(0, position);
     }
 
@@ -216,7 +217,7 @@ public final class Sphere extends AbstractGeometry 
implements ParametricCurveSur
      */
     @Override
     public Envelope getEnvelope() {
-        final Vector<?> center = getCenter();
+        final Vector<?> center = getCenter().copy();
         final BBox env = new BBox(center, center);
         env.setCoordinateReferenceSystem(getCoordinateReferenceSystem());
         if (radius > 0) {
diff --git 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
index 906936b1fb..9b3a8bdc07 100644
--- 
a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
+++ 
b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
@@ -33,6 +33,7 @@ import 
org.apache.sis.geometries.internal.shared.DefaultTriangle;
 import org.apache.sis.geometries.operation.simplify.greedyinsert.WTriangle;
 import 
org.apache.sis.geometries.operation.triangulate.delaunay.OrientedTriangle;
 import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vector2D;
 import org.apache.sis.maths.Vector3D;
@@ -324,7 +325,7 @@ public sealed interface Triangle extends Polygon
         }
 
         @Override
-        public void setAttribute(String name, Vector tuple) {
+        public void setAttribute(String name, ReadOnly.Vector tuple) {
             throw new UnsupportedOperationException("Not supported on 
interpolated points.");
         }
 

Reply via email to