Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineShoulderAdapterTest.cs =================================================================== diff -u -r3893 -r4000 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineShoulderAdapterTest.cs (.../SurfaceLineShoulderAdapterTest.cs) (revision 3893) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineShoulderAdapterTest.cs (.../SurfaceLineShoulderAdapterTest.cs) (revision 4000) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Linq; using Deltares.DamEngine.Calculators.DikesDesign; using Deltares.DamEngine.Data.General; @@ -46,10 +47,26 @@ Geometry = new GeometryPointString() }; var location = new Location(); - 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 }; + 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); @@ -72,18 +89,38 @@ Geometry = new GeometryPointString() }; var location = new Location(); - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 10, Z = 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 + }; + var pointAtSurfaceLevelInside = new GeometryPoint + { + X = 10, + 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(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var constructNewSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(0, 0, false); + SurfaceLine2 constructNewSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(0, 0, false); Assert.IsNotNull(constructNewSurfaceLine); } @@ -104,11 +141,31 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 10, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var pointAtSurfaceLevelInside = new GeometryPoint + { + X = 10, + 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); @@ -117,7 +174,7 @@ Assert.IsNull(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside)); Assert.IsNull(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); Assert.IsNotNull(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside)); Assert.IsNotNull(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)); } @@ -139,22 +196,42 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); surfaceLineAdapter.MaxShoulderLevel = 0.67; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double expectedShoulderHeight = Math.Min(shoulderHeight, surfaceLineAdapter.MaxShoulderLevel - pointAtToePolder.Z); var expectedPoint = new GeometryPoint(3.33, expectedShoulderHeight); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -175,20 +252,40 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 10, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var pointAtSurfaceLevelInside = new GeometryPoint + { + X = 10, + 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(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -209,22 +306,42 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double expectedShoulderHeight = Math.Min(shoulderHeight, (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z)); var expectedPoint = new GeometryPoint( pointAtTopPolder.X + (1 - expectedShoulderHeight) + shoulderLength + expectedShoulderHeight * surfaceLineAdapter.SlopeOfNewShoulder, 0); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -245,20 +362,40 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 3; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 10, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var pointAtSurfaceLevelInside = new GeometryPoint + { + X = 10, + 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(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); - var expectedZ = pointAtTopPolder.Z; - var actualZ = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).Z; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + double expectedZ = pointAtTopPolder.Z; + double actualZ = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).Z; Assert.AreEqual(expectedZ, actualZ); } @@ -276,18 +413,41 @@ var location = new Location(); const int shoulderLength = 3; const int shoulderHeight = 3; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double expectedShoulderHeight = Math.Min(shoulderHeight, (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z)); double expectedShoulderBaseX = pointAtTopPolder.X + (1 - expectedShoulderHeight); Assert.AreEqual(expectedShoulderBaseX, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).X); @@ -322,9 +482,9 @@ surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); surfaceLineAdapter.MaxShoulderLevel = 0.67; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.66, 0.67); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -350,11 +510,14 @@ surfaceLine.EnsurePointOfType(4, 1.5, CharacteristicPointType.ShoulderTopInside); surfaceLine.EnsurePointOfType(5, 1, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(100, 1, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; surfaceLineAdapter.MaxShoulderLevel = 0.67 + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(6.00, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); Assert.AreEqual(expectedPoint.X, actualPoint.X, pointCoordinateTolerance); Assert.AreEqual(expectedPoint.Z, actualPoint.Z, pointCoordinateTolerance); expectedPoint = new GeometryPoint(4.66, 1.67); @@ -390,9 +553,9 @@ surfaceLine.EnsurePointOfType(5, 0, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(10, 0, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(2.857, 1.0); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.AreEqual(expectedPoint.X, actualPoint.X, pointCoordinateTolerance); Assert.AreEqual(expectedPoint.Z, actualPoint.Z, pointCoordinateTolerance); } @@ -411,16 +574,56 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 1, Z = 4 }; - var pointAtTopPolder = new GeometryPoint { X = 2, Z = 4 }; - 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 extraPoint1 = new GeometryPoint { X = 8, Z = -2 }; - var extraPoint2 = new GeometryPoint { X = 9, Z = -1 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelOutside = new GeometryPoint { X = -1, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 1, + Z = 4 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 2, + Z = 4 + }; + 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 extraPoint1 = new GeometryPoint + { + X = 8, + Z = -2 + }; + var extraPoint2 = new GeometryPoint + { + X = 9, + Z = -1 + }; + var pointAtSurfaceLevelInside = new GeometryPoint + { + X = 10, + Z = 0 + }; + var pointAtSurfaceLevelOutside = new GeometryPoint + { + X = -1, + 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); @@ -431,80 +634,44 @@ surfaceLine.EnsurePoint(extraPoint2.X, extraPoint2.Z); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelOutside.X, pointAtSurfaceLevelOutside.Z, CharacteristicPointType.SurfaceLevelOutside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double xToePolder = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X; double xSurfaceLevelInside = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X; - var actualExtraPoints = adaptedSurfaceLine.GetPointSegmentIncluding(xToePolder, xSurfaceLevelInside); + IEnumerable actualExtraPoints = adaptedSurfaceLine.GetPointSegmentIncluding(xToePolder, xSurfaceLevelInside); const int expectedNumberOfPoints = 9; Assert.AreEqual(expectedNumberOfPoints, adaptedSurfaceLine.Geometry.Points.Count); const int expectedNumberOfExtraPoints = 3; Assert.AreEqual(expectedNumberOfExtraPoints, actualExtraPoints.Count()); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside); - var actualXValue = pointAtSurfaceLevelInside.X; + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside); + double actualXValue = pointAtSurfaceLevelInside.X; Assert.AreEqual(actualXValue, actualPoint.X, pointCoordinateTolerance); Assert.AreEqual(pointAtSurfaceLevelInside.Z, actualPoint.Z, pointCoordinateTolerance); Assert.IsTrue(adaptedSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(extraPoint2))); Assert.IsFalse(adaptedSurfaceLine.Geometry.Points.Any(p => p.LocationEquals(extraPoint1))); } - private SurfaceLine2 CreateSurfaceLineWithSkewedSurfaceLevelInside() - { - var surfaceLine = new SurfaceLine2 - { - CharacteristicPoints = { GeometryMustContainPoint = true }, - Geometry = new GeometryPointString() - }; - var pointSurfaceLevelOutside = new GeometryPoint { X = -1, Z = -1 }; - var pointDikeToeAtRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointDikeTopAtRiver = new GeometryPoint { X = 4, Z = 4 }; - var pointDikeTopAtPolder = new GeometryPoint { X = 6, Z = 4 }; - var pointDikeToeAtPolder = new GeometryPoint { X = 10, Z = 0 }; - var pointSurfaceLevelInside = new GeometryPoint { X = 18, Z = -1 }; - - surfaceLine.EnsurePointOfType(pointSurfaceLevelOutside.X, pointSurfaceLevelOutside.Z, CharacteristicPointType.SurfaceLevelOutside); - 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.SortPoints(); - return surfaceLine; - } - - private void EvaluateAdaptedSurfaceLineWithSkewedSurfaceLevelInside(SurfaceLine2 surfaceLine, SurfaceLine2 adaptedSurfaceLine, double shoulderHeight, double shoulderLength) - { - const double cTolerance = 0.0000001; - Assert.IsNotNull(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside)); - Assert.IsNotNull(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)); - Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z + shoulderHeight, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).Z, cTolerance); - double intersectionInsideSlopeWithDikeBaseXCoordinate = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X + (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z); - Assert.AreEqual(intersectionInsideSlopeWithDikeBaseXCoordinate - shoulderHeight, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).X, cTolerance); - Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z + shoulderHeight, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside).Z, cTolerance); - Assert.AreEqual(intersectionInsideSlopeWithDikeBaseXCoordinate - shoulderHeight + shoulderLength, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside).X, cTolerance); - double rightShift = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X; - Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, cTolerance); - Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).Z, cTolerance); - } - [Test] public void AdaptedSurfaceLineWithoutShoulderWithSkewedSurfaceLevelInsideHasCorrectPointsInside() { - var surfaceLine = CreateSurfaceLineWithSkewedSurfaceLevelInside(); + SurfaceLine2 surfaceLine = CreateSurfaceLineWithSkewedSurfaceLevelInside(); var location = new Location(); const int shoulderLength = 2; const int shoulderHeight = 1; Assert.IsNull(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside)); Assert.IsNull(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); EvaluateAdaptedSurfaceLineWithSkewedSurfaceLevelInside(surfaceLine, adaptedSurfaceLine, shoulderHeight, shoulderLength); } [Test] public void AdaptedSurfaceLineWithoutShoulderWithSkewedSurfaceLevelInsideAndInbetweenPointInSlopeHasCorrectPointsInside() { - var surfaceLine = CreateSurfaceLineWithSkewedSurfaceLevelInside(); + SurfaceLine2 surfaceLine = CreateSurfaceLineWithSkewedSurfaceLevelInside(); var location = new Location(); const int shoulderLength = 2; const int shoulderHeight = 1; @@ -513,42 +680,28 @@ Assert.IsNull(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside)); Assert.IsNull(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); Assert.AreEqual(7, surfaceLine.Geometry.Points.Count); Assert.AreEqual(8, adaptedSurfaceLine.Geometry.Points.Count); EvaluateAdaptedSurfaceLineWithSkewedSurfaceLevelInside(surfaceLine, adaptedSurfaceLine, shoulderHeight, shoulderLength); } - private SurfaceLine2 CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside() - { - var surfaceLine = CreateSurfaceLineWithSkewedSurfaceLevelInside(); - var pointShoulderBaseInside = new GeometryPoint { X = 9, Z = 1 }; - var pointShoulderTopInside = new GeometryPoint { X = 11, Z = 0.9 }; - var pointDikeToeAtPolder = new GeometryPoint { X = 13, Z = 0 }; - - surfaceLine.EnsurePointOfType(pointShoulderBaseInside.X, pointShoulderBaseInside.Z, CharacteristicPointType.ShoulderBaseInside); - surfaceLine.EnsurePointOfType(pointShoulderTopInside.X, pointShoulderTopInside.Z, CharacteristicPointType.ShoulderTopInside); - surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); - surfaceLine.SortPoints(); - return surfaceLine; - } - [Test] public void AdaptedSurfaceLineWithShoulderWithSkewedSurfaceLevelInsideHasCorrectPointsInside() { - var surfaceLine = CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside(); + SurfaceLine2 surfaceLine = CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside(); var location = new Location(); const int shoulderLength = 2; const int shoulderHeight = 1; var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); EvaluateAdaptedSurfaceLineWithSkewedSurfaceLevelInside(surfaceLine, adaptedSurfaceLine, shoulderHeight, shoulderLength); } [Test] public void AdaptedSurfaceLineWithShoulderWithSkewedSurfaceLevelInsideAndInbetweenPointsHasCorrectPointsInside() { - var surfaceLine = CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside(); + SurfaceLine2 surfaceLine = CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside(); var location = new Location(); const int shoulderLength = 2; const int shoulderHeight = 1; @@ -557,8 +710,11 @@ surfaceLine.EnsurePoint(12, 0.5); surfaceLine.EnsurePoint(14, -0.5); surfaceLine.SortPoints(); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); Assert.AreEqual(12, surfaceLine.Geometry.Points.Count); Assert.AreEqual(9, adaptedSurfaceLine.Geometry.Points.Count); EvaluateAdaptedSurfaceLineWithSkewedSurfaceLevelInside(surfaceLine, adaptedSurfaceLine, shoulderHeight, shoulderLength); @@ -567,19 +723,35 @@ [Test] public void AdaptedSurfaceLineWithTrafficLoadPointsShouldAdjustThosePoints() { - var surfaceLine = CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside(); + SurfaceLine2 surfaceLine = CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside(); var location = new Location(); const double cTolerance = 0.0000001; - var pointTrafficLoadOutside = new GeometryPoint { X = 9.5, Z = 0.975 }; - var pointTrafficLoadInside = new GeometryPoint { X = 10.5, Z = 0.925 }; + var pointTrafficLoadOutside = new GeometryPoint + { + X = 9.5, + Z = 0.975 + }; + var pointTrafficLoadInside = new GeometryPoint + { + X = 10.5, + Z = 0.925 + }; surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); const int shoulderLength = 2; const int shoulderHeight = 1; var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); - var expectedPointTrafficLoadOutside = new GeometryPoint { X = 9.5, Z = 1.0 }; - var expectedPointTrafficLoadInside = new GeometryPoint { X = 10.5, Z = 1.0 }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var expectedPointTrafficLoadOutside = new GeometryPoint + { + X = 9.5, + Z = 1.0 + }; + var expectedPointTrafficLoadInside = new GeometryPoint + { + X = 10.5, + Z = 1.0 + }; Assert.AreEqual(expectedPointTrafficLoadOutside.X, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).X, cTolerance); Assert.AreEqual(expectedPointTrafficLoadInside.X, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).X, cTolerance); Assert.AreEqual(expectedPointTrafficLoadOutside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).Z, cTolerance); @@ -600,15 +772,51 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + 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); @@ -618,10 +826,13 @@ surfaceLine.EnsurePointOfType(ditchBottomAtPolderSide.X, ditchBottomAtPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(ditchTopAtPolderSide.X, ditchTopAtPolderSide.Z, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -659,15 +870,51 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -3 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -3 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + 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); @@ -677,10 +924,13 @@ surfaceLine.EnsurePointOfType(ditchBottomAtPolderSide.X, ditchBottomAtPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(ditchTopAtPolderSide.X, ditchTopAtPolderSide.Z, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -718,16 +968,56 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 12, Z = 0 }; - var inBetweenPointAtSurfaceLevelInside = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = -90 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 12, + Z = 0 + }; + var inBetweenPointAtSurfaceLevelInside = new GeometryPoint + { + X = 10, + Z = 0 + }; + var pointAtSurfaceLevelInside = new GeometryPoint + { + X = 100, + Z = -90 + }; surfaceLine.EnsurePointOfType(pointAtToeRiver.X, pointAtToeRiver.Z, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(pointAtTopRiver.X, pointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(pointAtTopPolder.X, pointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder); @@ -738,10 +1028,13 @@ surfaceLine.EnsurePointOfType(ditchTopAtPolderSide.X, ditchTopAtPolderSide.Z, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePoint(inBetweenPointAtSurfaceLevelInside.X, inBetweenPointAtSurfaceLevelInside.Z); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -767,17 +1060,61 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 12, Z = 0 }; - var apoint = new GeometryPoint { X = 12.5, Z = 0 }; - var apoint2 = new GeometryPoint { X = 13, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 12, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 12.5, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 13, + 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); @@ -789,10 +1126,13 @@ surfaceLine.EnsurePointOfType(apoint.X, apoint.Z, null); surfaceLine.EnsurePointOfType(apoint2.X, apoint2.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -830,18 +1170,66 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 12, Z = 0 }; - var apoint2 = new GeometryPoint { X = 13, Z = 0 }; - var apoint3 = new GeometryPoint { X = 20, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 12, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 13, + Z = 0 + }; + var apoint3 = new GeometryPoint + { + X = 20, + 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); @@ -855,10 +1243,13 @@ surfaceLine.EnsurePointOfType(apoint3.X, apoint3.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); Assert.AreEqual(12, surfaceLine.Geometry.Points.Count); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -902,18 +1293,66 @@ var location = new Location(); const int shoulderLength = 1; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 12, Z = 0 }; - var apoint2 = new GeometryPoint { X = 19, Z = 0 }; - var apoint3 = new GeometryPoint { X = 20, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 12, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 19, + Z = 0 + }; + var apoint3 = new GeometryPoint + { + X = 20, + 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); @@ -927,10 +1366,13 @@ surfaceLine.EnsurePointOfType(apoint3.X, apoint3.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); Assert.AreEqual(12, surfaceLine.Geometry.Count); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -974,11 +1416,31 @@ var location = new Location(); const int shoulderLength = 100; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + 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); @@ -1002,11 +1464,31 @@ var location = new Location(); const double shoulderLength = 94.51; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + 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); @@ -1031,18 +1513,66 @@ var location = new Location(); const double shoulderLength = 90.51; const int shoulderHeight = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 9, Z = 0 }; - var apoint2 = new GeometryPoint { X = 19, Z = 0 }; - var apoint3 = new GeometryPoint { X = 20, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 9, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 19, + Z = 0 + }; + var apoint3 = new GeometryPoint + { + X = 20, + 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); @@ -1075,11 +1605,31 @@ location.NewMaxHeightShoulderAsFraction = 0.5; const int shoulderLength = 1; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1089,10 +1639,10 @@ surfaceLineAdapter.MaxShoulderLevel = location.NewMaxHeightShoulderAsFraction * (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z) + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double expectedShoulderHeight = Math.Min(shoulderHeight, surfaceLineAdapter.MaxShoulderLevel + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z); var expectedPoint = new GeometryPoint(3.5, expectedShoulderHeight); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -1112,21 +1662,41 @@ location.NewMaxHeightShoulderAsFraction = 1; const int shoulderLength = 1; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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(pointAtToePolder.X, pointAtToePolder.Z, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double expectedShoulderHeight = Math.Min(shoulderHeight, (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z)); var expectedPoint = new GeometryPoint(3, expectedShoulderHeight); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -1147,11 +1717,31 @@ location.NewMaxHeightShoulderAsFraction = 1; const int shoulderLength = 1; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1160,10 +1750,10 @@ var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); surfaceLineAdapter.MaxShoulderLevel = maxFractionOfDikeHeightForShoulderHeight * (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z) + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); double expectedShoulderHeight = Math.Min(shoulderHeight, surfaceLineAdapter.MaxShoulderLevel + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z); var expectedPoint = new GeometryPoint(3.5, expectedShoulderHeight); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); } @@ -1183,11 +1773,31 @@ location.NewShoulderTopSlope = 0.05; const double shoulderLength = 4.5; const double shoulderHeight = 0.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 pointAtToePolder = new GeometryPoint { X = 3, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1196,15 +1806,15 @@ var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); surfaceLineAdapter.MaxShoulderLevel = 0.8 * (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z) + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedBasePoint = new GeometryPoint(2.263, 0.737); - var actualBasePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualBasePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedBasePoint.LocationEquals(actualBasePoint)); var expectedTopPoint = new GeometryPoint(7, 0.5); - var actualTopPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualTopPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedTopPoint.LocationEquals(actualTopPoint)); var expectedToePoint = new GeometryPoint(8.5, 0.0); - var actualToePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + GeometryPoint actualToePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); Assert.IsTrue(expectedToePoint.LocationEquals(actualToePoint)); } @@ -1224,11 +1834,31 @@ location.NewShoulderTopSlope = 0.5; const double shoulderLength = 4.5; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1269,11 +1899,31 @@ location.NewShoulderBaseSlope = 1; const double shoulderLength = 4.5; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1282,15 +1932,15 @@ var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0); surfaceLineAdapter.MaxShoulderLevel = 0.5 * (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z) + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedBasePoint = new GeometryPoint(2.5, 0.5); - var actualBasePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualBasePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedBasePoint.LocationEquals(actualBasePoint)); var expectedTopPoint = new GeometryPoint(7, 0.5); - var actualTopPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualTopPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedTopPoint.LocationEquals(actualTopPoint)); var expectedToePoint = new GeometryPoint(7.5, 0.0); - var actualToePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + GeometryPoint actualToePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); Assert.IsTrue(expectedToePoint.LocationEquals(actualToePoint)); } @@ -1310,11 +1960,31 @@ location.NewShoulderBaseSlope = 1; const double shoulderLength = 4.5; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1324,15 +1994,15 @@ surfaceLineAdapter.MaxShoulderLevel = 0.5 * (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z) + surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; surfaceLineAdapter.SlopeOfNewShoulder = 2; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedBasePoint = new GeometryPoint(2.5, 0.5); - var actualBasePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualBasePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedBasePoint.LocationEquals(actualBasePoint)); var expectedTopPoint = new GeometryPoint(7, 0.5); - var actualTopPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); + GeometryPoint actualTopPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); Assert.IsTrue(expectedTopPoint.LocationEquals(actualTopPoint)); var expectedToePoint = new GeometryPoint(8, 0.0); - var actualToePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + GeometryPoint actualToePoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); Assert.IsTrue(expectedToePoint.LocationEquals(actualToePoint)); } @@ -1352,11 +2022,31 @@ location.NewShoulderBaseSlope = 0.001; const double shoulderLength = 4.5; const int shoulderHeight = 1; - 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 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 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 + }; + 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); @@ -1384,17 +2074,61 @@ const int shoulderHeight = 1; location.UseNewMinDistanceDikeToeStartDitch = true; location.NewMinDistanceDikeToeStartDitch = 1; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 9, Z = 0 }; - var apoint2 = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 9, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 10, + 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); @@ -1406,10 +2140,13 @@ surfaceLine.EnsurePointOfType(apoint.X, apoint.Z, null); surfaceLine.EnsurePointOfType(apoint2.X, apoint2.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -1449,17 +2186,61 @@ const int shoulderHeight = 1; location.UseNewMinDistanceDikeToeStartDitch = true; location.NewMinDistanceDikeToeStartDitch = 31; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 9, Z = 0 }; - var apoint2 = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 9, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 10, + 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); @@ -1471,10 +2252,13 @@ surfaceLine.EnsurePointOfType(apoint.X, apoint.Z, null); surfaceLine.EnsurePointOfType(apoint2.X, apoint2.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -1514,17 +2298,61 @@ const int shoulderHeight = 1; location.UseNewMinDistanceDikeToeStartDitch = true; location.NewMinDistanceDikeToeStartDitch = 131; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 9, Z = 0 }; - var apoint2 = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 9, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 10, + 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); @@ -1536,7 +2364,10 @@ surfaceLine.EnsurePointOfType(apoint.X, apoint.Z, null); surfaceLine.EnsurePointOfType(apoint2.X, apoint2.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) { SlopeOfNewShoulder = 2 }; + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, 0) + { + SlopeOfNewShoulder = 2 + }; Assert.That(() => surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false), Throws.InstanceOf()); } @@ -1557,21 +2388,65 @@ location.UseNewMinDistanceDikeToeStartDitch = true; location.NewMinDistanceDikeToeStartDitch = 1; location.UseNewDitchDefinition = true; - var polderLevel = -0.2; + double polderLevel = -0.2; location.NewSlopeAngleDitch = 1; location.NewDepthDitch = 1.8; location.NewWidthDitchBottom = 2; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 9, Z = 0 }; - var apoint2 = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 9, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 10, + 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); @@ -1583,10 +2458,13 @@ surfaceLine.EnsurePointOfType(apoint.X, apoint.Z, null); surfaceLine.EnsurePointOfType(apoint2.X, apoint2.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, polderLevel) { SlopeOfNewShoulder = 2 }; - var adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, polderLevel) + { + SlopeOfNewShoulder = 2 + }; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false); var expectedPoint = new GeometryPoint(3.5, 1); - var actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); + GeometryPoint actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside); Assert.IsTrue(expectedPoint.LocationEquals(actualPoint)); var expectedShoulderTopInside = new GeometryPoint(4.5, 1); actualPoint = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside); @@ -1631,17 +2509,61 @@ location.NewSlopeAngleDitch = 1; location.NewDepthDitch = 1.8; location.NewWidthDitchBottom = 2; - var pointAtToeRiver = new GeometryPoint { X = 0, Z = 0 }; - var pointAtTopRiver = new GeometryPoint { X = 2, Z = 2 }; - var pointAtTopPolder = new GeometryPoint { X = 3, Z = 2 }; - var pointAtToePolder = new GeometryPoint { X = 4, Z = 0 }; - var ditchTopAtDikeSide = new GeometryPoint { X = 5, Z = 0 }; - var ditchBottomAtDikeSide = new GeometryPoint { X = 6, Z = -2 }; - var ditchBottomAtPolderSide = new GeometryPoint { X = 7, Z = -2 }; - var ditchTopAtPolderSide = new GeometryPoint { X = 8, Z = 0 }; - var apoint = new GeometryPoint { X = 9, Z = 0 }; - var apoint2 = new GeometryPoint { X = 10, Z = 0 }; - var pointAtSurfaceLevelInside = new GeometryPoint { X = 100, Z = 0 }; + var pointAtToeRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointAtTopRiver = new GeometryPoint + { + X = 2, + Z = 2 + }; + var pointAtTopPolder = new GeometryPoint + { + X = 3, + Z = 2 + }; + var pointAtToePolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + var ditchTopAtDikeSide = new GeometryPoint + { + X = 5, + Z = 0 + }; + var ditchBottomAtDikeSide = new GeometryPoint + { + X = 6, + Z = -2 + }; + var ditchBottomAtPolderSide = new GeometryPoint + { + X = 7, + Z = -2 + }; + var ditchTopAtPolderSide = new GeometryPoint + { + X = 8, + Z = 0 + }; + var apoint = new GeometryPoint + { + X = 9, + Z = 0 + }; + var apoint2 = new GeometryPoint + { + X = 10, + 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); @@ -1653,8 +2575,103 @@ surfaceLine.EnsurePointOfType(apoint.X, apoint.Z, null); surfaceLine.EnsurePointOfType(apoint2.X, apoint2.Z, null); surfaceLine.EnsurePointOfType(pointAtSurfaceLevelInside.X, pointAtSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, polderLevel) { SlopeOfNewShoulder = 2 }; + var surfaceLineAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, polderLevel) + { + SlopeOfNewShoulder = 2 + }; Assert.That(() => surfaceLineAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false), Throws.InstanceOf()); } + + private SurfaceLine2 CreateSurfaceLineWithSkewedSurfaceLevelInside() + { + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointSurfaceLevelOutside = new GeometryPoint + { + X = -1, + Z = -1 + }; + var pointDikeToeAtRiver = new GeometryPoint + { + X = 0, + Z = 0 + }; + var pointDikeTopAtRiver = new GeometryPoint + { + X = 4, + Z = 4 + }; + var pointDikeTopAtPolder = new GeometryPoint + { + X = 6, + Z = 4 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 10, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 18, + Z = -1 + }; + + surfaceLine.EnsurePointOfType(pointSurfaceLevelOutside.X, pointSurfaceLevelOutside.Z, CharacteristicPointType.SurfaceLevelOutside); + 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.SortPoints(); + return surfaceLine; + } + + private void EvaluateAdaptedSurfaceLineWithSkewedSurfaceLevelInside(SurfaceLine2 surfaceLine, SurfaceLine2 adaptedSurfaceLine, double shoulderHeight, double shoulderLength) + { + const double cTolerance = 0.0000001; + Assert.IsNotNull(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside)); + Assert.IsNotNull(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside)); + Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z + shoulderHeight, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).Z, cTolerance); + double intersectionInsideSlopeWithDikeBaseXCoordinate = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X + (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z); + Assert.AreEqual(intersectionInsideSlopeWithDikeBaseXCoordinate - shoulderHeight, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside).X, cTolerance); + Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z + shoulderHeight, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside).Z, cTolerance); + Assert.AreEqual(intersectionInsideSlopeWithDikeBaseXCoordinate - shoulderHeight + shoulderLength, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside).X, cTolerance); + double rightShift = adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X; + Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, cTolerance); + Assert.AreEqual(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).Z, cTolerance); + } + + private SurfaceLine2 CreateSurfaceLineWithShoulderAndSkewedSurfaceLevelInside() + { + SurfaceLine2 surfaceLine = CreateSurfaceLineWithSkewedSurfaceLevelInside(); + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 0.9 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 13, + Z = 0 + }; + + surfaceLine.EnsurePointOfType(pointShoulderBaseInside.X, pointShoulderBaseInside.Z, CharacteristicPointType.ShoulderBaseInside); + surfaceLine.EnsurePointOfType(pointShoulderTopInside.X, pointShoulderTopInside.Z, CharacteristicPointType.ShoulderTopInside); + surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.SortPoints(); + return surfaceLine; + } } } \ No newline at end of file