Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilSurfaceProfileTests.cs =================================================================== diff -u -r4759 -r4884 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilSurfaceProfileTests.cs (.../SoilSurfaceProfileTests.cs) (revision 4759) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilSurfaceProfileTests.cs (.../SoilSurfaceProfileTests.cs) (revision 4884) @@ -24,13 +24,67 @@ using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.TestHelpers.Factories; +using Deltares.DamEngine.TestHelpers.Geometry; using NUnit.Framework; namespace Deltares.DamEngine.Data.Tests.Geotechnics; [TestFixture] public class SoilSurfaceProfileTests { + // For debugging purposes + private const string visualizationFolder = @"D:\src\dam\DamTools\GeometryVisualizer\"; + + [Test, Ignore("Work in progress")] + public void GivenProfile1DWithOneLayerAndSurfaceLineWhenConverToProfile2DThenSoilProfile2DIsCreated() + { + // Given Profile1D with one layer and surface line + const string layerName = "Layer"; + const string topLayerName = "TopLayer"; + SoilLayer1D soilLayer = FactoryForSoilProfiles.CreateSoilLayer(-5, layerName); + var profile = new SoilProfile1D + { + BottomLevel = -10 + }; + profile.Layers.Add(soilLayer); + + SurfaceLine2 surfaceLine = FactoryForSoilProfiles.CreateSurfaceLine(new[] + { + new GeometryPoint(0, 0), + new GeometryPoint(5, 10), + new GeometryPoint(10, 10) + }); + + // When Convert to Profile2D + var soilSurfaceProfile = new SoilSurfaceProfile + { + SoilProfile = profile, + SurfaceLine2 = surfaceLine, + DikeEmbankmentMaterial = new Soil + { + Name = topLayerName + } + }; + + // Then SoilProfile2D is created + SoilProfile2D soilProfile2D = soilSurfaceProfile.ConvertToSoilProfile2D(); + // For debugging purposes + // GeometryExporter.ExportToFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.txt"); + // GeometryExporter.ExportToJsonFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.json"); + Assert.Multiple(() => + { + Assert.That(soilProfile2D.Geometry.Points.Count, Is.EqualTo(9)); + Assert.That(soilProfile2D.Geometry.Curves.Count, Is.EqualTo(10)); + Assert.That(soilProfile2D.Geometry.Surfaces.Count, Is.EqualTo(2)); + Assert.That(soilProfile2D.Geometry.Surfaces[0].OuterLoop.CurveList.Count, Is.EqualTo(6)); + Assert.That(soilProfile2D.Geometry.Surfaces[1].OuterLoop.CurveList.Count, Is.EqualTo(6)); + Assert.That(soilProfile2D.Geometry.Surfaces[0].OuterLoop.IsContinuous(), Is.True); + Assert.That(soilProfile2D.Geometry.Surfaces[1].OuterLoop.IsContinuous(), Is.True); + Assert.That(soilProfile2D.Geometry.Surfaces[0].OuterLoop.IsClockWise(), Is.True); + Assert.That(soilProfile2D.Geometry.Surfaces[1].OuterLoop.IsClockWise(), Is.True); + }); + } + [Test] public void ConvertToSoilProfile2D_WithSurfaceLineFullyAboveSoilLayers_ReturnsExpectedSoilProfile2D() { Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs =================================================================== diff -u -r4540 -r4884 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 4540) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 4884) @@ -137,6 +137,22 @@ } /// + /// Determines whether this loop is continuous (i.e. the end point of a curve is the start point of the next curve). + /// + /// True if continuous, false if not + public bool IsContinuous() + { + for (int i = 0; i < CurveList.Count - 1; i++) + { + if (CurveList[i].EndPoint != CurveList[i + 1].HeadPoint) + { + return false; + } + } + return true; + } + + /// /// See if a point lies in a closed surface /// ///