// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the application DAM - UI. // // DAM - UI is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using Deltares.Geometry; using Deltares.Geotechnics.GeotechnicalGeometry; using Deltares.Geotechnics.SurfaceLines; namespace Deltares.Dam.TestHelper.TestUtils { public static class FactoryForSurfaceLineTests { /// /// Create simple soil profile, that is almost the same as Tutorial 1 /// /// soil profile public static SurfaceLine2 CreateSurfaceLineTutorial1(bool includingTraffic = false) { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Name = "Tutorial1", Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; // Next point adjusted so create PL line can be tested better surfaceLine.EnsurePointOfType(0.0, 0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(10.0, 0, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); if (includingTraffic) { surfaceLine.EnsurePointOfType(35.0, 5, CharacteristicPointType.TrafficLoadOutside); surfaceLine.EnsurePointOfType(38.5, 5, CharacteristicPointType.TrafficLoadInside); } surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1WithOutsideShoulder() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Name = "Tutorial1", Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(10, 0, CharacteristicPointType.DikeToeAtRiver); //Berm surfaceLine.EnsurePointOfType(10, 2, CharacteristicPointType.ShoulderTopOutside); surfaceLine.EnsurePointOfType(27.5, 3, CharacteristicPointType.ShoulderBaseInside); //End Berm surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(75.00, 0, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeTopAtRiver() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeToeAtPolder); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeTopAtPolder() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePoint(0, 0); surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeToeAtPolder); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeToeAtPolder() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtPolder); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1PhreaticLowerPolderWaterLevel() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(0, -1, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(17, -1, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1PhreaticAboveSurface() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); //Evil point (phreatic above surface) surfaceLine.EnsurePoint(46, 0.250); surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(60.5, -2, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineTutorial1WithShoulder() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(48.25, 1.25, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(52.25, 1.25, CharacteristicPointType.ShoulderTopInside); surfaceLine.EnsurePointOfType(54.75, 0.0, CharacteristicPointType.ShoulderBaseInside); surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineForPipingBligh() { //Surface line tutorial 1 var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePoint(0, 2.5); surfaceLine.EnsurePoint(2, 2.5); surfaceLine.EnsurePointOfType(3.5, 4, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePoint(5.5, 4); surfaceLine.EnsurePointOfType(7.5, 2, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePoint(9.5, 2); surfaceLine.EnsurePoint(10, 1.5); surfaceLine.EnsurePoint(11, 2); surfaceLine.EnsurePoint(13, 2); return surfaceLine; } public static SurfaceLine2 CreateRealisticSurfaceLineForHeightAdapter() { var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; var pointSurfaceLevelOutside = new GeometryPoint { X = -27.0, Z = 12.4 }; var pointDikeToeAtRiver = new GeometryPoint { X = -17.4, Z = 12.4 }; var pointDikeTopAtRiver = new GeometryPoint { X = 0, Z = 18.2 }; var pointTrafficLoadOutside = new GeometryPoint { X = 1.0, Z = 18.2 }; var pointTrafficLoadInside = new GeometryPoint { X = 6.0, Z = 18.2 }; var pointDikeTopAtPolder = new GeometryPoint { X = 7.0, Z = 18.2 }; var pointInsteekShoulderInside = new GeometryPoint { X = 26.520, Z = 12.10 }; var pointTopShoulderInside = new GeometryPoint { X = 26.620, Z = 12.10 }; var pointDikeToeAtPolder = new GeometryPoint { X = 26.840, Z = 12.0 }; var pointDitchDikeSide = new GeometryPoint { X = 29.840, Z = 12.0 }; var pointBottomDitchDikeSide = new GeometryPoint { X = 30.840, Z = 11.0 }; var pointBottomDitchPolderSide = new GeometryPoint { X = 38.840, Z = 11.0 }; var pointDitchPolderSide = new GeometryPoint { X = 39.840, Z = 12 }; var pointSurfaceLevelInside = new GeometryPoint { X = 140, Z = 12 }; surfaceLine.EnsurePointOfType(pointSurfaceLevelOutside.X, pointSurfaceLevelOutside.Z, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(pointDikeToeAtRiver.X, pointDikeToeAtRiver.Z, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(pointDikeTopAtRiver.X, pointDikeTopAtRiver.Z, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); surfaceLine.EnsurePointOfType(pointDikeTopAtPolder.X, pointDikeTopAtPolder.Z, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(pointInsteekShoulderInside.X, pointInsteekShoulderInside.Z, CharacteristicPointType.ShoulderBaseInside); surfaceLine.EnsurePointOfType(pointTopShoulderInside.X, pointTopShoulderInside.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); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineBm4_01() { var surfaceLine = new SurfaceLine2 { CharacteristicPoints = { GeometryMustContainPoint = true }, Geometry = new LocalizedGeometryPointString() }; surfaceLine.EnsurePointOfType(0.0, 0.1, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(4.0, 0.0, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(6.4, 1.3, CharacteristicPointType.ShoulderTopOutside); surfaceLine.EnsurePointOfType(7.9, 1.5, CharacteristicPointType.ShoulderBaseOutside); surfaceLine.EnsurePointOfType(10.0, 3.0, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(13, 3.2, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(15.6, 1.2, CharacteristicPointType.ShoulderBaseInside); surfaceLine.EnsurePointOfType(17, 1.0, CharacteristicPointType.ShoulderTopInside); surfaceLine.EnsurePointOfType(18.6, 0.2, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(23, 0.1, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(26, -0.45, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(28.5, -0.48, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(31, 0.0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(45, 0.1, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } public static SurfaceLine2 CreateSurfaceLineBm4_02() { var surfaceLine = new SurfaceLine2 { CharacteristicPoints = { GeometryMustContainPoint = true }, Geometry = new LocalizedGeometryPointString() }; surfaceLine.EnsurePointOfType(0.0, 1.0, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePointOfType(30.0, 0.0, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(45.0, 6.0, CharacteristicPointType.ShoulderTopOutside); surfaceLine.EnsurePointOfType(55.0, 7.0, CharacteristicPointType.ShoulderBaseOutside); surfaceLine.EnsurePointOfType(80.0, 16.0, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePointOfType(85.0, 16.3, CharacteristicPointType.TrafficLoadOutside); surfaceLine.EnsurePointOfType(90.0, 16.6, CharacteristicPointType.TrafficLoadInside); surfaceLine.EnsurePointOfType(95.0, 16.9, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(120.0, 5.5, CharacteristicPointType.ShoulderBaseInside); surfaceLine.EnsurePointOfType(127.0, 4.8, CharacteristicPointType.ShoulderTopInside); surfaceLine.EnsurePointOfType(140.0, 0.5, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePointOfType(165.0, 0.0, CharacteristicPointType.DitchDikeSide); surfaceLine.EnsurePointOfType(175.0, -3.4, CharacteristicPointType.BottomDitchDikeSide); surfaceLine.EnsurePointOfType(188.0, -3.0, CharacteristicPointType.BottomDitchPolderSide); surfaceLine.EnsurePointOfType(200.0, 0.0, CharacteristicPointType.DitchPolderSide); surfaceLine.EnsurePointOfType(220.0, -0.5, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } } }