Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilSurfaceProfileTests.cs =================================================================== diff -u -r3228 -r3229 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilSurfaceProfileTests.cs (.../SoilSurfaceProfileTests.cs) (revision 3228) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilSurfaceProfileTests.cs (.../SoilSurfaceProfileTests.cs) (revision 3229) @@ -19,11 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved.using System; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.Standard; @@ -61,7 +58,7 @@ } [Test] - public void ConvertToSoilProfile2D_WithSurfaceLineAboveSoilLayers_SetsCorrectSurfacesAndGeometry() + public void ConvertToSoilProfile2D_WithSurfaceLineFullyAboveSoilLayers_SetsCorrectSurfacesAndGeometry() { // Setup const string bottomLayerName = "BottomLayer"; @@ -106,7 +103,7 @@ new GeometryCurve(new Point2D(0, -2), new Point2D(0, 0)), new GeometryCurve(new Point2D(0, 0), new Point2D(5, 10)), new GeometryCurve(new Point2D(5, 10), new Point2D(10, 10)), - new GeometryCurve(new Point2D(10, 10), new Point2D(10, -2)), + new GeometryCurve(new Point2D(10, 10), new Point2D(10, -2)) }, topSurface.CurveList); GeometryLoop middleSurface = soilLayer2Ds.Single(l => string.Equals(l.Name, middleLayerName)).GeometrySurface.OuterLoop; @@ -128,6 +125,65 @@ }, bottomSurface.CurveList); } + [Test] + public void ConvertToSoilProfile2D_WithSurfaceLineFullyEncasedBySoilLayer_SetsCorrectSurfacesAndGeometry() + { + // Setup + const string bottomLayerName = "BottomLayer"; + const string middleLayerName = "MiddleLayer"; + const string topLayerName = "TopLayer"; + + var profile = new SoilProfile1D + { + BottomLevel = -10 + }; + profile.Layers.Add(CreateSoilLayer(-5, bottomLayerName)); + profile.Layers.Add(CreateSoilLayer(-2, middleLayerName)); + + SurfaceLine2 surfaceLine = CreateSurfaceLine(new[] + { + new GeometryPoint(0, -4), + new GeometryPoint(5, -2.5), + new GeometryPoint(10, -2.5) + }); + + var soilSurfaceProfile = new SoilSurfaceProfile + { + SoilProfile = profile, + SurfaceLine2 = surfaceLine, + DikeEmbankmentMaterial = new Soil + { + Name = topLayerName + } + }; + + // Call + soilSurfaceProfile.ConvertToSoilProfile2D(); + + // Assert + var soilLayer2Ds = soilSurfaceProfile.Surfaces; + Assert.That(soilLayer2Ds, Has.Count.EqualTo(2)); + + GeometryLoop middleSurface = soilLayer2Ds.Single(l => string.Equals(l.Name, middleLayerName)).GeometrySurface.OuterLoop; + AssertGeometry(new[] + { + new GeometryCurve(new Point2D(0, -5), new Point2D(10, -5)), + new GeometryCurve(new Point2D(0, -5), new Point2D(0, -4)), + new GeometryCurve(new Point2D(0, -4), new Point2D(5, -2.5)), + new GeometryCurve(new Point2D(5, -2.5), new Point2D(10, -2.5)), + new GeometryCurve(new Point2D(10, -2.5), new Point2D(10, -5)) + }, middleSurface.CurveList); + + GeometryLoop bottomSurface = soilLayer2Ds.Single(l => string.Equals(l.Name, bottomLayerName)).GeometrySurface.OuterLoop; + AssertGeometry(new[] + { + new GeometryCurve(new Point2D(0, -5), new Point2D(10, -5)), + new GeometryCurve(new Point2D(10, -5), new Point2D(10, -10)), + new GeometryCurve(new Point2D(10, -10), new Point2D(0, -10)), + new GeometryCurve(new Point2D(0, -10), new Point2D(0, -5)) + }, bottomSurface.CurveList); + } + private static void AssertGeometry(IEnumerable expectedCurves, IEnumerable actualCurves) { int nrOfExpectedCurves = expectedCurves.Count();