Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs =================================================================== diff -u -r4879 -r4903 --- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 4879) +++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 4903) @@ -28,7 +28,7 @@ namespace Deltares.DamEngine.TestHelpers.Factories; -public class FactoryForSoilProfiles +public static class FactoryForSoilProfiles { /// /// Create simple soil profile Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs =================================================================== diff -u -r4898 -r4903 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 4898) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 4903) @@ -56,4 +56,19 @@ return true; } + + /// + /// Combines the surface line with SoilProfile2D to create a new profile2D. + /// + /// The surface line. + /// The SoilProfile2D. + /// The default soil. + /// The required shift of the geometry so it will fit the surface line + /// + public static SoilProfile2D CombineSurfaceLineWithSoilProfile2D(SurfaceLine2 surfaceLine, SoilProfile2D soilProfile2D, + Soil defaultSoil, double shift) + { + return null; + } + } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs =================================================================== diff -u -r4898 -r4903 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs (.../SoilProfile2DSurfaceLineHelperTests.cs) (revision 4898) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs (.../SoilProfile2DSurfaceLineHelperTests.cs) (revision 4903) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Collections.Generic; using System.Linq; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; @@ -34,6 +35,57 @@ // For debugging purposes private const string visualizationFolder = @"D:\src\dam\DamTools\GeometryVisualizer\"; + private static IEnumerable SurfaceLinesTestCases + { + get + { + yield return new TestCaseData( + new TestCaseSurfaceLine + { + SurfaceLine = FactoryForSoilProfiles.CreateSurfaceLine(new[] + { + new GeometryPoint(0, 0), + new GeometryPoint(5, 10), + new GeometryPoint(10, 10) + }), + SurfaceCount = 3 + }).SetName("Surface is same as original surfaceline of soil profile"); + yield return new TestCaseData( + new TestCaseSurfaceLine + { + SurfaceLine = FactoryForSoilProfiles.CreateSurfaceLine(new[] + { + new GeometryPoint(0, 1), + new GeometryPoint(5, 11), + new GeometryPoint(10, 11) + }), + SurfaceCount = 3 + }).SetName("Surface is completely above original surfaceline of soil profile"); + yield return new TestCaseData( + new TestCaseSurfaceLine + { + SurfaceLine = FactoryForSoilProfiles.CreateSurfaceLine(new[] + { + new GeometryPoint(0, -1), + new GeometryPoint(5, 9), + new GeometryPoint(10, 9) + }), + SurfaceCount = 3 + }).SetName("Surface is completely below original surfaceline of soil profile"); + yield return new TestCaseData( + new TestCaseSurfaceLine + { + SurfaceLine = FactoryForSoilProfiles.CreateSurfaceLine(new[] + { + new GeometryPoint(0, 1), + new GeometryPoint(5, 9), + new GeometryPoint(10, 11) + }), + SurfaceCount = 3 + }).SetName("Surface is partially above and below original surfaceline of soil profile"); + } + } + [Test] [TestCase(PositionToSoilProfile2D.LeftOfSoilProfile, false)] [TestCase(PositionToSoilProfile2D.RightOfSoilProfile, false)] @@ -52,6 +104,34 @@ Assert.That(SoilProfile2DSurfaceLineHelper.IsSurfaceLineInsideSoilProfile2D(surfaceLine, soilProfile2D), Is.EqualTo(result)); } + [Test, TestCaseSource(nameof(SurfaceLinesTestCases))] + [Ignore("Work in progress")] + public void GivenSoilProfile2DWhenCombiningWithSurfaceLineThenCorrectNewSoilProfile2DIsCreated(TestCaseSurfaceLine testCaseSurfaceLine) + { + // Given + SoilProfile2D soilProfile2D = FactoryForSoilProfiles.CreateSoilProfile2DWithThreeLayers(); + var defaultSoil = new Soil + { + Name = "dikemat" + }; + SoilProfile2D newSoilProfile2D = SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D( + testCaseSurfaceLine.SurfaceLine, soilProfile2D, defaultSoil, 0); + Assert.That(newSoilProfile2D, Is.Not.Null); + Assert.That(newSoilProfile2D.Surfaces, Has.Count.EqualTo(testCaseSurfaceLine.SurfaceCount)); + } + + /// + /// Test case class for GivenSoilProfile2DWhenCombiningWithSurfaceLineThenCorrectNewSoilProfile2DIsCreated() + /// + public class TestCaseSurfaceLine + { + public SurfaceLine2 SurfaceLine { get; set; } + public int SurfaceCount { get; set; } + } + + /// + /// To indicate the position of the surface line to the soil profile. + /// public enum PositionToSoilProfile2D { LeftOfSoilProfile,