Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SurfaceLine2.cs
===================================================================
diff -u -r877 -r955
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SurfaceLine2.cs (.../SurfaceLine2.cs) (revision 877)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SurfaceLine2.cs (.../SurfaceLine2.cs) (revision 955)
@@ -23,6 +23,7 @@
using System.Collections.Generic;
using System.Linq;
using Deltares.DamEngine.Data.Geometry;
+using Deltares.DamEngine.Data.Standard;
using Deltares.DamEngine.Data.Standard.Language;
using Deltares.DamEngine.Data.Standard.Validation;
@@ -52,6 +53,17 @@
}
///
+ /// Deep clone the object.
+ ///
+ ///
+ public SurfaceLine2 FullDeepClone()
+ {
+ SurfaceLine2 surfaceLine2 = new SurfaceLine2();
+ surfaceLine2.SetValuesFromOtherSurfaceLine(this, true);
+ return surfaceLine2;
+ }
+
+ ///
/// The geometrical description of the surface line.
///
/// Aggregation relationship.
@@ -153,6 +165,59 @@
}
///
+ /// Gets the points orderd by x.
+ ///
+ ///
+ /// The points orderd by x.
+ ///
+ private IEnumerable PointsOrderdByX
+ {
+ get
+ {
+ return Geometry.Points.OrderBy(p => p.X);
+ }
+ }
+
+ ///
+ /// Tests if the given point is between the given start X and end X.
+ ///
+ /// The point.
+ /// The start x.
+ /// The end x.
+ /// true if the given point is between the given start X and end X, otherwise false
+ private bool TestIncluding(GeometryPoint point, double startX, double endX)
+ {
+ if (point == null)
+ {
+ return false;
+ }
+
+ double x = point.X;
+ return (x >= startX || x.AlmostEquals(startX, GeometryPoint.Precision))
+ && (x < endX || x.AlmostEquals(endX, GeometryPoint.Precision));
+ }
+
+ ///
+ /// Gets the point segment including given start x and end x.
+ ///
+ /// The start x.
+ /// The end x.
+ /// collection of points between start X and end X (inlcuding those)
+ /// End value is smaller then the start value
+ public virtual IEnumerable GetPointSegmentIncluding(double startX, double endX)
+ {
+ if (endX < startX)
+ {
+ throw new ArgumentException("End value is smaller then the start value");
+ }
+
+ return from point in PointsOrderdByX
+ where TestIncluding(point, startX, endX)
+ orderby point.X ascending
+ select point;
+ }
+
+ ///
/// Validates this surfaceline.
///
/// All validation messages.
@@ -318,5 +383,6 @@
}
return geometryAnnotations;
}
+
}
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SurfaceLine2Extensions.cs
===================================================================
diff -u -r951 -r955
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SurfaceLine2Extensions.cs (.../SurfaceLine2Extensions.cs) (revision 951)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SurfaceLine2Extensions.cs (.../SurfaceLine2Extensions.cs) (revision 955)
@@ -474,6 +474,19 @@
}
///
+ /// Determines the tan slope inside.
+ ///
+ /// tan slope inside
+ public static double TanSlopeInside(this SurfaceLine2 line)
+ {
+ GeometryPoint dikeToeInward = line.GetDikeToeInward();
+ GeometryPoint dikeTopAtPolder = line.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ return (dikeTopAtPolder.Z - dikeToeInward.Z) /
+ (dikeToeInward.X - dikeTopAtPolder.X);
+ }
+
+
+ ///
/// Create a horizontal line from a given starting X coordinate and ending at the
/// X coordinate of defined
/// in the surfaceline.
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/LocationJob.cs
===================================================================
diff -u -r877 -r955
--- DamEngine/trunk/src/Deltares.DamEngine.Data/General/LocationJob.cs (.../LocationJob.cs) (revision 877)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/LocationJob.cs (.../LocationJob.cs) (revision 955)
@@ -44,9 +44,6 @@
private LocationResult locationResult = new LocationResult();
private static ScenarioType currentScenarioType = ScenarioType.Scenario01;
- private static string currentProfileName = "";
- private static string currentScenarioName = "";
- private static string currentCalculation = "";
private static DateTime currentTime = DateTime.Today;
private static DamProjectType damProjectType = DamProjectType.Operational;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineHeightAdapterTest.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineHeightAdapterTest.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineHeightAdapterTest.cs (revision 955)
@@ -0,0 +1,1000 @@
+// Copyright (C) Stichting Deltares 2018. 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 System.Linq;
+using Deltares.DamEngine.Calculators.Dikes_Design;
+using Deltares.DamEngine.Data.General;
+using Deltares.DamEngine.Data.Geometry;
+using Deltares.DamEngine.Data.Geotechnics;
+using Deltares.DamEngine.Data.Standard.Validation;
+using Deltares.DamEngine.TestHelpers.Factories;
+using NUnit.Framework;
+
+namespace Deltares.DamEngine.Calculators.Tests.DikesDesign
+{
+ [TestFixture]
+ public class SurfaceLineHeightAdapterTest
+ {
+ [Test]
+ public void ConstructNewSurfaceLineReturnsANewSurfaceLine()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ {
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(2, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(3, 0, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var constructNewSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1);
+ {
+ Assert.IsNotNull(constructNewSurfaceLine);
+ }
+ }
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineHasSamePointAtToeRiver()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ {
+ const double newDikeHeight = 6.0;
+ var pointAtToeRiver = new GeometryPoint { X = 17, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 34.5, Z = 5 };
+ var pointAtTopPolder = new GeometryPoint { X = 35, Z = 5 };
+ var pointAtToePolder = new GeometryPoint { X = 36, Z = 0 };
+
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ {
+ var newPointAtToeRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtRiver);
+ Assert.IsTrue(newPointAtToeRiver.LocationEquals(pointAtToeRiver));
+ Assert.IsTrue(newSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(pointAtToeRiver)));
+ }
+ }
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineHasSameSlopeInside()
+ {
+ var line = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var surfaceLine = line;
+ var location = new Location();
+ const double cToleranceSlope = 0.0001;
+ const double newDikeHeight = 6.0;
+ var pointAtToeRiver = new GeometryPoint { X = 17, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 34.5, Z = 5 };
+ var pointAtTopPolder = new GeometryPoint { X = 35, Z = 5 };
+ var pointAtToePolder = new GeometryPoint { X = 36, Z = 0 };
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ double oldSlope = surfaceLine.TanSlopeInside();
+ double newSlope = newSurfaceLine.TanSlopeInside();
+ Assert.AreEqual(oldSlope, newSlope, cToleranceSlope);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineHasCorrectNewPointAtTopRiver()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 3, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var actualPoint = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ var expectedPoint = new GeometryPoint { X = 2, Z = 2 };
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineHasRemovedOldPointAtTopRiverCorrectly()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 3, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.IsFalse(newSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(pointAtTopRiver)));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithoutShoulderHasCorrectNewPointAtTopPolder()
+ {
+ var line = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var surfaceLine = line;
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 3, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var actualPoint = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ var expectedPoint = new GeometryPoint { X = 3, Z = 2 };
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithoutShoulderHasCorrectlyRemovedOldPointAtTopPolder()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 3, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.IsFalse(newSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(pointAtTopPolder)));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithoutShoulderHasCorrectNewPointAtToePolder()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 3, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 7, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var actualPoint = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ var expectedPoint = new GeometryPoint { X = 13 };
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ double oldSlope = surfaceLine.TanSlopeInside();
+ double newSlope = newSurfaceLine.TanSlopeInside();
+ Assert.AreEqual(oldSlope, newSlope, 0.001);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithShoulderHasCorrectPointAtToePolder()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(2, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(3, 0.5, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(4, 0.5, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedPoint = new GeometryPoint() { X = 7, Z = 0 }; //
+ var actualPoint = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineHasRemovedShoulderPointsCorrectly()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 3.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtShoulderInsteek = new GeometryPoint { X = 3, Z = 0.5 };
+ var pointAtShoulderTop = new GeometryPoint { X = 4, Z = 0.5 };
+ var pointAtToePolder = new GeometryPoint { X = 5, Z = 0 };
+ var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtShoulderInsteek.X, pointAtShoulderInsteek.Z, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(pointAtShoulderTop.X, pointAtShoulderTop.Z, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.IsNull(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside));
+ Assert.IsNull(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside));
+ Assert.IsFalse(newSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(pointAtShoulderInsteek)));
+ Assert.IsFalse(newSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(pointAtShoulderTop)));
+ var newPointAtToePolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.AreEqual(3, newSurfaceLine.GetPointSegmentIncluding(pointAtTopRiver.X, newPointAtToePolder.X).Count());
+ Assert.AreEqual(5, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithLargeShoulderHaveSameToeAtPolder()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 1.5;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointAtShoulderInsteek = new GeometryPoint { X = 3, Z = 0.5 };
+ var pointAtShoulderTop = new GeometryPoint { X = 5, Z = 0.5 };
+ var pointAtToePolder = new GeometryPoint { X = 6, Z = 0 };
+ var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtShoulderInsteek.X, pointAtShoulderInsteek.Z, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(pointAtShoulderTop.X, pointAtShoulderTop.Z, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.IsTrue(pointAtToePolder.LocationEquals(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder)));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithLargeShoulderHaveSameTopAtShoulderInside()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 3.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 2 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 2 };
+ var pointAtShoulderInsteek = new GeometryPoint { X = 3, Z = 1 };
+ var pointAtShoulderTop = new GeometryPoint { X = 5, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 6, Z = 2 };
+ var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtShoulderInsteek.X, pointAtShoulderInsteek.Z, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(pointAtShoulderTop.X, pointAtShoulderTop.Z, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.IsTrue(pointAtShoulderTop.LocationEquals(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithLargeShoulderShouldHaveACorrectIntersectionPoint()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 3.0;
+ var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointAtTopRiver = new GeometryPoint { X = 1, Z = 2 };
+ var pointAtTopPolder = new GeometryPoint { X = 2, Z = 2 };
+ var pointAtShoulderInsteek = new GeometryPoint { X = 3, Z = 1 };
+ var pointAtShoulderTop = new GeometryPoint { X = 5, Z = 1 };
+ var pointAtToePolder = new GeometryPoint { X = 6, Z = 0 };
+ var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtShoulderInsteek.X, pointAtShoulderInsteek.Z, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(pointAtShoulderTop.X, pointAtShoulderTop.Z, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedPoint = new GeometryPoint { X = 4.5, Z = 1 };
+ var actualPoint = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithSoulderAndDitchShouldNotCreateInvalidSurfaceLine()
+ {
+ var surfaceLine = FactoryForSurfaceLines.CreateRealisticSurfaceLineForHeightAdapter();
+ var location = new Location();
+ const double newDikeHeight = 19.2;
+ var validationError = surfaceLine.Validate().FirstOrDefault(vr => vr.MessageType == ValidationResultType.Error);
+ if (validationError != null)
+ {
+ throw new SurfaceLineException(validationError.Text);
+ }
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ validationError = newSurfaceLine.Validate().FirstOrDefault(vr => vr.MessageType == ValidationResultType.Error);
+ if (validationError != null)
+ {
+ throw new SurfaceLineException(validationError.Text);
+ }
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithTrafficLoadPointsShouldAdjustThosePoints1()
+ {
+ var surfaceLine = FactoryForSurfaceLines.CreateRealisticSurfaceLineForHeightAdapter();
+ var location = new Location();
+ const double cTolerance = 0.0000001;
+ const double newDikeHeight = 19.2;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.AreEqual(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).Z, cTolerance);
+ Assert.AreEqual(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithTrafficLoadPointsShouldAdjustThosePoints2()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 1.2;
+ var pointDikeToeAtRiver = new GeometryPoint { X = 0, Z = 0 };
+ var pointDikeTopAtRiver = new GeometryPoint { X = 1, Z = 1 };
+ var pointTrafficLoadOutside = new GeometryPoint { X = 1.1, Z = 1 };
+ var pointTrafficLoadInside = new GeometryPoint { X = 1.9, Z = 1 };
+ var pointDikeTopAtPolder = new GeometryPoint { X = 2, Z = 1 };
+ var pointDikeToeAtPolder = new GeometryPoint { X = 3, Z = 0 };
+ surfaceLine.EnsurePointOfType(pointDikeToeAtRiver.X, pointDikeToeAtRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointDikeTopAtRiver.X, pointDikeTopAtRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside);
+ surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside);
+ surfaceLine.EnsurePointOfType(pointDikeTopAtPolder.X, pointDikeTopAtPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.AreEqual(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).Z);
+ Assert.AreEqual(newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z);
+ }
+
+ ///
+ /// Create dike with skewed dike table and points between characteristic points
+ ///
+ ///
+ private SurfaceLine2 CreateSurfaceLineWithSkwewedDikeTableAndInBetweenPoints()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints = { GeometryMustContainPoint = true },
+ Geometry = new GeometryPointString()
+ };
+ var point1 = new GeometryPoint { X = 0, Z = 0 };
+ var pointDikeToeAtRiver = new GeometryPoint { X = 2, Z = 0 };
+ var point2 = new GeometryPoint { X = 4, Z = 1 };
+ var pointDikeTopAtRiver = new GeometryPoint { X = 6, Z = 3 };
+ var point3 = new GeometryPoint { X = 7, Z = 3 };
+ var pointDikeTopAtPolder = new GeometryPoint { X = 8, Z = 3.5 };
+ var point4 = new GeometryPoint { X = 10, Z = 1.5 };
+ var pointDikeToeAtPolder = new GeometryPoint { X = 12, Z = 0.5 };
+ var point5 = new GeometryPoint { X = 13, Z = 0 };
+ var pointSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 };
+
+ surfaceLine.EnsurePointOfType(pointDikeToeAtRiver.X, pointDikeToeAtRiver.Z, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(pointDikeTopAtRiver.X, pointDikeTopAtRiver.Z, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(pointDikeTopAtPolder.X, pointDikeTopAtPolder.Z, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside);
+ surfaceLine.EnsurePoint(point1.X, point1.Z);
+ surfaceLine.EnsurePoint(point2.X, point2.Z);
+ surfaceLine.EnsurePoint(point3.X, point3.Z);
+ surfaceLine.EnsurePoint(point4.X, point4.Z);
+ surfaceLine.EnsurePoint(point5.X, point5.Z);
+ surfaceLine.SortPoints();
+ return surfaceLine;
+ }
+
+ ///
+ /// Test if dike with skewed dike table and points between characteristic points is constructed correctly with new height
+ ///
+ [Test]
+ public void CanAdaptSurfaceLineWithSkewedDikeTableAndInBetweenPoints()
+ {
+ SurfaceLine2 surfaceLine = CreateSurfaceLineWithSkwewedDikeTableAndInBetweenPoints();
+ var location = new Location();
+ const double cTolerance = 0.001;
+ const double newDikeHeight = 4.0;
+ Assert.AreEqual(10, surfaceLine.Geometry.Points.Count);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.AreEqual(6, newSurfaceLine.Geometry.Points.Count);
+ Assert.AreEqual(7.3333, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver).X, cTolerance);
+ Assert.AreEqual(4.0000, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver).Z, cTolerance);
+ Assert.AreEqual(9.3333, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X, cTolerance);
+ Assert.AreEqual(4.0000, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z, cTolerance);
+ Assert.AreEqual(14.6666, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X, cTolerance);
+ Assert.AreEqual(0.0000, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z, cTolerance);
+ Assert.AreEqual(100.000, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, cTolerance);
+ Assert.AreEqual(0.0000, newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).Z, cTolerance);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopExactOnOldTop()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 1;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 3, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedShoulderBaseInside = new GeometryPoint() { X = 5, Z = 0 };
+ var actualShoulderBaseInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
+ Assert.IsTrue(expectedShoulderBaseInside.LocationEquals(actualShoulderBaseInside));
+ Assert.AreEqual(9, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopSmallerThanOldTop()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 0.8;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 2.8, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedNewPoint = new GeometryPoint() { X = 3.8, Z = 1 };
+ var actualNewPoint = newSurfaceLine.Geometry.Points[4];
+ Assert.IsTrue(expectedNewPoint.LocationEquals(actualNewPoint));
+ var expectedShoulderBaseInside = new GeometryPoint() { X = 5, Z = 0 };
+ var actualShoulderBaseInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
+ Assert.IsTrue(expectedShoulderBaseInside.LocationEquals(actualShoulderBaseInside));
+ Assert.AreEqual(10, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopWiderThanOldTopBeyondShoulder()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 3;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 5, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedToeInside = new GeometryPoint() { X = 8, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(5, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopWiderThanOldTopOnShoulderTopInside()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 2;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 4, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedToeInside = new GeometryPoint() { X = 7, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(6, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopWiderThanOldTopIntersectingShoulder()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 1.5;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 3.5, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedShoulderBaseInside = new GeometryPoint() { X = 5.5, Z = 0 };
+ var actualShoulderBaseInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
+ Assert.IsTrue(expectedShoulderBaseInside.LocationEquals(actualShoulderBaseInside));
+ var expectedShoulderTopInside = new GeometryPoint() { X = 6, Z = 0 };
+ var actualShoulderTopInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside);
+ Assert.IsTrue(expectedShoulderTopInside.LocationEquals(actualShoulderTopInside));
+ var expectedToeInside = new GeometryPoint() { X = 7, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(7, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedInsideSlope()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeSlopeInside = true;
+ location.NewDikeSlopeInside = 0.5;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 5, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedToeInside = new GeometryPoint() { X = 11, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(5, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedInsideSlopeEndingOnOldShoulderTop()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeSlopeInside = true;
+ location.NewDikeSlopeInside = 2;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 2, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 5, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedPoint = new GeometryPoint() { X = 6, Z = 0 };
+ var actualPoint = newSurfaceLine.Geometry.Points[3];
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ var expectedToeInside = new GeometryPoint() { X = 7, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(6, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedOutsideSlope2()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeSlopeOutside = true;
+ location.NewDikeSlopeOutside = 2;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 1.5, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 4.5, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedToeInside = new GeometryPoint() { X = 7.5, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(6, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedOutsideSlope05()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeSlopeOutside = true;
+ location.NewDikeSlopeOutside = 0.5;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 3, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 6, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedToeInside = new GeometryPoint() { X = 9, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(6, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopWidthAndOutsideSlopeAndInsideSlope()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeSlopeOutside = true;
+ location.NewDikeSlopeOutside = 2;
+ location.UseNewDikeSlopeInside = true;
+ location.NewDikeSlopeInside = 2;
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 1.5;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 1.5, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 3, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedPoint = new GeometryPoint() { X = 3.5, Z = 1 };
+ var actualPoint = newSurfaceLine.Geometry.Points[4];
+ Assert.IsTrue(expectedPoint.LocationEquals(actualPoint));
+ var expectedPoint2 = new GeometryPoint() { X = 4, Z = 1 };
+ var actualPoint2 = newSurfaceLine.Geometry.Points[5];
+ Assert.IsTrue(expectedPoint2.LocationEquals(actualPoint2));
+ var expectedShoulderBaseInside = new GeometryPoint() { X = 5, Z = 0 };
+ var actualShoulderBaseInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
+ Assert.IsTrue(expectedShoulderBaseInside.LocationEquals(actualShoulderBaseInside));
+ var expectedToeInside = new GeometryPoint() { X = 7, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(10, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void AdaptedSurfaceLineWithNewDefinedTopWidthAndOutsideSlopeAndInsideSlope05()
+ {
+ var surfaceLine = new SurfaceLine2
+ {
+ CharacteristicPoints =
+ {
+ GeometryMustContainPoint = true
+ },
+ Geometry = new GeometryPointString()
+ };
+ var location = new Location();
+ const double newDikeHeight = 2.0;
+ surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver);
+ surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver);
+ surfaceLine.EnsurePointOfType(4, 1, CharacteristicPointType.DikeTopAtPolder);
+ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.ShoulderBaseInside);
+ surfaceLine.EnsurePointOfType(6, 0, CharacteristicPointType.ShoulderTopInside);
+ surfaceLine.EnsurePointOfType(7, -1, CharacteristicPointType.DikeToeAtPolder);
+ surfaceLine.EnsurePointOfType(100, -1, CharacteristicPointType.SurfaceLevelInside);
+ location.UseNewDikeSlopeOutside = true;
+ location.NewDikeSlopeOutside = 2;
+ location.UseNewDikeSlopeInside = true;
+ location.NewDikeSlopeInside = 0.5;
+ location.UseNewDikeTopWidth = true;
+ location.NewDikeTopWidth = 1.5;
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ var expectedNewTopRiver = new GeometryPoint() { X = 1.5, Z = 2 };
+ var actualNewTopRiver = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ Assert.IsTrue(expectedNewTopRiver.LocationEquals(actualNewTopRiver));
+ var expectedNewTopPolder = new GeometryPoint() { X = 3, Z = 2 };
+ var actualNewTopPolder = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ Assert.IsTrue(expectedNewTopPolder.LocationEquals(actualNewTopPolder));
+ var expectedToeInside = new GeometryPoint() { X = 9, Z = -1 };
+ var actualToeInside = newSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ Assert.IsTrue(expectedToeInside.LocationEquals(actualToeInside));
+ Assert.AreEqual(6, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ [ExpectedException(typeof(SurfaceLineAdapterException))]
+ public void HeightAdaptionThrowsExceptionIfSurfaceLIsNotLongEnough()
+ {
+ var surfaceLine = FactoryForSurfaceLines.CreateRealisticSurfaceLineForHeightAdapter();
+ var location = new Location();
+ const double newDikeHeight = 19.0;
+ var pointSurfaceLevelInside = new GeometryPoint { X = 40, Z = 12 }; // Set surfacelevelinside just beside ditch to force exception
+ surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside);
+ var surfaceLineAdapter = new SurfaceLineHeightAdapter(surfaceLine, location);
+ var newSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(newDikeHeight);
+ Assert.Null(newSurfaceLine);
+ }
+ }
+}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj
===================================================================
diff -u -r951 -r955
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 951)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 955)
@@ -46,6 +46,7 @@
+
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/SurfaceLineAdapter.cs
===================================================================
diff -u -r946 -r955
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/SurfaceLineAdapter.cs (.../SurfaceLineAdapter.cs) (revision 946)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/SurfaceLineAdapter.cs (.../SurfaceLineAdapter.cs) (revision 955)
@@ -74,8 +74,7 @@
{
ThrowWhenSurfaceLineIsNull(surfaceLine);
ThrowWhenSurfaceLineDoesNotSatisfyToSpecification(surfaceLine);
- this.surfaceLine = new SurfaceLine2();
- surfaceLine.CloneProperties(this.surfaceLine);// ##Bka: replaced FullDeepClone(); by this (as todo says, has to be tested)// TODO: Do not do this! Give it the clone instead: GRASP Creator principle
+ this.surfaceLine = surfaceLine.FullDeepClone();
this.Location = location;
RetainTrafficLoad();
}