// 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 System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading;
using Deltares.Dam.Data.Importers;
using Deltares.Standard.IO;
using Deltares.Standard.Language;
using LumenWorks.Framework.IO.Csv;
namespace Deltares.Dam.Data.CsvImporters;
public class CsvImporterLocations
{
private int currentColIndex = -1; // Keep track of column for error message
public CsvImporterLocations(string fileName)
{
ErrorMessages.Clear();
ThrowHelper.ThrowIfStringArgumentNullOrEmpty(fileName, StringResourceNames.CsvFileNotValid);
ThrowHelper.ThrowIfFileNotExist(fileName, StringResourceNames.CsvFileNotFound);
CultureInfo oldcur = Thread.CurrentThread.CurrentCulture;
try
{
Thread.CurrentThread.CurrentCulture = CsvReaderUtilities.DetermineCultureForFile(fileName);
using (var csv = new CsvReader(new StreamReader(fileName), true, ';'))
{
string[] headers = CsvImporterHelper.GetFieldHeaders(this, csv);
if (headers.Length < 3)
{
string csvHeaderError = LocalizationManager.GetTranslatedText(GetType(), "csvHeaderError");
throw new CsvImporterSegmentsException($"{fileName} : {csvHeaderError}");
}
int colIndexLocationId = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.LocationColumnName);
int colIndexSurfacelineId = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SurfaceLineColumnName);
int colIndexSegmentId = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SegmentColumnName);
int colIndexGeoX = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.XValueColumnName);
int colIndexGeoY = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.YValueColumnName);
int colIndexXSoilgeometry2DOrigin = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.XSoilGeometry2DOriginColumnName);
int colIndexPolderlevel = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PolderLevelColumnName);
int colIndexHeadPl2 = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.HeadPl2ColumnName);
int colIndexHeadPl3 = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.HeadPl3ColumnName);
int colIndexHeadPl4 = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.HeadPl4ColumnName);
int colIndexOphoogmateriaaldijk = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.DikeEmbankmentMaterialColumnName);
int colIndexOphoogmateriaalberm = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.ShoulderEmbankmentMaterialColumnName);
int colIndexPenetrationLength = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PenetrationLengthColumnName);
int colIndexTrafficLoad = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.TrafficLoadColumnName);
int colIndexTrafficLoadDistributionAngle = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.TrafficLoadDistributionAngle);
int colIndexMinimalCircleDepth = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.MinimalCircleDepthColumnName);
int colIndexDempingsfactorPl3 = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.DampingFactorPl3ColumnName);
int colIndexDempingsfactorPl4 = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.DampingFactorPl4ColumnName);
int colIndexPLLineCreationMethod = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineCreationMethodColumnName);
int colIndexSafetyFactorPiping = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.RequiredSafetyFactorPipingColumnName);
int colIndexSafetyFactorStabilityInnerSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.RequiredSafetyFactorStabilityInnerSlopeColumnName);
int colIndexSafetyFactorStabilityOuterSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.RequiredSafetyFactorStabilityOuterSlopeColumnName);
int colIndexUpliftCriterionPiping = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UpliftCriterionPipingColumnName);
int colIndexUpliftCriterionStability = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UpliftCriterionStabilityColumnName);
int colIndexDistanceToEntryPoint = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.DistanceToEntryPointColumnName);
int colIndexPLLineOffsetBelowDikeTopAtRiver = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineOffsetBelowDikeTopAtRiverColumnName);
int colIndexPLLineOffsetBelowDikeTopAtPolder = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineOffsetBelowDikeTopAtPolderColumnName);
int colIndexPLLineOffsetBelowShoulderBaseInside = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineOffsetBelowShoulderBaseInsideColumnName);
int colIndexPLLineOffsetBelowDikeToeAtPolder = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineOffsetBelowDikeToeAtPolderColumnName);
int colIndexPlLineOffsetBelowDikeCrestMiddle = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineOffsetBelowDikeCrestMiddleColumnName);
int colIndexPlLineOffsetFactorBelowShoulderCrest = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.PlLineOffsetFactorBelowShoulderCrestColumnName);
int colIndexUsePlLineOffsetBelowDikeCrestMiddle = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UsePlLineOffsetBelowDikeCrestMiddleColumnName);
int colIndexUsePlLineOffsetFactorBelowShoulderCrest = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UsePlLineOffsetFactorBelowShoulderCrestColumnName);
int colIndexIntrusionVerticalWaterPressure = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.IntrusionVerticalWaterPressureColumnName);
int colIndexStabilityShoulderGrowSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.StabilityShoulderGrowSlopeColumnName);
int colIndexStabilityShoulderGrowDeltaX = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.StabilityShoulderGrowDeltaXColumnName);
int colIndexStabilitySlopeAdaptionDeltaX = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.StabilitySlopeAdaptionDeltaXColumnName);
int colIndexSlopeDampingPiezometricHeightPolderSide = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SlopeDampingPiezometricHeightPolderSideColumnName);
int colIndexStabilityDesignMethod = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.StabilityDesignMethodColumnName);
int colIndexStabilityZoneType = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.ZoneTypeColumnName);
int colIndexForbiddenZoneFactor = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.ForbiddenZoneFactorColumnName);
int colIndexSlopeAdaptionStartCotangent = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SlopeAdaptionStartCotangentColumnName);
int colIndexSlopeAdaptionEndCotangent = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SlopeAdaptionEndCotangentColumnName);
int colIndexSlopeAdaptionStepCotangent = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SlopeAdaptionStepCotangentColumnName);
int colIndexNewDikeTopWidth = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewDikeTopWidthColumnName);
int colIndexUseNewDikeTopWidth = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewDikeTopWidthColumnName);
int colIndexNewDikeSlopeInside = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewDikeSlopeInsideColumnName);
int colIndexUseNewDikeSlopeInside = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewDikeSlopeInsideColumnName);
int colIndexNewDikeSlopeOutside = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewDikeSlopeOutsideColumnName);
int colIndexUseNewDikeSlopeOutside = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewDikeSlopeOutsideColumnName);
int colIndexNewShoulderTopSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewShoulderTopSlopeColumnName);
int colIndexUseNewShoulderTopSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewShoulderTopSlopeColumnName);
int colIndexNewShoulderBaseSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewShoulderBaseSlopeColumnName);
int colIndexUseNewShoulderBaseSlope = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewShoulderBaseSlopeColumnName);
int colIndexNewMaxHeightShoulderAsFraction = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewMaxHeightShoulderAsFractionColumnName);
int colIndexUseNewMaxHeightShoulderAsFraction = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewMaxHeightShoulderAsFractionColumnName);
int colIndexNewMinDistanceDikeToeStartDitch = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewMinDistanceDikeToeStartDitchColumnName);
int colIndexUseNewMinDistanceDikeToeStartDitch = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewMinDistanceDikeToeStartDitchColumnName);
int colIndexUseNewDitchDefinition = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.UseNewDitchDefinitionColumnName);
int colIndexNewWidthDitchBottom = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewWidthDitchBottomColumnName);
int colIndexNewSlopeAngleDitch = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewSlopeAngleDitchColumnName);
int colIndexNewDepthDitch = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.NewDepthDitchColumnName);
int colIndexDikeTableHeight = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.DikeTableHeightColumnName);
int colIndexRiverLevel = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.RiverLevelColumnName);
int colIndexRiverLevelLow = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.RiverLevelLowColumnName);
var index = 1;
while (csv.ReadNextRecord())
{
var locationRecord = new LocationRecord();
try
{
locationRecord.LocationRecordId = index++;
// Required columns
locationRecord.LocationId = csv[colIndexLocationId];
locationRecord.SurfaceLineId = csv[colIndexSurfacelineId];
locationRecord.SegmentId = csv[colIndexSegmentId];
// Optional columns
locationRecord.GeoX = FetchOptionalColumnToDouble(colIndexGeoX, csv);
locationRecord.GeoY = FetchOptionalColumnToDouble(colIndexGeoY, csv);
locationRecord.XSoilGeometry2DOrigin = FetchOptionalColumnToDouble(colIndexXSoilgeometry2DOrigin, csv);
locationRecord.PolderLevel = FetchOptionalColumnToDouble(colIndexPolderlevel, csv);
locationRecord.HeadPl2 = FetchOptionalColumnToDouble(colIndexHeadPl2, csv);
locationRecord.HeadPl3 = FetchOptionalColumnToDouble(colIndexHeadPl3, csv);
locationRecord.HeadPl4 = FetchOptionalColumnToDouble(colIndexHeadPl4, csv);
locationRecord.DikeEmbankmentMaterial = FetchOptionalColumnToString(colIndexOphoogmateriaaldijk, csv);
locationRecord.ShoulderEmbankmentMaterial = FetchOptionalColumnToString(colIndexOphoogmateriaalberm, csv);
locationRecord.PenetrationLength = FetchOptionalColumnToDouble(colIndexPenetrationLength, csv);
locationRecord.TrafficLoad = FetchOptionalColumnToDouble(colIndexTrafficLoad, csv);
locationRecord.TrafficLoadDistributionAngle = FetchOptionalColumnToDouble(colIndexTrafficLoadDistributionAngle, csv);
locationRecord.MinimalCircleDepth = FetchOptionalColumnToDouble(colIndexMinimalCircleDepth, csv);
locationRecord.DampingFactorPl3 = FetchOptionalColumnToDouble(colIndexDempingsfactorPl3, csv);
locationRecord.DampingFactorPl4 = FetchOptionalColumnToDouble(colIndexDempingsfactorPl4, csv);
if (colIndexPLLineCreationMethod > -1)
{
currentColIndex = colIndexPLLineCreationMethod;
locationRecord.PLLineCreationMethod = LocationImportHelper.ToPLLineCreationMethod(csv[colIndexPLLineCreationMethod]);
}
locationRecord.RequiredSafetyFactorPiping = FetchOptionalColumnToDouble(colIndexSafetyFactorPiping, csv);
locationRecord.RequiredSafetyFactorStabilityInnerSlope = FetchOptionalColumnToDouble(colIndexSafetyFactorStabilityInnerSlope, csv);
locationRecord.RequiredSafetyFactorStabilityOuterSlope = FetchOptionalColumnToDouble(colIndexSafetyFactorStabilityOuterSlope, csv);
locationRecord.UpliftCriterionPiping = FetchOptionalColumnToDouble(colIndexUpliftCriterionPiping, csv);
locationRecord.UpliftCriterionStability = FetchOptionalColumnToDouble(colIndexUpliftCriterionStability, csv);
locationRecord.DistanceToEntryPoint = FetchOptionalColumnToDouble(colIndexDistanceToEntryPoint, csv);
locationRecord.PlLineOffsetBelowDikeTopAtRiver = FetchOptionalColumnToDouble(colIndexPLLineOffsetBelowDikeTopAtRiver, csv);
locationRecord.PlLineOffsetBelowDikeTopAtPolder = FetchOptionalColumnToDouble(colIndexPLLineOffsetBelowDikeTopAtPolder, csv);
locationRecord.PlLineOffsetBelowShoulderBaseInside = FetchOptionalColumnToDouble(colIndexPLLineOffsetBelowShoulderBaseInside, csv);
locationRecord.PlLineOffsetBelowDikeToeAtPolder = FetchOptionalColumnToDouble(colIndexPLLineOffsetBelowDikeToeAtPolder, csv);
locationRecord.PlLineOffsetBelowDikeCrestMiddle = FetchOptionalColumnToDouble(colIndexPlLineOffsetBelowDikeCrestMiddle, csv);
locationRecord.PlLineOffsetFactorBelowShoulderCrest = FetchOptionalColumnToDouble(colIndexPlLineOffsetFactorBelowShoulderCrest, csv);
locationRecord.UsePlLineOffsetBelowDikeCrestMiddle = FetchOptionalColumnToBoolean(colIndexUsePlLineOffsetBelowDikeCrestMiddle, csv);
locationRecord.UsePlLineOffsetFactorBelowShoulderCrest = FetchOptionalColumnToBoolean(colIndexUsePlLineOffsetFactorBelowShoulderCrest, csv);
if (colIndexIntrusionVerticalWaterPressure > -1)
{
currentColIndex = colIndexIntrusionVerticalWaterPressure;
locationRecord.IntrusionVerticalWaterPressure = LocationImportHelper.ToIntrusionVerticalWaterPressure(csv[currentColIndex]);
}
locationRecord.StabilityShoulderGrowSlope = FetchOptionalColumnToDouble(colIndexStabilityShoulderGrowSlope, csv);
locationRecord.StabilityShoulderGrowDeltaX = FetchOptionalColumnToDouble(colIndexStabilityShoulderGrowDeltaX, csv);
locationRecord.StabilitySlopeAdaptionDeltaX = FetchOptionalColumnToDouble(colIndexStabilitySlopeAdaptionDeltaX, csv);
if (colIndexStabilityDesignMethod > -1)
{
currentColIndex = colIndexStabilityDesignMethod;
locationRecord.StabilityDesignMethod = LocationImportHelper.ToStabilityDesignMethod(csv[colIndexStabilityDesignMethod]);
}
if (colIndexStabilityZoneType > -1)
{
currentColIndex = colIndexStabilityZoneType;
locationRecord.StabilityZoneType = LocationImportHelper.ToMStabZonesTypeMethod(csv[colIndexStabilityZoneType]);
}
locationRecord.ForbiddenZoneFactor = FetchOptionalColumnToDouble(colIndexForbiddenZoneFactor, csv);
locationRecord.SlopeAdaptionStartCotangent = FetchOptionalColumnToDouble(colIndexSlopeAdaptionStartCotangent, csv);
locationRecord.SlopeAdaptionEndCotangent = FetchOptionalColumnToDouble(colIndexSlopeAdaptionEndCotangent, csv);
locationRecord.SlopeAdaptionStepCotangent = FetchOptionalColumnToDouble(colIndexSlopeAdaptionStepCotangent, csv);
locationRecord.SlopeDampingPiezometricHeightPolderSide = FetchOptionalColumnToDouble(colIndexSlopeDampingPiezometricHeightPolderSide, csv);
locationRecord.NewDikeTopWidth = FetchOptionalColumnToDouble(colIndexNewDikeTopWidth, csv);
locationRecord.NewDikeSlopeInside = FetchOptionalColumnToDouble(colIndexNewDikeSlopeInside, csv);
locationRecord.NewDikeSlopeOutside = FetchOptionalColumnToDouble(colIndexNewDikeSlopeOutside, csv);
locationRecord.NewShoulderTopSlope = FetchOptionalColumnToDouble(colIndexNewShoulderTopSlope, csv);
locationRecord.NewShoulderBaseSlope = FetchOptionalColumnToDouble(colIndexNewShoulderBaseSlope, csv);
locationRecord.NewMaxHeightShoulderAsFraction = FetchOptionalColumnToDouble(colIndexNewMaxHeightShoulderAsFraction, csv);
locationRecord.NewMinDistanceDikeToeStartDitch = FetchOptionalColumnToDouble(colIndexNewMinDistanceDikeToeStartDitch, csv);
locationRecord.NewWidthDitchBottom = FetchOptionalColumnToDouble(colIndexNewWidthDitchBottom, csv);
locationRecord.NewSlopeAngleDitch = FetchOptionalColumnToDouble(colIndexNewSlopeAngleDitch, csv);
locationRecord.NewDepthDitch = FetchOptionalColumnToDouble(colIndexNewDepthDitch, csv);
locationRecord.UseNewDikeTopWidth = FetchOptionalColumnToBoolean(colIndexUseNewDikeTopWidth, csv);
locationRecord.UseNewDikeSlopeInside = FetchOptionalColumnToBoolean(colIndexUseNewDikeSlopeInside, csv);
locationRecord.UseNewDikeSlopeOutside = FetchOptionalColumnToBoolean(colIndexUseNewDikeSlopeOutside, csv);
locationRecord.UseNewShoulderTopSlope = FetchOptionalColumnToBoolean(colIndexUseNewShoulderTopSlope, csv);
locationRecord.UseNewShoulderBaseSlope = FetchOptionalColumnToBoolean(colIndexUseNewShoulderBaseSlope, csv);
locationRecord.UseNewMaxHeightShoulderAsFraction = FetchOptionalColumnToBoolean(colIndexUseNewMaxHeightShoulderAsFraction, csv);
locationRecord.UseNewMinDistanceDikeToeStartDitch = FetchOptionalColumnToBoolean(colIndexUseNewMinDistanceDikeToeStartDitch, csv);
locationRecord.UseNewDitchDefinition = FetchOptionalColumnToBoolean(colIndexUseNewDitchDefinition, csv);
locationRecord.DikeTableHeight = FetchOptionalColumnToDouble(colIndexDikeTableHeight, csv);
locationRecord.RiverLevel = FetchOptionalColumnToDouble(colIndexRiverLevel, csv);
locationRecord.RiverLevelLow = FetchOptionalColumnToDouble(colIndexRiverLevelLow, csv);
ImportedItems.Add(locationRecord);
}
catch (Exception e)
{
string csvLocationError = string.Format(LocalizationManager.GetTranslatedText(GetType(), "csvLocationError"), locationRecord.LocationId, currentColIndex + 1);
ErrorMessages.Add(csvLocationError + e.Message);
}
}
}
}
finally
{
Thread.CurrentThread.CurrentCulture = oldcur;
}
}
public List ImportedItems { get; } = new();
public List ErrorMessages { get; set; } = new();
private double? FetchOptionalColumnToDouble(int colIndex, CsvReader csv)
{
if (colIndex > -1)
{
currentColIndex = colIndex;
return Convert.ToDouble(csv[colIndex]);
}
return null;
}
private bool? FetchOptionalColumnToBoolean(int colIndex, CsvReader csv)
{
if (colIndex > -1)
{
currentColIndex = colIndex;
return Convert.ToBoolean(csv[colIndex]);
}
return null;
}
private string FetchOptionalColumnToString(int colIndex, CsvReader csv)
{
if (colIndex > -1)
{
currentColIndex = colIndex;
return csv[colIndex];
}
return null;
}
public class LocationRecord
{
public IntrusionVerticalWaterPressureType? IntrusionVerticalWaterPressure;
public int LocationRecordId { get; set; }
public string LocationId { get; set; }
public string SurfaceLineId { get; set; }
public string SegmentId { get; set; }
public double? GeoX { get; set; }
public double? GeoY { get; set; }
public double? XSoilGeometry2DOrigin { get; set; }
public double? PolderLevel { get; set; }
public double? HeadPl2 { get; set; }
public double? HeadPl3 { get; set; }
public double? HeadPl4 { get; set; }
public string DikeEmbankmentMaterial { get; set; }
public string ShoulderEmbankmentMaterial { get; set; }
public double? PenetrationLength { get; set; }
public double? TrafficLoad { get; set; }
public double? TrafficLoadDistributionAngle { get; set; }
public double? MinimalCircleDepth { get; set; }
public double? DampingFactorPl3 { get; set; }
public double? DampingFactorPl4 { get; set; }
public PLLineCreationMethod? PLLineCreationMethod { get; set; }
public double? RequiredSafetyFactorPiping { get; set; }
public double? RequiredSafetyFactorStabilityInnerSlope { get; set; }
public double? RequiredSafetyFactorStabilityOuterSlope { get; set; }
public double? UpliftCriterionPiping { get; set; }
public double? UpliftCriterionStability { get; set; }
public double? DistanceToEntryPoint { get; set; }
public double? PlLineOffsetBelowDikeTopAtRiver { get; set; }
public double? PlLineOffsetBelowDikeTopAtPolder { get; set; }
public double? PlLineOffsetBelowShoulderBaseInside { get; set; }
public double? PlLineOffsetBelowDikeToeAtPolder { get; set; }
public double? PlLineOffsetBelowDikeCrestMiddle { get; set; }
public double? PlLineOffsetFactorBelowShoulderCrest { get; set; }
public bool? UsePlLineOffsetBelowDikeCrestMiddle { get; set; }
public bool? UsePlLineOffsetFactorBelowShoulderCrest { get; set; }
public double? StabilityShoulderGrowSlope { get; set; }
public double? StabilityShoulderGrowDeltaX { get; set; }
public double? StabilitySlopeAdaptionDeltaX { get; set; }
public double? SlopeDampingPiezometricHeightPolderSide { get; set; }
public StabilityDesignMethod? StabilityDesignMethod { get; set; }
public StabilityZoneType? StabilityZoneType { get; set; }
public double? ForbiddenZoneFactor { get; set; }
public double? SlopeAdaptionStartCotangent { get; set; }
public double? SlopeAdaptionEndCotangent { get; set; }
public double? SlopeAdaptionStepCotangent { get; set; }
public double? NewDikeTopWidth { get; set; }
public bool? UseNewDikeTopWidth { get; set; }
public double? NewDikeSlopeInside { get; set; }
public bool? UseNewDikeSlopeInside { get; set; }
public double? NewDikeSlopeOutside { get; set; }
public bool? UseNewDikeSlopeOutside { get; set; }
public double? NewShoulderTopSlope { get; set; }
public bool? UseNewShoulderTopSlope { get; set; }
public double? NewShoulderBaseSlope { get; set; }
public bool? UseNewShoulderBaseSlope { get; set; }
public double? NewMaxHeightShoulderAsFraction { get; set; }
public bool? UseNewMaxHeightShoulderAsFraction { get; set; }
public double? NewMinDistanceDikeToeStartDitch { get; set; }
public bool? UseNewMinDistanceDikeToeStartDitch { get; set; }
public bool? UseNewDitchDefinition { get; set; }
public double? NewWidthDitchBottom { get; set; }
public double? NewSlopeAngleDitch { get; set; }
public double? NewDepthDitch { get; set; }
public double? DikeTableHeight { get; set; }
public double? RiverLevel { get; set; }
public double? RiverLevelLow { get; set; }
}
}