Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineSlopeAdapterTest.cs =================================================================== diff -u -r4000 -r4052 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineSlopeAdapterTest.cs (.../SurfaceLineSlopeAdapterTest.cs) (revision 4000) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/DikesDesign/SurfaceLineSlopeAdapterTest.cs (.../SurfaceLineSlopeAdapterTest.cs) (revision 4052) @@ -25,1331 +25,1330 @@ using Deltares.DamEngine.Data.Geotechnics; using NUnit.Framework; -namespace Deltares.DamEngine.Calculators.Tests.DikesDesign +namespace Deltares.DamEngine.Calculators.Tests.DikesDesign; + +/// +/// Class for testing SurfaceLineSlopeAdapter +/// +[TestFixture] +public class SurfaceLineSlopeAdapterTest { + private readonly Location location = new Location(); + /// - /// Class for testing SurfaceLineSlopeAdapter + /// Tests the fixture tear down. /// - [TestFixture] - public class SurfaceLineSlopeAdapterTest - { - private readonly Location location = new Location(); + [TearDown] + public void TestFixtureTearDown() {} - /// - /// Tests the fixture tear down. - /// - [TearDown] - public void TestFixtureTearDown() {} - - private static SurfaceLine2 CreateSimpleDike() + private static SurfaceLine2 CreateSimpleDike() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(2, 1, CharacteristicPointType.DikeTopAtPolder); - surfaceLine.EnsurePointOfType(3, 0, CharacteristicPointType.DikeToeAtPolder); - surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside); - return surfaceLine; - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(1, 1, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(2, 1, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(3, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(100, 0, CharacteristicPointType.SurfaceLevelInside); + return surfaceLine; + } - #region ConstructWithDeltaX + #region ConstructWithDeltaX - [Test] - public void ConstructNewSurfaceLineReturnsANewSurfaceLine() + [Test] + public void ConstructNewSurfaceLineReturnsANewSurfaceLine() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + SurfaceLine2 constructNewSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1); + Assert.IsNotNull(constructNewSurfaceLine); + } + + [Test] + public void AdaptedSimpleDikeLineHasCorrectNewToeDikeAtPolder() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + var pointDikeToeAtPolder = new GeometryPoint { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - SurfaceLine2 constructNewSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1); - Assert.IsNotNull(constructNewSurfaceLine); - } + X = 3, + Z = 0 + }; + surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1.0); + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = 4, + Z = 0 + }; + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + } - [Test] - public void AdaptedSimpleDikeLineHasCorrectNewToeDikeAtPolder() + [Test] + public void AdaptedDikeWithShoulderHasCorrectPointsAfterToeSlope() + { + var surfaceLine = new SurfaceLine2 { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - var pointDikeToeAtPolder = new GeometryPoint + CharacteristicPoints = { - X = 3, - Z = 0 - }; - surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1.0); - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = 4, - Z = 0 - }; - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 20, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double deltaX = 1.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); + var expectedPointShoulderBaseInside = new GeometryPoint + { + X = pointShoulderBaseInside.X + deltaX, + Z = pointShoulderBaseInside.Z + }; + var expectedPointShoulderTopInside = new GeometryPoint + { + X = pointShoulderTopInside.X, + Z = pointShoulderTopInside.Z + }; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsTrue(expectedPointShoulderBaseInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside))); + Assert.IsTrue(expectedPointShoulderTopInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside))); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedDikeWithShoulderHasCorrectPointsAfterToeSlope() + [Test] + public void AdaptedDikeWithDitchHasCorrectPointsAfterToeSlope() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 20, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double deltaX = 1.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); - var expectedPointShoulderBaseInside = new GeometryPoint - { - X = pointShoulderBaseInside.X + deltaX, - Z = pointShoulderBaseInside.Z - }; - var expectedPointShoulderTopInside = new GeometryPoint - { - X = pointShoulderTopInside.X, - Z = pointShoulderTopInside.Z - }; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsTrue(expectedPointShoulderBaseInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside))); - Assert.IsTrue(expectedPointShoulderTopInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside))); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 30, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double deltaX = 1.0; + const double deltaXDitch = 3; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X + deltaX, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X + deltaX + deltaXDitch, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X + deltaX + deltaXDitch, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X + deltaX + deltaXDitch, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X + deltaX + deltaXDitch, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedDikeWithDitchHasCorrectPointsAfterToeSlope() + [Test] + public void AdaptedDikeWithShoulderAndDitchHasCorrectPointsAfterToeSlope() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 30, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); - surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double deltaX = 1.0; - const double deltaXDitch = 3; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X + deltaX, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X + deltaX + deltaXDitch, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X + deltaX + deltaXDitch, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X + deltaX + deltaXDitch, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X + deltaX + deltaXDitch, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double deltaX = 1.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); + var expectedPointShoulderBaseInside = new GeometryPoint + { + X = pointShoulderBaseInside.X + deltaX, + Z = pointShoulderBaseInside.Z + }; + var expectedPointShoulderTopInside = new GeometryPoint + { + X = pointShoulderTopInside.X, + Z = pointShoulderTopInside.Z + }; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsTrue(expectedPointShoulderBaseInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside))); + Assert.IsTrue(expectedPointShoulderTopInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside))); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedDikeWithShoulderAndDitchHasCorrectPointsAfterToeSlope() + [Test] + public void AdaptedSimpleDikeLineWithInBetweenPointOnInsideSlopeHasCorrectNewToeDikeAtPolder() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + surfaceLine.EnsurePoint(2.5, 0.4); // in between point on inside slope + surfaceLine.SortPoints(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1.0); + var expectedPointDikeToeAtPolder = new GeometryPoint { - var surfaceLine = new SurfaceLine2 - { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double deltaX = 1.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); - var expectedPointShoulderBaseInside = new GeometryPoint - { - X = pointShoulderBaseInside.X + deltaX, - Z = pointShoulderBaseInside.Z - }; - var expectedPointShoulderTopInside = new GeometryPoint - { - X = pointShoulderTopInside.X, - Z = pointShoulderTopInside.Z - }; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsTrue(expectedPointShoulderBaseInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside))); - Assert.IsTrue(expectedPointShoulderTopInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside))); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + X = 4, + Z = 0 + }; + Assert.AreEqual(6, surfaceLine.Geometry.Count); + Assert.AreEqual(5, adaptedSurfaceLine.Geometry.Count); // in between point should be thrown away + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + } - [Test] - public void AdaptedSimpleDikeLineWithInBetweenPointOnInsideSlopeHasCorrectNewToeDikeAtPolder() + [Test] + public void AdaptedSurfaceLineWithTrafficLoadPointsHasAdjustedPoints() + { + const double cTolerance = 0.0000001; + + // Create the base surfaceline (dike with shoulder and ditch) + var surfaceLine = new SurfaceLine2 { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - surfaceLine.EnsurePoint(2.5, 0.4); // in between point on inside slope - surfaceLine.SortPoints(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(1.0); - var expectedPointDikeToeAtPolder = new GeometryPoint + CharacteristicPoints = { - X = 4, - Z = 0 - }; - Assert.AreEqual(6, surfaceLine.Geometry.Count); - Assert.AreEqual(5, adaptedSurfaceLine.Geometry.Count); // in between point should be thrown away - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - } - - [Test] - public void AdaptedSurfaceLineWithTrafficLoadPointsHasAdjustedPoints() + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint { - const double cTolerance = 0.0000001; + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 20, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var pointTrafficLoadOutside = new GeometryPoint + { + X = 7, + Z = 2.3333333333 + }; + var pointTrafficLoadInside = new GeometryPoint + { + X = 8, + Z = 1.6666666667 + }; + surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); + surfaceLine.SortPoints(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double deltaX = 1.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); + var expectedPointTrafficLoadOutside = new GeometryPoint + { + X = 7, + Z = 2.5 + }; + var expectedPointTrafficLoadInside = new GeometryPoint + { + X = 8, + Z = 2.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); + Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); + pointTrafficLoadOutside = new GeometryPoint + { + X = 9.5, + Z = 1.0 + }; + pointTrafficLoadInside = new GeometryPoint + { + X = 10.5, + Z = 1.0 + }; + surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); + surfaceLine.SortPoints(); + surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); + expectedPointTrafficLoadOutside = new GeometryPoint + { + X = 9.5, + Z = 1.25 + }; + 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); + Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); + } - // Create the base surfaceline (dike with shoulder and ditch) - var surfaceLine = new SurfaceLine2 - { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 20, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var pointTrafficLoadOutside = new GeometryPoint - { - X = 7, - Z = 2.3333333333 - }; - var pointTrafficLoadInside = new GeometryPoint - { - X = 8, - Z = 1.6666666667 - }; - surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); - surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); - surfaceLine.SortPoints(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double deltaX = 1.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); - var expectedPointTrafficLoadOutside = new GeometryPoint - { - X = 7, - Z = 2.5 - }; - var expectedPointTrafficLoadInside = new GeometryPoint - { - X = 8, - Z = 2.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); - Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); - pointTrafficLoadOutside = new GeometryPoint - { - X = 9.5, - Z = 1.0 - }; - pointTrafficLoadInside = new GeometryPoint - { - X = 10.5, - Z = 1.0 - }; - surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); - surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); - surfaceLine.SortPoints(); - surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLine(deltaX); - expectedPointTrafficLoadOutside = new GeometryPoint - { - X = 9.5, - Z = 1.25 - }; - 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); - Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); - } + #endregion - #endregion + #region ConstructWithSlopeTangent - #region ConstructWithSlopeTangent + [Test] + public void IsExceptionThrownIfSlopeDoesNotIntersectSurfaceLine() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + Assert.That(() => surfaceLineAdapter.ConstructNewSurfaceLineBySlope(0), Throws.InstanceOf()); + } - [Test] - public void IsExceptionThrownIfSlopeDoesNotIntersectSurfaceLine() - { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - Assert.That(() => surfaceLineAdapter.ConstructNewSurfaceLineBySlope(0), Throws.InstanceOf()); - } + [Test] + public void IsNotExceptionThrownIfSlopeEqualsTheCurrentSlope() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + Assert.IsNotNull(surfaceLineAdapter.ConstructNewSurfaceLineBySlope(1.0)); + } - [Test] - public void IsNotExceptionThrownIfSlopeEqualsTheCurrentSlope() - { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - Assert.IsNotNull(surfaceLineAdapter.ConstructNewSurfaceLineBySlope(1.0)); - } + [Test] + public void ConstructNewSurfaceLineBySlopeReturnsANewSurfaceLine() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + Assert.IsNotNull(surfaceLineAdapter.ConstructNewSurfaceLineBySlope(0.9)); + } - [Test] - public void ConstructNewSurfaceLineBySlopeReturnsANewSurfaceLine() + [Test] + public void AdaptedSimpleDikeLineBySlopeHasCorrectNewToeDikeAtPolder() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 3.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + var expectedPointDikeToeAtPolder = new GeometryPoint { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - Assert.IsNotNull(surfaceLineAdapter.ConstructNewSurfaceLineBySlope(0.9)); - } + X = 5, + Z = 0 + }; + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + } - [Test] - public void AdaptedSimpleDikeLineBySlopeHasCorrectNewToeDikeAtPolder() + [Test] + public void AdaptedDikeWithShoulderBySlopeHasCorrectPointsAfterToeSlope() + { + var surfaceLine = new SurfaceLine2 { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 3.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - var expectedPointDikeToeAtPolder = new GeometryPoint + CharacteristicPoints = { - X = 5, - Z = 0 - }; - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - } - - [Test] - public void AdaptedDikeWithShoulderBySlopeHasCorrectPointsAfterToeSlope() + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint { - var surfaceLine = new SurfaceLine2 - { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 4.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - const double deltaX = 4.0; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X + deltaX, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } - - [Test] - public void AdaptedDikeWithDitchBySlopeHasCorrectPointsAfterToeSlope() + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint { - var surfaceLine = new SurfaceLine2 - { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); - surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 4.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - const double deltaX = 4.0; - const double deltaXDitch = 3; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X + deltaX, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X + deltaX + deltaXDitch, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X + deltaX + deltaXDitch, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X + deltaX + deltaXDitch, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X + deltaX + deltaXDitch, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 4.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + const double deltaX = 4.0; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X + deltaX, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void IsExceptionThrownWhenSlopeDoesNotFit() + [Test] + public void AdaptedDikeWithDitchBySlopeHasCorrectPointsAfterToeSlope() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 20, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); - surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 4.0; - Assert.That(() => surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent), Throws.InstanceOf()); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 4.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + const double deltaX = 4.0; + const double deltaXDitch = 3; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X + deltaX, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X + deltaX + deltaXDitch, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X + deltaX + deltaXDitch, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X + deltaX + deltaXDitch, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X + deltaX + deltaXDitch, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsBeyondDikeToe() + [Test] + public void IsExceptionThrownWhenSlopeDoesNotFit() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 4.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - const double deltaX = 4.0; - const double deltaXDitch = 3; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X + deltaX, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X + deltaX + deltaXDitch, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X + deltaX + deltaXDitch, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X + deltaX + deltaXDitch, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X + deltaX + deltaXDitch, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 20, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 4.0; + Assert.That(() => surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent), Throws.InstanceOf()); + } - [Test] - public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsInShoulderBetweenBaseAndTop() + [Test] + public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsBeyondDikeToe() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 2.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - const double deltaX = 1.0; - var expectedShoulderBaseInside = new GeometryPoint - { - X = pointShoulderBaseInside.X + deltaX, - Z = pointShoulderBaseInside.Z - }; - var expectedShoulderTopInside = new GeometryPoint - { - X = pointShoulderTopInside.X, - Z = pointShoulderTopInside.Z - }; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsTrue(expectedShoulderBaseInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside))); - Assert.IsTrue(expectedShoulderTopInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside))); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 4.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + const double deltaX = 4.0; + const double deltaXDitch = 3; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X + deltaX, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X + deltaX + deltaXDitch, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X + deltaX + deltaXDitch, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X + deltaX + deltaXDitch, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X + deltaX + deltaXDitch, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsOnShoulderTop() + [Test] + public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsInShoulderBetweenBaseAndTop() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 10, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 2.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - var expectedNewPoint = new GeometryPoint - { - X = pointShoulderTopInside.X, - Z = pointShoulderTopInside.Z - }; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); - Assert.IsTrue(adaptedSurfaceLine.Geometry.GetPointAt(expectedNewPoint.X, expectedNewPoint.Z) != null); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 2.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + const double deltaX = 1.0; + var expectedShoulderBaseInside = new GeometryPoint + { + X = pointShoulderBaseInside.X + deltaX, + Z = pointShoulderBaseInside.Z + }; + var expectedShoulderTopInside = new GeometryPoint + { + X = pointShoulderTopInside.X, + Z = pointShoulderTopInside.Z + }; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsTrue(expectedShoulderBaseInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside))); + Assert.IsTrue(expectedShoulderTopInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside))); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsInShoulderBetweenTopAndDikeToe() + [Test] + public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsOnShoulderTop() + { + var surfaceLine = new SurfaceLine2 { - var surfaceLine = new SurfaceLine2 + CharacteristicPoints = { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 7, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 8, - Z = 0 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 2.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - const double deltaX = 4.0; // from pointShoulderTopInside - var expectedNewPoint = new GeometryPoint - { - X = pointShoulderTopInside.X + deltaX, - Z = pointShoulderTopInside.Z - }; - var expectedPointDikeToeAtPolder = new GeometryPoint - { - X = pointDikeToeAtPolder.X, - Z = pointDikeToeAtPolder.Z - }; - var expectedPointDitchDikeSide = new GeometryPoint - { - X = pointDitchDikeSide.X, - Z = pointDitchDikeSide.Z - }; - var expectedPointBottomDitchDikeSide = new GeometryPoint - { - X = pointBottomDitchDikeSide.X, - Z = pointBottomDitchDikeSide.Z - }; - var expectedPointBottomDitchPolderSide = new GeometryPoint - { - X = pointBottomDitchPolderSide.X, - Z = pointBottomDitchPolderSide.Z - }; - var expectedPointDitchPolderSide = new GeometryPoint - { - X = pointDitchPolderSide.X, - Z = pointDitchPolderSide.Z - }; - var expectedPointSurfaceLevelInside = new GeometryPoint - { - X = pointSurfaceLevelInside.X, - Z = pointSurfaceLevelInside.Z - }; - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); - Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); - Assert.IsTrue(adaptedSurfaceLine.Geometry.GetPointAt(expectedNewPoint.X, expectedNewPoint.Z) != null); - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); - Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); - Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); - Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 10, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 2.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + var expectedNewPoint = new GeometryPoint + { + X = pointShoulderTopInside.X, + Z = pointShoulderTopInside.Z + }; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); + Assert.IsTrue(adaptedSurfaceLine.Geometry.GetPointAt(expectedNewPoint.X, expectedNewPoint.Z) != null); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedSimpleDikeLineWithInBetweenPointOnInsideSlopeBySlopeHasCorrectNewToeDikeAtPolder() + [Test] + public void AdaptedDikeWithShoulderAndDitchBySlopeHasCorrectPointsAfterSlopeIntersectsInShoulderBetweenTopAndDikeToe() + { + var surfaceLine = new SurfaceLine2 { - SurfaceLine2 surfaceLine = CreateSimpleDike(); - GeometryPoint pointDikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); - surfaceLine.EnsurePoint(2.5, 0.4); // in between point on inside slope - surfaceLine.SortPoints(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 4.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - const double deltaX = 3.0; - var expectedPointDikeToeAtPolder = new GeometryPoint + CharacteristicPoints = { - X = pointDikeToeAtPolder.X + deltaX, - Z = pointDikeToeAtPolder.Z - }; - Assert.AreEqual(6, surfaceLine.Geometry.Count); - Assert.AreEqual(5, adaptedSurfaceLine.Geometry.Count); // in between point should be thrown away - Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); - } + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 7, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 8, + Z = 0 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 2.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + const double deltaX = 4.0; // from pointShoulderTopInside + var expectedNewPoint = new GeometryPoint + { + X = pointShoulderTopInside.X + deltaX, + Z = pointShoulderTopInside.Z + }; + var expectedPointDikeToeAtPolder = new GeometryPoint + { + X = pointDikeToeAtPolder.X, + Z = pointDikeToeAtPolder.Z + }; + var expectedPointDitchDikeSide = new GeometryPoint + { + X = pointDitchDikeSide.X, + Z = pointDitchDikeSide.Z + }; + var expectedPointBottomDitchDikeSide = new GeometryPoint + { + X = pointBottomDitchDikeSide.X, + Z = pointBottomDitchDikeSide.Z + }; + var expectedPointBottomDitchPolderSide = new GeometryPoint + { + X = pointBottomDitchPolderSide.X, + Z = pointBottomDitchPolderSide.Z + }; + var expectedPointDitchPolderSide = new GeometryPoint + { + X = pointDitchPolderSide.X, + Z = pointDitchPolderSide.Z + }; + var expectedPointSurfaceLevelInside = new GeometryPoint + { + X = pointSurfaceLevelInside.X, + Z = pointSurfaceLevelInside.Z + }; + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderBaseInside)); + Assert.IsFalse(adaptedSurfaceLine.HasAnnotation(CharacteristicPointType.ShoulderTopInside)); + Assert.IsTrue(adaptedSurfaceLine.Geometry.GetPointAt(expectedNewPoint.X, expectedNewPoint.Z) != null); + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + Assert.IsTrue(expectedPointDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchDikeSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide))); + Assert.IsTrue(expectedPointBottomDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide))); + Assert.IsTrue(expectedPointDitchPolderSide.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide))); + Assert.IsTrue(expectedPointSurfaceLevelInside.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside))); + } - [Test] - public void AdaptedSurfaceLineWithTrafficLoadPointsBySlopeHasAdjustedPoints() + [Test] + public void AdaptedSimpleDikeLineWithInBetweenPointOnInsideSlopeBySlopeHasCorrectNewToeDikeAtPolder() + { + SurfaceLine2 surfaceLine = CreateSimpleDike(); + GeometryPoint pointDikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePoint(2.5, 0.4); // in between point on inside slope + surfaceLine.SortPoints(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 4.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + const double deltaX = 3.0; + var expectedPointDikeToeAtPolder = new GeometryPoint { - const double cTolerance = 0.0000001; + X = pointDikeToeAtPolder.X + deltaX, + Z = pointDikeToeAtPolder.Z + }; + Assert.AreEqual(6, surfaceLine.Geometry.Count); + Assert.AreEqual(5, adaptedSurfaceLine.Geometry.Count); // in between point should be thrown away + Assert.IsTrue(expectedPointDikeToeAtPolder.LocationEquals(adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder))); + } - // Create the base surfaceline (dike with shoulder and ditch) - var surfaceLine = new SurfaceLine2 - { - CharacteristicPoints = - { - GeometryMustContainPoint = true - }, - Geometry = new GeometryPointString() - }; - var pointShoulderBaseInside = new GeometryPoint - { - X = 9, - Z = 1 - }; - var pointShoulderTopInside = new GeometryPoint - { - X = 11, - Z = 1 - }; - var pointDikeToeAtPolder = new GeometryPoint - { - X = 14, - Z = 0 - }; - var pointDitchDikeSide = new GeometryPoint - { - X = 16, - Z = 0 - }; - var pointBottomDitchDikeSide = new GeometryPoint - { - X = 17, - Z = -1 - }; - var pointBottomDitchPolderSide = new GeometryPoint - { - X = 18, - Z = -1 - }; - var pointDitchPolderSide = new GeometryPoint - { - X = 19, - Z = 0 - }; - var pointSurfaceLevelInside = new GeometryPoint - { - X = 50, - Z = 0 - }; - surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); - surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); - surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); - 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); - surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); - surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); - surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); - var pointTrafficLoadOutside = new GeometryPoint - { - X = 7, - Z = 2.3333333333 - }; - var pointTrafficLoadInside = new GeometryPoint - { - X = 8, - Z = 1.6666666667 - }; - surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); - surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); - surfaceLine.SortPoints(); - var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - const double slopeTangent = 1.0 / 4.0; - SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - var expectedPointTrafficLoadOutside = new GeometryPoint - { - X = 7, - Z = 2.75 - }; - var expectedPointTrafficLoadInside = new GeometryPoint - { - X = 8, - Z = 2.5 - }; - 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); - Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); - pointTrafficLoadOutside = new GeometryPoint - { - X = 10.0, - Z = 1.0 - }; - pointTrafficLoadInside = new GeometryPoint - { - X = 13, - Z = 1.0 / 3.0 - }; - surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); - surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); - surfaceLine.SortPoints(); - surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); - adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); - expectedPointTrafficLoadOutside = new GeometryPoint - { - X = 10.0, - Z = 2.0 - }; - expectedPointTrafficLoadInside = new GeometryPoint - { - X = 13, - Z = 1.25 - }; - 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); - Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); - } + [Test] + public void AdaptedSurfaceLineWithTrafficLoadPointsBySlopeHasAdjustedPoints() + { + const double cTolerance = 0.0000001; - #endregion + // Create the base surfaceline (dike with shoulder and ditch) + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new GeometryPointString() + }; + var pointShoulderBaseInside = new GeometryPoint + { + X = 9, + Z = 1 + }; + var pointShoulderTopInside = new GeometryPoint + { + X = 11, + Z = 1 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 14, + Z = 0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 16, + Z = 0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 17, + Z = -1 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 18, + Z = -1 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 19, + Z = 0 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 50, + Z = 0 + }; + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4, 3, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(6, 3, CharacteristicPointType.DikeTopAtPolder); + 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.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + var pointTrafficLoadOutside = new GeometryPoint + { + X = 7, + Z = 2.3333333333 + }; + var pointTrafficLoadInside = new GeometryPoint + { + X = 8, + Z = 1.6666666667 + }; + surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); + surfaceLine.SortPoints(); + var surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + const double slopeTangent = 1.0 / 4.0; + SurfaceLine2 adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + var expectedPointTrafficLoadOutside = new GeometryPoint + { + X = 7, + Z = 2.75 + }; + var expectedPointTrafficLoadInside = new GeometryPoint + { + X = 8, + Z = 2.5 + }; + 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); + Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); + pointTrafficLoadOutside = new GeometryPoint + { + X = 10.0, + Z = 1.0 + }; + pointTrafficLoadInside = new GeometryPoint + { + X = 13, + Z = 1.0 / 3.0 + }; + surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); + surfaceLine.SortPoints(); + surfaceLineAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, 0); + adaptedSurfaceLine = surfaceLineAdapter.ConstructNewSurfaceLineBySlope(slopeTangent); + expectedPointTrafficLoadOutside = new GeometryPoint + { + X = 10.0, + Z = 2.0 + }; + expectedPointTrafficLoadInside = new GeometryPoint + { + X = 13, + Z = 1.25 + }; + 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); + Assert.AreEqual(expectedPointTrafficLoadInside.Z, adaptedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).Z, cTolerance); } + + #endregion } \ No newline at end of file