using System; using System.Linq; using Deltares.Geometry; using Deltares.Geotechnics.Soils; using Deltares.MStab; using Deltares.MStab.IO.Classic; using Deltares.Standard.TestUtils; using NUnit.Framework; namespace Deltares.Dam.Tests { [TestFixture] public class CombineSurfaceLineSoilProfile2DTest { private SoilProfile2D ReadProfileFromStiFile(string soilGeometry2DName) { MStabProject mstabProject = null; try { var converter = new Converter(); mstabProject = new MStabProject(); mstabProject.Stability = converter.ConvertClassicMStab(soilGeometry2DName); return mstabProject.Stability.SoilProfile; } catch (Exception) { return null; } finally { if (null != mstabProject) { mstabProject.Dispose(); } } } private GeometryPointString SetupVerySimpleSurfaceLine() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = 0, Z = 5 }); surfaceLine.Points.Add(new GeometryPoint { X = 100, Z = 5 }); return surfaceLine; } private GeometryPointString SetupWiderVerySimpleSurfaceLine() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = -10, Z = 5 }); surfaceLine.Points.Add(new GeometryPoint { X = 110, Z = 5 }); return surfaceLine; } private GeometryPointString SetupVerySmallerVerySimpleSurfaceLine() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = 30, Z = 5 }); surfaceLine.Points.Add(new GeometryPoint { X = 70, Z = 5 }); return surfaceLine; } private GeometryPointString SetupVerySmallerVerySimpleSurfaceLineLowInProfile() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = 30, Z = -20 }); surfaceLine.Points.Add(new GeometryPoint { X = 70, Z = -10 }); return surfaceLine; } private GeometryPointString SetupSmallerVerySimpleSurfaceLineHighInProfile() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = 10, Z = 1.5 }); surfaceLine.Points.Add(new GeometryPoint { X = 90, Z = 1.5 }); return surfaceLine; } private GeometryPointString SetupJustSmallerVerySimpleSurfaceLineHighInProfile() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = 5, Z = 1.5 }); surfaceLine.Points.Add(new GeometryPoint { X = 95, Z = 1.5 }); return surfaceLine; } private GeometryPointString SetupWiderSurfaceLineNearProfile() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = -0.470, Z = 0.422 }); surfaceLine.Points.Add(new GeometryPoint { X = 11.900, Z = 0.360 }); surfaceLine.Points.Add(new GeometryPoint { X = 23.930, Z = 0.320 }); surfaceLine.Points.Add(new GeometryPoint { X = 27.340, Z = 0.630 }); surfaceLine.Points.Add(new GeometryPoint { X = 30.070, Z = 1.150 }); surfaceLine.Points.Add(new GeometryPoint { X = 32.300, Z = 1.680 }); surfaceLine.Points.Add(new GeometryPoint { X = 34.560, Z = 2.620 }); surfaceLine.Points.Add(new GeometryPoint { X = 36.470, Z = 3.500 }); surfaceLine.Points.Add(new GeometryPoint { X = 36.770, Z = 3.615 }); surfaceLine.Points.Add(new GeometryPoint { X = 36.990, Z = 3.700 }); surfaceLine.Points.Add(new GeometryPoint { X = 37.530, Z = 3.790 }); surfaceLine.Points.Add(new GeometryPoint { X = 38.140, Z = 3.790 }); surfaceLine.Points.Add(new GeometryPoint { X = 38.720, Z = 3.790 }); surfaceLine.Points.Add(new GeometryPoint { X = 39.270, Z = 3.720 }); surfaceLine.Points.Add(new GeometryPoint { X = 40.020, Z = 3.390 }); surfaceLine.Points.Add(new GeometryPoint { X = 42.370, Z = 2.450 }); surfaceLine.Points.Add(new GeometryPoint { X = 44.170, Z = 1.770 }); surfaceLine.Points.Add(new GeometryPoint { X = 48.100, Z = 1.340 }); surfaceLine.Points.Add(new GeometryPoint { X = 53.150, Z = 0.690 }); surfaceLine.Points.Add(new GeometryPoint { X = 57.581, Z = 0.310 }); surfaceLine.Points.Add(new GeometryPoint { X = 57.582, Z = 0.290 }); surfaceLine.Points.Add(new GeometryPoint { X = 58.000, Z = 0.400 }); surfaceLine.Points.Add(new GeometryPoint { X = 58.700, Z = 0.310 }); surfaceLine.Points.Add(new GeometryPoint { X = 60.920, Z = 0.350 }); surfaceLine.Points.Add(new GeometryPoint { X = 62.300, Z = 0.310 }); surfaceLine.Points.Add(new GeometryPoint { X = 63.712, Z = 0.310 }); surfaceLine.Points.Add(new GeometryPoint { X = 63.760, Z = 0.370 }); surfaceLine.Points.Add(new GeometryPoint { X = 64.000, Z = 0.270 }); surfaceLine.Points.Add(new GeometryPoint { X = 66.250, Z = 0.430 }); surfaceLine.Points.Add(new GeometryPoint { X = 67.430, Z = 0.610 }); surfaceLine.Points.Add(new GeometryPoint { X = 105.530, Z = 0.610 }); return surfaceLine; } private GeometryPointString SetupWiderSurfaceLineOnAndNearProfile() { // create surfaceline var surfaceLine = new GeometryPointString(); surfaceLine.Points.Add(new GeometryPoint { X = -0.470, Z = 0.412 }); surfaceLine.Points.Add(new GeometryPoint { X = 11.900, Z = 0.350 }); surfaceLine.Points.Add(new GeometryPoint { X = 23.930, Z = 0.310 }); surfaceLine.Points.Add(new GeometryPoint { X = 27.340, Z = 0.620 }); surfaceLine.Points.Add(new GeometryPoint { X = 30.070, Z = 1.140 }); surfaceLine.Points.Add(new GeometryPoint { X = 32.300, Z = 1.670 }); surfaceLine.Points.Add(new GeometryPoint { X = 34.560, Z = 2.610 }); surfaceLine.Points.Add(new GeometryPoint { X = 36.470, Z = 3.490 }); surfaceLine.Points.Add(new GeometryPoint { X = 36.990, Z = 3.690 }); surfaceLine.Points.Add(new GeometryPoint { X = 37.530, Z = 3.780 }); surfaceLine.Points.Add(new GeometryPoint { X = 38.140, Z = 3.780 }); surfaceLine.Points.Add(new GeometryPoint { X = 38.720, Z = 3.780 }); surfaceLine.Points.Add(new GeometryPoint { X = 39.270, Z = 3.710 }); surfaceLine.Points.Add(new GeometryPoint { X = 40.020, Z = 3.380 }); surfaceLine.Points.Add(new GeometryPoint { X = 42.370, Z = 2.440 }); surfaceLine.Points.Add(new GeometryPoint { X = 44.170, Z = 1.760 }); surfaceLine.Points.Add(new GeometryPoint { X = 48.100, Z = 1.330 }); surfaceLine.Points.Add(new GeometryPoint { X = 53.150, Z = 0.680 }); surfaceLine.Points.Add(new GeometryPoint { X = 57.581, Z = 0.300 }); surfaceLine.Points.Add(new GeometryPoint { X = 57.582, Z = 0.280 }); surfaceLine.Points.Add(new GeometryPoint { X = 58.000, Z = 0.390 }); surfaceLine.Points.Add(new GeometryPoint { X = 58.700, Z = 0.300 }); surfaceLine.Points.Add(new GeometryPoint { X = 60.920, Z = 0.340 }); surfaceLine.Points.Add(new GeometryPoint { X = 62.300, Z = 0.300 }); surfaceLine.Points.Add(new GeometryPoint { X = 63.712, Z = 0.300 }); surfaceLine.Points.Add(new GeometryPoint { X = 63.760, Z = 0.360 }); surfaceLine.Points.Add(new GeometryPoint { X = 64.000, Z = 0.260 }); surfaceLine.Points.Add(new GeometryPoint { X = 66.250, Z = 0.420 }); surfaceLine.Points.Add(new GeometryPoint { X = 67.430, Z = 0.600 }); surfaceLine.Points.Add(new GeometryPoint { X = 105.530, Z = 0.600 }); return surfaceLine; } [Test] public void SurfaceLineIsLeadingVerySimpleTest() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; using (var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName)) using (var soilSurfaceProfile2D = new SoilSurfaceProfile2D()) { Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupVerySimpleSurfaceLine(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is one added layer with dikeEmbankmentMaterial above the original profile Assert.AreEqual(8, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("Sand", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[7].Soil.Name); Assert.AreEqual(0, soilSurfaceProfile2D.Geometry.Left); Assert.AreEqual(100, soilSurfaceProfile2D.Geometry.Right); } } [Test] public void SurfaceLineIsLeadingWithSurfaceLineWiderThanProfile() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupWiderVerySimpleSurfaceLine(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is one added layer with dikeEmbankmentMaterial above the widened profile Assert.AreEqual(8, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[7].Soil.Name); Assert.AreEqual(-10, soilSurfaceProfile2D.Geometry.Left); Assert.AreEqual(110, soilSurfaceProfile2D.Geometry.Right); } [Test] public void SurfaceLineIsLeadingWithSurfaceLineVerySmallerThanProfile() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupVerySmallerVerySimpleSurfaceLine(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is one added layer with dikeEmbankmentMaterial above the narrowed profile Assert.AreEqual(4, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual(30, soilSurfaceProfile2D.Geometry.Left); Assert.AreEqual(70, soilSurfaceProfile2D.Geometry.Right); } [Test] public void SurfaceLineIsLeadingWithSurfaceLineVerySmallerThanProfileLowInProfile() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupVerySmallerVerySimpleSurfaceLineLowInProfile(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is a small cut out from the original profile with only two layers with their orginal materials Assert.AreEqual(2, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("Sand", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual("Loam", soilSurfaceProfile2D.Surfaces[1].Soil.Name); Assert.AreEqual(30, soilSurfaceProfile2D.Geometry.Left); Assert.AreEqual(70, soilSurfaceProfile2D.Geometry.Right); } [Test] public void SurfaceLineIsLeadingWithSurfaceLineSmallerThanProfileHighInProfile() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupSmallerVerySimpleSurfaceLineHighInProfile(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is a large cut out from the original profile with 5 layers, two new layers and three with their orginal materials Assert.AreEqual(5, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("Sand", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual("Loam", soilSurfaceProfile2D.Surfaces[1].Soil.Name); Assert.AreEqual("Soft Clay", soilSurfaceProfile2D.Surfaces[2].Soil.Name); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[3].Soil.Name); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[4].Soil.Name); Assert.AreEqual(10, soilSurfaceProfile2D.Geometry.Left, GeometryConstants.Accuracy); Assert.AreEqual(90, soilSurfaceProfile2D.Geometry.Right, GeometryConstants.Accuracy); } [Test] public void SurfaceLineIsLeadingWithSurfaceLineJustSmallerThanProfileHighInProfile() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupJustSmallerVerySimpleSurfaceLineHighInProfile(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is a large cut out from the original profile with two new layers and // all (some partial) original layers with their orginal materials Assert.AreEqual(9, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("Loam", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual("Stiff Clay", soilSurfaceProfile2D.Surfaces[1].Soil.Name); Assert.AreEqual("Medium Clay", soilSurfaceProfile2D.Surfaces[2].Soil.Name); Assert.AreEqual("Soft Clay", soilSurfaceProfile2D.Surfaces[3].Soil.Name); Assert.AreEqual("Medium Clay", soilSurfaceProfile2D.Surfaces[4].Soil.Name); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[5].Soil.Name); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[6].Soil.Name); Assert.AreEqual("Sand", soilSurfaceProfile2D.Surfaces[7].Soil.Name); Assert.AreEqual("Stiff Clay", soilSurfaceProfile2D.Surfaces[8].Soil.Name); Assert.AreEqual(5, soilSurfaceProfile2D.Geometry.Left, GeometryConstants.Accuracy); Assert.AreEqual(95, soilSurfaceProfile2D.Geometry.Right, GeometryConstants.Accuracy); } [Test] public void SurfaceLineIsLeadingWithSurfaceLineWiderThanProfileVeyNearProfile() { const string soilGeometry2DName = @"TestData\DWP_17.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupWiderSurfaceLineNearProfile(); var surfPointsCount = surfaceLine.Points.Count; var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is a proper comination of the original profile with five new layers (some Dikemat, some original material) and // all nine (some partial) original layers with their orginal materials res = soilSurfaceProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); res = soilSurfaceProfile2D.SoilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); Assert.AreEqual(14, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("wl_zand WVP", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual(10, soilSurfaceProfile2D.Surfaces[0].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("veen naast", soilSurfaceProfile2D.Surfaces[1].Soil.Name); Assert.AreEqual(6, soilSurfaceProfile2D.Surfaces[1].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("veen onder", soilSurfaceProfile2D.Surfaces[2].Soil.Name); Assert.AreEqual(4, soilSurfaceProfile2D.Surfaces[2].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("klei duinkerke", soilSurfaceProfile2D.Surfaces[3].Soil.Name); Assert.AreEqual(4, soilSurfaceProfile2D.Surfaces[3].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("klei duinkerke", soilSurfaceProfile2D.Surfaces[4].Soil.Name); Assert.AreEqual(18, soilSurfaceProfile2D.Surfaces[4].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("veen naast", soilSurfaceProfile2D.Surfaces[5].Soil.Name); Assert.AreEqual(6, soilSurfaceProfile2D.Surfaces[5].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("klei duinkerke", soilSurfaceProfile2D.Surfaces[6].Soil.Name); Assert.AreEqual(9, soilSurfaceProfile2D.Surfaces[6].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("zand los", soilSurfaceProfile2D.Surfaces[7].Soil.Name); Assert.AreEqual(12, soilSurfaceProfile2D.Surfaces[7].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("Klei antropogeen", soilSurfaceProfile2D.Surfaces[8].Soil.Name); Assert.AreEqual(33, soilSurfaceProfile2D.Surfaces[8].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[9].Soil.Name); Assert.AreEqual(39, soilSurfaceProfile2D.Surfaces[9].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[10].Soil.Name); Assert.AreEqual(15, soilSurfaceProfile2D.Surfaces[10].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[11].Soil.Name); Assert.AreEqual(7, soilSurfaceProfile2D.Surfaces[11].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("Klei antropogeen", soilSurfaceProfile2D.Surfaces[12].Soil.Name); Assert.AreEqual(3, soilSurfaceProfile2D.Surfaces[12].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[13].Soil.Name); Assert.AreEqual(3, soilSurfaceProfile2D.Surfaces[13].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual(-0.47, soilSurfaceProfile2D.Geometry.Left); Assert.AreEqual(105.53, soilSurfaceProfile2D.Geometry.Right); Assert.AreEqual(surfPointsCount, surfaceLine.Points.Count); } [Test] public void SurfaceLineIsLeadingWithSurfaceLineWiderThanProfileOnAndVeryNearProfile() { const string soilGeometry2DName = @"TestData\DWP_17.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); Assert.IsTrue(soilProfile2D != null); var res = soilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); var surfaceLine = SetupWiderSurfaceLineOnAndNearProfile(); var surfPointsCount = surfaceLine.Points.Count; var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; // Expected is a proper combination of the original profile (9 layers) and the surface line, creating 5 additional // new layers, 3 of them with DikeMat, 2 with Klei antropogeen as they could be restored from the original profile. res = soilSurfaceProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); res = soilSurfaceProfile2D.SoilProfile2D.Geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); Assert.AreEqual(14, soilSurfaceProfile2D.Surfaces.Count); Assert.AreEqual("wl_zand WVP", soilSurfaceProfile2D.Surfaces[0].Soil.Name); Assert.AreEqual(10, soilSurfaceProfile2D.Surfaces[0].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("veen naast", soilSurfaceProfile2D.Surfaces[1].Soil.Name); Assert.AreEqual(6, soilSurfaceProfile2D.Surfaces[1].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("veen onder", soilSurfaceProfile2D.Surfaces[2].Soil.Name); Assert.AreEqual(4, soilSurfaceProfile2D.Surfaces[2].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("klei duinkerke", soilSurfaceProfile2D.Surfaces[3].Soil.Name); Assert.AreEqual(4, soilSurfaceProfile2D.Surfaces[3].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("klei duinkerke", soilSurfaceProfile2D.Surfaces[4].Soil.Name); Assert.AreEqual(17, soilSurfaceProfile2D.Surfaces[4].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("veen naast", soilSurfaceProfile2D.Surfaces[5].Soil.Name); Assert.AreEqual(6, soilSurfaceProfile2D.Surfaces[5].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("klei duinkerke", soilSurfaceProfile2D.Surfaces[6].Soil.Name); Assert.AreEqual(9, soilSurfaceProfile2D.Surfaces[6].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("zand los", soilSurfaceProfile2D.Surfaces[7].Soil.Name); Assert.AreEqual(12, soilSurfaceProfile2D.Surfaces[7].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("Klei antropogeen", soilSurfaceProfile2D.Surfaces[8].Soil.Name); Assert.AreEqual(28, soilSurfaceProfile2D.Surfaces[8].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[9].Soil.Name); Assert.AreEqual(4, soilSurfaceProfile2D.Surfaces[9].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[10].Soil.Name); Assert.AreEqual(3, soilSurfaceProfile2D.Surfaces[10].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("Klei antropogeen", soilSurfaceProfile2D.Surfaces[11].Soil.Name); Assert.AreEqual(3, soilSurfaceProfile2D.Surfaces[11].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("DikeMat", soilSurfaceProfile2D.Surfaces[12].Soil.Name); Assert.AreEqual(3, soilSurfaceProfile2D.Surfaces[12].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual("Klei antropogeen", soilSurfaceProfile2D.Surfaces[13].Soil.Name); Assert.AreEqual(3, soilSurfaceProfile2D.Surfaces[13].GeometrySurface.OuterLoop.Points.Count); Assert.AreEqual(-0.47, soilSurfaceProfile2D.Geometry.Left); Assert.AreEqual(105.53, soilSurfaceProfile2D.Geometry.Right); Assert.AreEqual(surfPointsCount, surfaceLine.Points.Count); } private GeometryData CreateTestGeometry() { var geometry = new GeometryData(); var p1 = new GeometryPoint(-0.470, 0, -2.500); geometry.Points.Add(p1); var p2 = new GeometryPoint(-0.470, 0, 0.410); geometry.Points.Add(p2); var c1 = new GeometryCurve(p1, p2); geometry.Curves.Add(c1); var p3 = new GeometryPoint(-0.470, 0, 0.412); geometry.Points.Add(p3); var c2 = new GeometryCurve(p2, p3); geometry.Curves.Add(c2); var p4 = new GeometryPoint(-0.071, 0, 0.410); geometry.Points.Add(p4); var c3 = new GeometryCurve(p2, p4); geometry.Curves.Add(c3); var c4 = new GeometryCurve(p3, p4); geometry.Curves.Add(c4); var p5 = new GeometryPoint(0, 0, 0.410); geometry.Points.Add(p5); var c5 = new GeometryCurve(p4, p5); geometry.Curves.Add(c5); var p6 = new GeometryPoint(11.900, 0, 0.350); geometry.Points.Add(p6); var c6 = new GeometryCurve(p5, p6); geometry.Curves.Add(c6); var p7 = new GeometryPoint(23.930, 0, 0.310); geometry.Points.Add(p7); var c7 = new GeometryCurve(p6, p7); geometry.Curves.Add(c7); var p8 = new GeometryPoint(32.549, 0, -1.000); geometry.Points.Add(p8); var c8 = new GeometryCurve(p7, p8); geometry.Curves.Add(c8); var p9 = new GeometryPoint(32.549, 0, -2.500); geometry.Points.Add(p9); var c9 = new GeometryCurve(p8, p9); geometry.Curves.Add(c9); var p10 = new GeometryPoint(0, 0, -2.500); geometry.Points.Add(p10); var c10 = new GeometryCurve(p9, p10); geometry.Curves.Add(c10); var c11 = new GeometryCurve(p1, p10); geometry.Curves.Add(c11); var c12 = new GeometryCurve(p4, p6); geometry.Curves.Add(c12); geometry.Rebox(); return geometry; } [Test] public void GeneratorTest() { var geometry = CreateTestGeometry(); geometry.RegenerateGeometry(); geometry.Rebox(); var res = geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); Assert.AreEqual(3, geometry.Surfaces.Count); } private GeometryData CreateVerySimpleTestGeometry() { var geometry = new GeometryData(); var p1 = new GeometryPoint(-0.071, 0, 0.410); //0.410 geometry.Points.Add(p1); var p2 = new GeometryPoint(0, 0, 0.410); geometry.Points.Add(p2); var c1 = new GeometryCurve(p1, p2); geometry.Curves.Add(c1); var p3 = new GeometryPoint(11.900, 0, 0.350); geometry.Points.Add(p3); var c2 = new GeometryCurve(p2, p3); geometry.Curves.Add(c2); var c3 = new GeometryCurve(p1, p3); geometry.Curves.Add(c3); return geometry; } [Test] public void GeneratorSimpleTest() { var geometry = CreateVerySimpleTestGeometry(); geometry.Rebox(); geometry.RegenerateGeometry(); geometry.Rebox(); var res = geometry.ValidateGeometry(); Assert.IsTrue(!res.Any()); Assert.AreEqual(1, geometry.Surfaces.Count); } [Test] public void TestLazyLoading() { const string soilGeometry2DName = @"TestData\Base2DForCombination2DAndSurfaceLine.sti"; var soilProfile2D = ReadProfileFromStiFile(soilGeometry2DName); var surfaceLine = SetupVerySimpleSurfaceLine(); var dikeEmbankmentMaterial = new Soil("DikeMat", 18.2, 15.4); var soilSurfaceProfile2D = new SoilSurfaceProfile2D(); soilSurfaceProfile2D.DikeEmbankmentMaterial = dikeEmbankmentMaterial; soilSurfaceProfile2D.SoilProfile2D = soilProfile2D; soilSurfaceProfile2D.SurfaceLine = surfaceLine; var s1D = soilSurfaceProfile2D.GetSoilProfile1D(30); Assert.IsTrue(s1D.LayerCount > 0); var sl = soilSurfaceProfile2D.GetOriginalLayerFromOldSurfaces(soilProfile2D.Geometry.Surfaces.FirstOrDefault(), soilProfile2D.Surfaces); Assert.IsTrue(sl.Soil != null); Assert.IsTrue(soilSurfaceProfile2D.Geometry.Curves.Count > 0); } } }