// Copyright (C) Stichting Deltares 2019. All rights reserved.
//
// This file is part of the Dam Engine.
//
// The Dam Engine is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero 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.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
namespace Deltares.DamEngine.TestHelpers.Factories
{
public class FactoryForSurfaceLines
{
///
/// Creates a surface line, that is almost the same as Tutorial 1
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1(bool includingTraffic = false)
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Name = "Tutorial1",
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line like in tutorial 2.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial2()
{
//Surface line tutorial 2
var surfaceLine = new SurfaceLine2
{
Name = "Tutorial2"
};
// 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);
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line like in tutorial 1 with outside shoulder.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1WithOutsideShoulder()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Name = "Tutorial1",
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line like in tutorial 1 missing characteristic point dike top at river.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeTopAtRiver()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
CharacteristicPoints =
{
GeometryMustContainPoint = true
}
};
surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtPolder);
surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line like in tutorial 1 missing characteristic point dike top at polder.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeTopAtPolder()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
CharacteristicPoints =
{
GeometryMustContainPoint = true
}
};
surfaceLine.EnsurePoint(0, 0);
surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtRiver);
surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line like in tutorial 1 missing characteristic point dike toe at polder.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeToeAtPolder()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
CharacteristicPoints =
{
GeometryMustContainPoint = true
}
};
surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtRiver);
surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtPolder);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line like in tutorial 1 with phreatic lower polder water level.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1PhreaticLowerPolderWaterLevel()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates s surface line like in tutorial 1 with phreatic above surface.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1PhreaticAboveSurface()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates s surface line like in tutorial1 with shoulder.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineTutorial1WithShoulder()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line for piping bligh.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineForPipingBligh()
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a realistic surface line for height adapter.
///
/// surface line
public static SurfaceLine2 CreateRealisticSurfaceLineForHeightAdapter()
{
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line for BM4 01.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineBm4_01()
{
var surfaceLine = new SurfaceLine2
{
CharacteristicPoints =
{
GeometryMustContainPoint = true
},
Geometry = new GeometryPointString()
};
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line for BM4 02.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineBm4_02()
{
var surfaceLine = new SurfaceLine2
{
CharacteristicPoints =
{
GeometryMustContainPoint = true
},
Geometry = new GeometryPointString()
};
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);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a simple surface line for exit point test.
///
/// surface line
public static SurfaceLine2 CreateSimpleSurfaceLineForExitPointTest()
{
var surfaceLine = new SurfaceLine2
{
Name = "SimpleExitPoint"
};
surfaceLine.EnsurePointOfType(0.0, 0, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine.EnsurePointOfType(10.0, 0, CharacteristicPointType.DikeToeAtRiver);
surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver);
surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder);
surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePoint(60.5, -1);
surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a horizontal surface line for benchmark 1.
///
/// surface line
public static SurfaceLine2 CreateHorizontalSurfaceLineForBenchmark1()
{
var surfaceLine = new SurfaceLine2
{
Name = "HorizontalLine"
};
surfaceLine.EnsurePointOfType(30, -0.2, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(70, -0.2, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a descending surface line for benchmark 2.
///
/// surface line
public static SurfaceLine2 CreateDescendingSurfaceLineForBenchmark2()
{
var surfaceLine = new SurfaceLine2
{
Name = "NonHorizontalLine"
};
surfaceLine.EnsurePointOfType(30, -0.2, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(70, -1.8, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a horizontal surface line with symmetrical ditch for benchmark 5.
///
/// surface line
public static SurfaceLine2 CreateHorizontalSurfaceLineWithSymmetricalDitchForBenchmark5()
{
var surfaceLine = new SurfaceLine2
{
Name = "HorizontalLineWithSymmetricalDitch"
};
surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(35, 0, CharacteristicPointType.DitchDikeSide);
surfaceLine.EnsurePointOfType(36, -1.2, CharacteristicPointType.BottomDitchDikeSide);
surfaceLine.EnsurePointOfType(37, -1.2, CharacteristicPointType.BottomDitchPolderSide);
surfaceLine.EnsurePointOfType(38, 0, CharacteristicPointType.DitchPolderSide);
surfaceLine.EnsurePointOfType(70, 0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a non horizontal line with asymmetrical ditch for benchmark 6.
///
/// surface line
public static SurfaceLine2 CreateNonHorizontalLineWithAsymmetricalDitchForBenchmark6()
{
var surfaceLine = new SurfaceLine2
{
Name = "NonHorizontalLineWithAsymmetricalDitch"
};
surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(35.2, -0.208, CharacteristicPointType.DitchDikeSide);
surfaceLine.EnsurePointOfType(36, -1.2, CharacteristicPointType.BottomDitchDikeSide);
surfaceLine.EnsurePointOfType(37, -1.3, CharacteristicPointType.BottomDitchPolderSide);
surfaceLine.EnsurePointOfType(38, -0.5, CharacteristicPointType.DitchPolderSide);
surfaceLine.EnsurePointOfType(70, -0.8, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line with asymmetrical ditch high polder side.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineWithAsymmetricalDitchHighPolderSide()
{
var surfaceLine = new SurfaceLine2
{
Name = "AsymmetricalDitchHighPolderSide"
};
surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(35, 0, CharacteristicPointType.DitchDikeSide);
surfaceLine.EnsurePointOfType(36, -1, CharacteristicPointType.BottomDitchDikeSide);
surfaceLine.EnsurePointOfType(37, -1, CharacteristicPointType.BottomDitchPolderSide);
surfaceLine.EnsurePointOfType(38, 1, CharacteristicPointType.DitchPolderSide);
surfaceLine.EnsurePointOfType(70, 0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Creates a surface line with asymmetrical ditch high dike side.
///
/// surface line
public static SurfaceLine2 CreateSurfaceLineWithAsymmetricalDitchHighDikeSide()
{
var surfaceLine = new SurfaceLine2
{
Name = "AsymmetricalDitchHighPolderSide"
};
surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(35, 3, CharacteristicPointType.DitchDikeSide);
surfaceLine.EnsurePointOfType(36, -1, CharacteristicPointType.BottomDitchDikeSide);
surfaceLine.EnsurePointOfType(37, -1, CharacteristicPointType.BottomDitchPolderSide);
surfaceLine.EnsurePointOfType(38, 0, CharacteristicPointType.DitchPolderSide);
surfaceLine.EnsurePointOfType(70, 0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Create a simple surface line without shoulder
///
/// surface line
public static SurfaceLine2 CreateSurfacelineSimpleDike()
{
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
CharacteristicPoints = { GeometryMustContainPoint = true }
};
surfaceLine.EnsurePointOfType(0.0, 2.0, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine.EnsurePointOfType(1.0, 2.0, CharacteristicPointType.DikeToeAtRiver);
surfaceLine.EnsurePointOfType(4.0, 5.0, CharacteristicPointType.DikeTopAtRiver);
surfaceLine.EnsurePointOfType(7.0, 5.0, CharacteristicPointType.DikeTopAtPolder);
surfaceLine.EnsurePointOfType(10.0, 1.0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(12.0, 1.0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Create a simple surface line for dike with sloping shoulder
///
/// surface line
public static SurfaceLine2 CreateSurfacelineDikeWithSlopingShoulder()
{
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
CharacteristicPoints = { GeometryMustContainPoint = true }
};
surfaceLine.EnsurePointOfType(0.0, 2.0, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine.EnsurePointOfType(1.0, 2.0, CharacteristicPointType.DikeToeAtRiver);
surfaceLine.EnsurePointOfType(4.0, 5.0, CharacteristicPointType.DikeTopAtRiver);
surfaceLine.EnsurePointOfType(7.0, 5.0, CharacteristicPointType.DikeTopAtPolder);
surfaceLine.EnsurePointOfType(9.0, 3.0, CharacteristicPointType.ShoulderBaseInside);
surfaceLine.EnsurePointOfType(11.0, 2.5, CharacteristicPointType.ShoulderTopInside);
surfaceLine.EnsurePointOfType(12.5, 1.0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(15.0, 1.0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
///
/// Create a simple surface line without shoulder and with ditch at polder side
///
/// surface line
public static SurfaceLine2 CreateSurfacelineSimpleDikeWithDitchAtPolderSide()
{
var surfaceLine = new SurfaceLine2
{
Geometry = new GeometryPointString(),
CharacteristicPoints = { GeometryMustContainPoint = true }
};
surfaceLine.EnsurePointOfType(0.0, 0.0, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine.EnsurePointOfType(10.0, 0.0, CharacteristicPointType.DikeToeAtRiver);
surfaceLine.EnsurePointOfType(20.0, 5.0, CharacteristicPointType.DikeTopAtRiver);
surfaceLine.EnsurePointOfType(25.0, 5.0, CharacteristicPointType.DikeTopAtPolder);
surfaceLine.EnsurePointOfType(30.0, 0.0, CharacteristicPointType.DikeToeAtPolder);
surfaceLine.EnsurePointOfType(35.0, 0.0, CharacteristicPointType.DitchDikeSide);
surfaceLine.EnsurePointOfType(36.0, -1.0, CharacteristicPointType.BottomDitchDikeSide);
surfaceLine.EnsurePointOfType(38.0, -1.0, CharacteristicPointType.BottomDitchPolderSide);
surfaceLine.EnsurePointOfType(39.0, 0.0, CharacteristicPointType.DitchPolderSide);
surfaceLine.EnsurePointOfType(100.0, 0.0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
public static SurfaceLine2 CreateSurfaceLineForWtiPiping(bool includingTraffic = false)
{
//Surface line tutorial 1
var surfaceLine = new SurfaceLine2
{
Name = "Tutorial1",
Geometry = new GeometryPointString(),
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, -1, CharacteristicPointType.BottomDitchDikeSide);
surfaceLine.EnsurePointOfType(61.5, -1, CharacteristicPointType.BottomDitchPolderSide);
surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide);
surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
}
}
}