Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/Point2DTests.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/Point2DTests.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/Point2DTests.cs (revision 5065)
@@ -0,0 +1,53 @@
+// Copyright (C) Stichting Deltares 2024. All rights reserved.
+//
+// This file is part of the Dam Engine.
+//
+// The Dam Engine is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using Deltares.DamEngine.Data.Geometry;
+using Deltares.Geo.Common.Standard;
+using NUnit.Framework;
+
+namespace Deltares.DamEngine.Data.Tests.Geometry;
+
+[TestFixture]
+public class Point2DTests
+{
+ [TestFixture]
+ public class GivenPoint2D
+ {
+ private static readonly Point2D point2D = new Point2D(1.0, 2.0) { Name = "Point 2D" };
+
+ [TestFixture]
+ public class WhenCloned : GivenPoint2D
+ {
+ private static readonly Point2D clonedPoint2D = point2D.Clone();
+
+ [Test]
+ public void ThenCopyOfPointIsReturned()
+ {
+ Assert.Multiple(() =>
+ {
+ Assert.That(clonedPoint2D, Is.Not.EqualTo(point2D));
+ Assert.That(clonedPoint2D.Name, Is.EqualTo(point2D.Name));
+ Assert.That(clonedPoint2D.LocationEquals(point2D), Is.True);
+ });
+ }
+ }
+ }
+}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryDataTests.cs
===================================================================
diff -u -r5063 -r5065
--- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryDataTests.cs (.../GeometryDataTests.cs) (revision 5063)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryDataTests.cs (.../GeometryDataTests.cs) (revision 5065)
@@ -385,4 +385,160 @@
geometryModel.RegenerateGeometry();
return geometryModel;
}
+
+ [TestFixture]
+ public class GivenGeometryData
+ {
+ private static readonly GeometryData originalGeometryData = CreateGeometryData();
+
+ [TestFixture]
+ public class WhenCloned : GivenGeometryData
+ {
+ private readonly GeometryData clonedGeometryData = originalGeometryData.Clone();
+
+ [Test]
+ public void ThenBaseDataIsCopied()
+ {
+ Assert.That(clonedGeometryData, Is.Not.EqualTo(originalGeometryData));
+ Assert.Multiple(() =>
+ {
+ Assert.That(clonedGeometryData.Left, Is.EqualTo(originalGeometryData.Left));
+ Assert.That(clonedGeometryData.Right, Is.EqualTo(originalGeometryData.Right));
+ Assert.That(clonedGeometryData.Bottom, Is.EqualTo(originalGeometryData.Bottom));
+ });
+ }
+
+ [Test]
+ public void ThenPointsAreCopied()
+ {
+ Assert.That(clonedGeometryData.Points, Has.Count.EqualTo(originalGeometryData.Points.Count));
+ Assert.That(clonedGeometryData.Points, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.Points[0], Is.Not.EqualTo(originalGeometryData.Points[0]));
+ Assert.That(clonedGeometryData.Points[0].X, Is.EqualTo(originalGeometryData.Points[0].X));
+ }
+
+ [Test]
+ public void ThenNewlyEffectedPointsAreCopied()
+ {
+ Assert.That(clonedGeometryData.NewlyEffectedPoints, Has.Count.EqualTo(originalGeometryData.NewlyEffectedPoints.Count));
+ Assert.That(clonedGeometryData.NewlyEffectedPoints, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.NewlyEffectedPoints[0], Is.Not.EqualTo(originalGeometryData.NewlyEffectedPoints[0]));
+ Assert.That(clonedGeometryData.NewlyEffectedPoints[0].X, Is.EqualTo(originalGeometryData.NewlyEffectedPoints[0].X));
+ }
+
+ [Test]
+ public void ThenCurvesAreCopied()
+ {
+ Assert.That(clonedGeometryData.Curves, Has.Count.EqualTo(originalGeometryData.Curves.Count));
+ Assert.That(clonedGeometryData.Curves, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.Curves[0], Is.Not.EqualTo(originalGeometryData.Curves[0]));
+ Assert.That(clonedGeometryData.Curves[0].HeadPoint.X, Is.EqualTo(originalGeometryData.Curves[0].HeadPoint.X));
+ }
+
+ [Test]
+ public void ThenAllPointsAreCopied()
+ {
+ Assert.Multiple(() =>
+ {
+ Assert.That(originalGeometryData.Curves[0].HeadPoint, Is.EqualTo(originalGeometryData.Points[0]));
+ Assert.That(clonedGeometryData.Curves[0].HeadPoint, Is.Not.EqualTo(clonedGeometryData.Points[0]));
+ });
+ }
+
+ [Test]
+ public void AfterRegeneratePointsAreLinked()
+ {
+ GeometryData data = originalGeometryData.Clone();
+ data.RegenerateGeometry();
+ Assert.Multiple(() =>
+ {
+ Assert.That(originalGeometryData.Curves[0].HeadPoint, Is.EqualTo(originalGeometryData.Points[0]));
+ Assert.That(data.Curves[0].HeadPoint, Is.EqualTo(data.Points[0]));
+ });
+ }
+
+ [Test]
+ public void ThenNewlyEffectedCurvesAreCopied()
+ {
+ Assert.That(clonedGeometryData.NewlyEffectedCurves, Has.Count.EqualTo(originalGeometryData.NewlyEffectedCurves.Count));
+ Assert.That(clonedGeometryData.NewlyEffectedCurves, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.NewlyEffectedCurves[0], Is.Not.EqualTo(originalGeometryData.NewlyEffectedCurves[0]));
+ Assert.That(clonedGeometryData.NewlyEffectedCurves[0].HeadPoint.X, Is.EqualTo(originalGeometryData.NewlyEffectedCurves[0].HeadPoint.X));
+ }
+
+ [Test]
+ public void ThenLoopsAreCopied()
+ {
+ Assert.That(clonedGeometryData.Loops, Has.Count.EqualTo(originalGeometryData.Loops.Count));
+ Assert.That(clonedGeometryData.Loops, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.Loops[0], Is.Not.EqualTo(originalGeometryData.Loops[0]));
+ Assert.That(clonedGeometryData.Loops[0].CurveList, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.Loops[0].CurveList, Has.Count.EqualTo(originalGeometryData.Loops[0].CurveList.Count));
+ }
+
+ [Test]
+ public void ThenSurfacesAreCopied()
+ {
+ Assert.That(clonedGeometryData.Surfaces, Has.Count.EqualTo(originalGeometryData.Surfaces.Count));
+ Assert.That(clonedGeometryData.Surfaces, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.Surfaces[0], Is.Not.EqualTo(originalGeometryData.Surfaces[0]));
+ Assert.That(clonedGeometryData.Surfaces[0].OuterLoop.CurveList, Has.Count.GreaterThan(0));
+ Assert.That(clonedGeometryData.Surfaces[0].OuterLoop.CurveList, Has.Count.EqualTo(originalGeometryData.Surfaces[0].OuterLoop.CurveList.Count));
+ }
+
+ [Test]
+ public void WhenModified_ThenGeometryDataAreNotEqual()
+ {
+ ModifyGeometryData(clonedGeometryData);
+ Assert.Multiple(() =>
+ {
+ Assert.That(clonedGeometryData.Left, Is.Not.EqualTo(originalGeometryData.Left));
+ Assert.That(clonedGeometryData.Right, Is.Not.EqualTo(originalGeometryData.Right));
+ Assert.That(clonedGeometryData.Bottom, Is.Not.EqualTo(originalGeometryData.Bottom));
+ Assert.That(clonedGeometryData.Points, Has.Count.Not.EqualTo(originalGeometryData.Points.Count));
+ Assert.That(clonedGeometryData.NewlyEffectedPoints, Has.Count.Not.EqualTo(originalGeometryData.NewlyEffectedPoints.Count));
+ Assert.That(clonedGeometryData.Curves, Has.Count.Not.EqualTo(originalGeometryData.Curves.Count));
+ Assert.That(clonedGeometryData.NewlyEffectedCurves, Has.Count.Not.EqualTo(originalGeometryData.NewlyEffectedCurves.Count));
+ Assert.That(clonedGeometryData.Loops, Has.Count.Not.EqualTo(originalGeometryData.Loops.Count));
+ Assert.That(clonedGeometryData.Surfaces, Has.Count.Not.EqualTo(originalGeometryData.Surfaces.Count));
+ });
+ }
+ }
+
+ private static GeometryData CreateGeometryData()
+ {
+ var geometryData = new GeometryData
+ {
+ Left = -10.0,
+ Right = 10.0,
+ Bottom = -10.0
+ };
+ geometryData.Points.Add(new Point2D(0.1, 1.1));
+ geometryData.Points.Add(new Point2D(0.2, 1.2));
+ geometryData.NewlyEffectedPoints.Add(new Point2D(0.3, 1.3));
+ geometryData.NewlyEffectedPoints.Add(new Point2D(0.4, 1.4));
+ geometryData.Curves.Add(new GeometryCurve(geometryData.Points[0], geometryData.Points[1]));
+ geometryData.NewlyEffectedCurves.Add(new GeometryCurve(geometryData.NewlyEffectedPoints[0], geometryData.NewlyEffectedPoints[1]));
+ var loop = new GeometryLoop();
+ loop.CurveList.Add(new GeometryCurve(new Point2D(1.0, 2.0), new Point2D(3.0, 4.0)));
+ geometryData.Loops.Add(loop);
+ geometryData.Surfaces.Add(new GeometrySurface(loop));
+ return geometryData;
+ }
+
+ private static void ModifyGeometryData(GeometryData geometryData)
+ {
+ geometryData.Left = geometryData.Left + 1;
+ geometryData.Right = geometryData.Right + 1;
+ geometryData.Bottom = geometryData.Bottom + 1;
+ geometryData.Points.Add(new Point2D(10.0, 20.0));
+ geometryData.NewlyEffectedPoints.Add(new Point2D(30.0, 40.0));
+ geometryData.Curves.Add(new GeometryCurve(geometryData.Points[1], geometryData.Points[2]));
+ geometryData.NewlyEffectedCurves.Add(new GeometryCurve(geometryData.NewlyEffectedPoints[1], geometryData.NewlyEffectedPoints[2]));
+ var loop = new GeometryLoop();
+ loop.CurveList.Add(new GeometryCurve(new Point2D(5.0, 6.0), new Point2D(7.0, 8.0)));
+ geometryData.Loops.Add(loop);
+ geometryData.Surfaces.Add(new GeometrySurface());
+ }
+ }
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryCurve.cs
===================================================================
diff -u -r5028 -r5065
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryCurve.cs (.../GeometryCurve.cs) (revision 5028)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryCurve.cs (.../GeometryCurve.cs) (revision 5065)
@@ -240,4 +240,25 @@
SurfaceAtRight = aCurve.SurfaceAtRight;
SurfaceAtLeft = aCurve.SurfaceAtLeft;
}
+
+ ///
+ /// Clones the curve.
+ ///
+ /// Returns a clone
+ public GeometryCurve Clone()
+ {
+ var curve = new GeometryCurve(headPoint.Clone(), endPoint.Clone())
+ {
+ Name = Name
+ };
+ if (SurfaceAtLeft != null)
+ {
+ curve.SurfaceAtLeft = SurfaceAtLeft.Clone();
+ }
+ if (SurfaceAtRight != null)
+ {
+ curve.SurfaceAtRight = SurfaceAtRight.Clone();
+ }
+ return curve;
+ }
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/Point2D.cs
===================================================================
diff -u -r5028 -r5065
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/Point2D.cs (.../Point2D.cs) (revision 5028)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/Point2D.cs (.../Point2D.cs) (revision 5065)
@@ -137,4 +137,13 @@
{
return new Point2D(aPoint2.X + aPoint1.X, aPoint2.Z + aPoint1.Z);
}
+
+ ///
+ /// Clones the 2D point.
+ ///
+ /// Returns a clone
+ public Point2D Clone()
+ {
+ return new Point2D { X = this.X, Z = this.Z, Name = this.Name};
+ }
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs
===================================================================
diff -u -r5064 -r5065
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 5064)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 5065)
@@ -1290,4 +1290,43 @@
aCurveList.Add(curve);
}
}
+
+ ///
+ /// Clones the geometry data.
+ ///
+ /// Returns a clone
+ public new GeometryData Clone()
+ {
+ var clonedGeometryData = new GeometryData
+ {
+ Left = this.Left,
+ Right = this.Right,
+ Bottom = this.Bottom
+ };
+ foreach (Point2D point in this.Points)
+ {
+ clonedGeometryData.Points.Add(point.Clone());
+ }
+ foreach (Point2D point in this.NewlyEffectedPoints)
+ {
+ clonedGeometryData.NewlyEffectedPoints.Add(point.Clone());
+ }
+ foreach (GeometryCurve curve in this.Curves)
+ {
+ clonedGeometryData.Curves.Add(curve.Clone());
+ }
+ foreach (GeometryCurve curve in this.NewlyEffectedCurves)
+ {
+ clonedGeometryData.NewlyEffectedCurves.Add(curve.Clone());
+ }
+ foreach (GeometryLoop loop in this.Loops)
+ {
+ clonedGeometryData.Loops.Add(loop.Clone());
+ }
+ foreach (GeometrySurface surface in this.Surfaces)
+ {
+ clonedGeometryData.Surfaces.Add(surface.Clone());
+ }
+ return clonedGeometryData;
+ }
}
\ No newline at end of file