// Copyright (C) Stichting Deltares 2018. All rights reserved.
//
// This file is part of the application DAM - Clients Library.
//
// 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.ComponentModel;
using System.Xml.Serialization;
using Deltares.Standard.Attributes;
using Deltares.Standard.EventPublisher;
using Deltares.Standard.Validation;
namespace Deltares.Dam.Data
{
using Deltares.Standard;
public enum TangentLinesDefinition
{
OnBoundaryLines = 0,
Specified = 1
}
public enum GridSizeDetermination
{
Automatic = 0,
Specified = 1
}
public class SheetPiling : IAssignable, ICloneable
{
public double XCoordinate { get; set; }
public double YCoordinate { get; set; }
public double ZCoordinate { get; set; }
public double Length { get; set; }
public void Assign(SheetPiling sheetPiling)
{
this.XCoordinate = sheetPiling.XCoordinate;
this.YCoordinate = sheetPiling.YCoordinate;
this.ZCoordinate = sheetPiling.ZCoordinate;
this.Length = sheetPiling.Length;
}
public SheetPiling Clone()
{
var sheetPiling = new SheetPiling();
sheetPiling.Assign(this);
return sheetPiling;
}
}
public class HorizontalBalanceArea : IAssignable, ICloneable
{
public double XLeft { get; set; }
public double XRight { get; set; }
public double YTop { get; set; }
public double YBottom { get; set; }
public int PlaneCount { get; set; }
public void Assign(HorizontalBalanceArea horizontalBalanceArea)
{
this.XLeft = horizontalBalanceArea.XLeft;
this.XRight = horizontalBalanceArea.XRight;
this.YTop = horizontalBalanceArea.YTop;
this.YBottom = horizontalBalanceArea.YBottom;
this.PlaneCount = horizontalBalanceArea.PlaneCount;
}
public HorizontalBalanceArea Clone()
{
var horizontalBalanceArea = new HorizontalBalanceArea();
horizontalBalanceArea.Assign(this);
return horizontalBalanceArea;
}
}
public class SlipCircleDefinition : IVisibleEnabled, IAssignable, ICloneable
{
private double xCoordinateLastUpliftPoint;
private int upliftVanLeftGridVerticalPointCount;
private double upliftVanTangentLinesDistance;
private double bishopTangentLinesDistance;
private double upliftVanLeftGridVerticalPointDistance;
private int upliftVanLeftGridHorizontalPointCount;
private double upliftVanLeftGridHorizontalPointDistance;
private int upliftVanRightGridVerticalPointCount;
private double upliftVanRightGridVerticalPointDistance;
private int upliftVanRightGridHorizontalPointCount;
private double upliftVanRightGridHorizontalPointDistance;
private int bishopGridHorizontalPointCount;
private double bishopGridHorizontalPointDistance;
private int bishopGridVerticalPointCount;
private double bishopGridVerticalPointDistance;
[Format("F2")]
public double XCoordinateLastUpliftPoint
{
get
{
return xCoordinateLastUpliftPoint;
}
set
{
DataEventPublisher.BeforeChange(this, "XCoordinateLastUpliftPoint");
xCoordinateLastUpliftPoint = value;
DataEventPublisher.AfterChange(this, "XCoordinateLastUpliftPoint");
}
}
public TangentLinesDefinition UpliftVanTangentLinesDefinition { get; set; }
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double UpliftVanTangentLinesDistance
{
get
{
return upliftVanTangentLinesDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanTangentLinesDistance");
upliftVanTangentLinesDistance = value;
DataEventPublisher.AfterChange(this, "UpliftVanTangentLinesDistance");
}
}
public TangentLinesDefinition BishopTangentLinesDefinition { get; set; }
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double BishopTangentLinesDistance
{
get
{
return bishopTangentLinesDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "BishopTangentLinesDistance");
bishopTangentLinesDistance = value;
DataEventPublisher.AfterChange(this, "BishopTangentLinesDistance");
}
}
public GridSizeDetermination GridSizeDetermination { get; set; }
[Minimum(1)]
[Maximum(100)]
public int UpliftVanLeftGridVerticalPointCount
{
get
{
return upliftVanLeftGridVerticalPointCount;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanLeftGridVerticalPointCount");
upliftVanLeftGridVerticalPointCount = value;
DataEventPublisher.AfterChange(this, "UpliftVanLeftGridVerticalPointCount");
}
}
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double UpliftVanLeftGridVerticalPointDistance
{
get
{
return upliftVanLeftGridVerticalPointDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanLeftGridVerticalPointDistance");
upliftVanLeftGridVerticalPointDistance = value;
DataEventPublisher.AfterChange(this, "UpliftVanLeftGridVerticalPointDistance");
}
}
[Minimum(1)]
[Maximum(100)]
public int UpliftVanLeftGridHorizontalPointCount
{
get
{
return upliftVanLeftGridHorizontalPointCount;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanLeftGridHorizontalPointCount");
upliftVanLeftGridHorizontalPointCount = value;
DataEventPublisher.AfterChange(this, "UpliftVanLeftGridHorizontalPointCount");
}
}
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double UpliftVanLeftGridHorizontalPointDistance
{
get
{
return upliftVanLeftGridHorizontalPointDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanLeftGridHorizontalPointDistance");
upliftVanLeftGridHorizontalPointDistance = value;
DataEventPublisher.AfterChange(this, "UpliftVanLeftGridHorizontalPointDistance");
}
}
[Minimum(1)]
[Maximum(100)]
public int UpliftVanRightGridVerticalPointCount
{
get
{
return upliftVanRightGridVerticalPointCount;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanRightGridVerticalPointCount");
upliftVanRightGridVerticalPointCount = value;
DataEventPublisher.AfterChange(this, "UpliftVanRightGridVerticalPointCount");
}
}
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double UpliftVanRightGridVerticalPointDistance
{
get
{
return upliftVanRightGridVerticalPointDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanRightGridVerticalPointDistance");
upliftVanRightGridVerticalPointDistance = value;
DataEventPublisher.AfterChange(this, "UpliftVanRightGridVerticalPointDistance");
}
}
[Minimum(1)]
[Maximum(100)]
public int UpliftVanRightGridHorizontalPointCount
{
get
{
return upliftVanRightGridHorizontalPointCount;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanRightGridHorizontalPointCount");
upliftVanRightGridHorizontalPointCount = value;
DataEventPublisher.AfterChange(this, "UpliftVanRightGridHorizontalPointCount");
}
}
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double UpliftVanRightGridHorizontalPointDistance
{
get
{
return upliftVanRightGridHorizontalPointDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "UpliftVanRightGridHorizontalPointDistance");
upliftVanRightGridHorizontalPointDistance = value;
DataEventPublisher.AfterChange(this, "UpliftVanRightGridHorizontalPointDistance");
}
}
[Minimum(1)]
[Maximum(100)]
public int BishopGridVerticalPointCount
{
get
{
return bishopGridVerticalPointCount;
}
set
{
DataEventPublisher.BeforeChange(this, "BishopGridVerticalPointCount");
bishopGridVerticalPointCount = value;
DataEventPublisher.AfterChange(this, "BishopGridVerticalPointCount");
}
}
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double BishopGridVerticalPointDistance
{
get
{
return bishopGridVerticalPointDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "BishopGridVerticalPointDistance");
bishopGridVerticalPointDistance = value;
DataEventPublisher.AfterChange(this, "BishopGridVerticalPointDistance");
}
}
[Minimum(1)]
[Maximum(100)]
public int BishopGridHorizontalPointCount
{
get
{
return bishopGridHorizontalPointCount;
}
set
{
DataEventPublisher.BeforeChange(this, "BishopGridHorizontalPointCount");
bishopGridHorizontalPointCount = value;
DataEventPublisher.AfterChange(this, "BishopGridHorizontalPointCount");
}
}
[Format("F2")]
[Minimum(0.01)]
[Maximum(1000.0)]
public double BishopGridHorizontalPointDistance
{
get
{
return bishopGridHorizontalPointDistance;
}
set
{
DataEventPublisher.BeforeChange(this, "BishopGridHorizontalPointDistance");
bishopGridHorizontalPointDistance = value;
DataEventPublisher.AfterChange(this, "BishopGridHorizontalPointDistance");
}
}
public DamFailureMechanismeCalculationSpecification Specification { get; set; }
public bool IsVisible(string property)
{
if (Specification == null)
return true;
switch (property)
{
case "GridSizeDetermination": return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan() || IsStabiltyBishop();
// Uplift Van
case "UpliftVanTangentLinesDefinition":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanTangentLinesDistance":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanLeftGridVerticalPointCount":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanLeftGridVerticalPointDistance":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanLeftGridHorizontalPointCount":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanLeftGridHorizontalPointDistance":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanRightGridVerticalPointCount":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanRightGridVerticalPointDistance":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanRightGridHorizontalPointCount":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
case "UpliftVanRightGridHorizontalPointDistance":
return IsStabiltyUpliftVan() || IsStabiltyBishopUpliftVan();
// Bishop
case "BishopTangentLinesDefinition":
return false; //IsStabiltyBishop() || IsStabiltyBishopUpliftVan(); False for now. See MWDAM-640.
case "BishopTangentLinesDistance":
return false; //IsStabiltyBishop() || IsStabiltyBishopUpliftVan(); False for now. See MWDAM-640.
case "BishopGridVerticalPointCount":
return IsStabiltyBishop() || IsStabiltyBishopUpliftVan();
case "BishopGridVerticalPointDistance":
return IsStabiltyBishop() || IsStabiltyBishopUpliftVan();
case "BishopGridHorizontalPointCount":
return IsStabiltyBishop() || IsStabiltyBishopUpliftVan();
case "BishopGridHorizontalPointDistance":
return IsStabiltyBishop() || IsStabiltyBishopUpliftVan();
default: return true;
}
}
private bool IsStabiltyBishop()
{
return ((Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside ||
Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) &&
(MStabModelType)Specification.CalculationModel == MStabModelType.Bishop);
}
private bool IsStabiltyUpliftVan()
{
return ((Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside ||
Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) &&
(MStabModelType)Specification.CalculationModel == MStabModelType.UpliftVan);
}
private bool IsStabiltyBishopUpliftVan()
{
return ((Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside ||
Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) &&
(MStabModelType)Specification.CalculationModel == MStabModelType.BishopUpliftVan);
}
public bool IsEnabled(string property)
{
if (Specification == null)
return true;
switch (property)
{
// Uplift Van
case "UpliftVanTangentLinesDefinition":
return true;
case "UpliftVanTangentLinesDistance":
return UpliftVanTangentLinesDefinition == TangentLinesDefinition.Specified;
case "UpliftVanLeftGridVerticalPointCount":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanLeftGridVerticalPointDistance":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanLeftGridHorizontalPointCount":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanLeftGridHorizontalPointDistance":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanRightGridVerticalPointCount":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanRightGridVerticalPointDistance":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanRightGridHorizontalPointCount":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "UpliftVanRightGridHorizontalPointDistance":
return GridSizeDetermination == GridSizeDetermination.Specified;
// Bishop
case "BishopTangentLinesDefinition":
return true;
case "BishopTangentLinesDistance":
return BishopTangentLinesDefinition == TangentLinesDefinition.Specified;
case "BishopGridVerticalPointCount":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "BishopGridVerticalPointDistance":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "BishopGridHorizontalPointCount":
return GridSizeDetermination == GridSizeDetermination.Specified;
case "BishopGridHorizontalPointDistance":
return GridSizeDetermination == GridSizeDetermination.Specified;
default: return true;
}
}
public void Assign(SlipCircleDefinition slipCircleDefinition)
{
this.XCoordinateLastUpliftPoint = slipCircleDefinition.XCoordinateLastUpliftPoint;
this.UpliftVanTangentLinesDefinition = slipCircleDefinition.UpliftVanTangentLinesDefinition;
this.UpliftVanTangentLinesDistance = slipCircleDefinition.UpliftVanTangentLinesDistance;
this.BishopTangentLinesDefinition = slipCircleDefinition.BishopTangentLinesDefinition;
this.BishopTangentLinesDistance = slipCircleDefinition.BishopTangentLinesDistance;
this.GridSizeDetermination = slipCircleDefinition.GridSizeDetermination;
this.UpliftVanLeftGridVerticalPointCount = slipCircleDefinition.UpliftVanLeftGridVerticalPointCount;
this.UpliftVanLeftGridVerticalPointDistance = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance;
this.UpliftVanLeftGridHorizontalPointCount = slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount;
this.UpliftVanLeftGridHorizontalPointDistance = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance;
this.UpliftVanRightGridVerticalPointCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount;
this.UpliftVanRightGridVerticalPointDistance = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance;
this.UpliftVanRightGridHorizontalPointCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount;
this.UpliftVanRightGridHorizontalPointDistance = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance;
this.BishopGridVerticalPointCount = slipCircleDefinition.BishopGridVerticalPointCount;
this.BishopGridVerticalPointDistance = slipCircleDefinition.BishopGridVerticalPointDistance;
this.BishopGridHorizontalPointCount = slipCircleDefinition.BishopGridHorizontalPointCount;
this.BishopGridHorizontalPointDistance = slipCircleDefinition.BishopGridHorizontalPointDistance;
}
public SlipCircleDefinition Clone()
{
var slipCircleDefinition = new SlipCircleDefinition();
slipCircleDefinition.Assign(this);
return slipCircleDefinition;
}
}
public class MStabZoneAreas : IAssignable, ICloneable
{
public double DikeTableHeight { get; set; }
public double DikeTableWidth { get; set; }
public double XCoordinateDikeTopAtRiver { get; set; }
public double XCoordinateDikeTopAtPolder { get; set; }
public double XCoordinateStartRestProfile { get; set; }
public double SafetyFactorZone1A { get; set; }
public double SafetyFactorZone1B { get; set; }
public void Assign(MStabZoneAreas mstabZoneAreas)
{
this.DikeTableHeight = mstabZoneAreas.DikeTableHeight;
this.DikeTableWidth = mstabZoneAreas.DikeTableWidth;
this.XCoordinateDikeTopAtRiver = mstabZoneAreas.XCoordinateDikeTopAtRiver;
this.XCoordinateDikeTopAtPolder = mstabZoneAreas.XCoordinateDikeTopAtPolder;
this.XCoordinateStartRestProfile = mstabZoneAreas.XCoordinateStartRestProfile;
this.SafetyFactorZone1A = mstabZoneAreas.SafetyFactorZone1A;
this.SafetyFactorZone1B = mstabZoneAreas.SafetyFactorZone1B;
}
public MStabZoneAreas Clone()
{
var mstabZoneAreas = new MStabZoneAreas();
mstabZoneAreas.Assign(this);
return mstabZoneAreas;
}
}
public class MStabForbiddenZone : IAssignable, ICloneable
{
public bool IsXEntryMinUsed { get; set; }
public bool IsXEntryMaxUsed { get; set; }
public double XEntryMin { get; set; }
public double XEntryMax { get; set; }
public void Assign(MStabForbiddenZone mstabForbiddenZone)
{
this.IsXEntryMinUsed = mstabForbiddenZone.IsXEntryMinUsed;
this.IsXEntryMaxUsed = mstabForbiddenZone.IsXEntryMaxUsed;
this.XEntryMin = mstabForbiddenZone.XEntryMin;
this.XEntryMax = mstabForbiddenZone.XEntryMax;
}
public MStabForbiddenZone Clone()
{
var mstabForbiddenZone = new MStabForbiddenZone();
mstabForbiddenZone.Assign(this);
return mstabForbiddenZone;
}
}
public class MStabDesignEmbankment : IAssignable, ICloneable
{
public string EmbankmentMaterialname { get; set; }
public string PreviousGeometry2DFilename { get; set; }
public void Assign(MStabDesignEmbankment mstabDesignEmbankment)
{
this.EmbankmentMaterialname = mstabDesignEmbankment.EmbankmentMaterialname;
this.PreviousGeometry2DFilename = mstabDesignEmbankment.PreviousGeometry2DFilename;
}
public MStabDesignEmbankment Clone()
{
var mstabDesignEmbankment = new MStabDesignEmbankment();
mstabDesignEmbankment.Assign(this);
return mstabDesignEmbankment;
}
}
public class MStabGeometryCreationOptions : IAssignable, ICloneable
{
public MStabGeometryCreationOptions()
{
SoilProfileType = SoilProfileType.SoilProfile1D;
SoilGeometry2DFilename = "";
XOffsetSoilGeometry2DOrigin = 0.0;
MaterialForDike = "";
MaterialForShoulder = "";
IsUseOriginalPLLineAssignments = false;
IsUseOriginalCalculationOptions = false;
IsDrySituation = false;
PLLineAssignment = PLLineAssignment.ExpertKnowledge;
IntrusionVerticalWaterPressureType = IntrusionVerticalWaterPressureType.Standard;
PenetrationLength = 0.0;
IsDesign = false;
}
[XmlOldName("SoilGeometryType")]
public SoilProfileType SoilProfileType { get; set; }
public string SoilGeometry2DFilename { get; set; }
public double XOffsetSoilGeometry2DOrigin { get; set; }
public string MaterialForDike { get; set; }
public string MaterialForShoulder { get; set; }
public bool IsUseOriginalPLLineAssignments { get; set; }
public bool IsUseOriginalCalculationOptions { get; set; }
public bool IsDrySituation { get; set; }
public PLLineAssignment PLLineAssignment { get; set; }
public IntrusionVerticalWaterPressureType IntrusionVerticalWaterPressureType { get; set; }
public double PenetrationLength { get; set; }
public bool IsDesign { get; set; }
public void Assign(MStabGeometryCreationOptions mstabGeometryCreationOptions)
{
this.SoilProfileType = mstabGeometryCreationOptions.SoilProfileType;
this.SoilGeometry2DFilename = mstabGeometryCreationOptions.SoilGeometry2DFilename;
this.XOffsetSoilGeometry2DOrigin = mstabGeometryCreationOptions.XOffsetSoilGeometry2DOrigin;
this.MaterialForDike = mstabGeometryCreationOptions.MaterialForDike;
this.MaterialForShoulder = mstabGeometryCreationOptions.MaterialForShoulder;
this.IsUseOriginalPLLineAssignments = mstabGeometryCreationOptions.IsUseOriginalPLLineAssignments;
this.IsUseOriginalCalculationOptions = mstabGeometryCreationOptions.IsUseOriginalCalculationOptions;
this.IsDrySituation = mstabGeometryCreationOptions.IsDrySituation;
this.PLLineAssignment = mstabGeometryCreationOptions.PLLineAssignment;
this.IntrusionVerticalWaterPressureType = mstabGeometryCreationOptions.IntrusionVerticalWaterPressureType;
this.PenetrationLength = mstabGeometryCreationOptions.PenetrationLength;
this.IsDesign = mstabGeometryCreationOptions.IsDesign;
}
public MStabGeometryCreationOptions Clone()
{
var mstabGeometryCreationOptions = new MStabGeometryCreationOptions();
mstabGeometryCreationOptions.Assign(this);
return mstabGeometryCreationOptions;
}
}
public class MStabCalculationOptions : IAssignable, ICloneable
{
public double MinimalCircleDepth { get; set; }
[Label("MStab Zone Types")]
[ReadOnly(true)]
public MStabZonesType ZonesType { get; set; }
public void Assign(MStabCalculationOptions mstabCalculationOptions)
{
this.MinimalCircleDepth = mstabCalculationOptions.MinimalCircleDepth;
this.ZonesType = mstabCalculationOptions.ZonesType;
}
public MStabCalculationOptions Clone()
{
var mstabCalculationOptions = new MStabCalculationOptions();
mstabCalculationOptions.Assign(this);
return mstabCalculationOptions;
}
}
public class MStabParameters : ICloneable, IVisibleEnabled
{
private MStabGridPosition gridPosition;
public MStabParameters()
{
this.IsCalculateAllStabilityProjectsAtOnce = true;
this.IsOverrulePLLineCreationMethod = false;
this.PLLineCreationMethod = PLLineCreationMethod.ExpertKnowledgeRRD;
this.Model = MStabModelType.Bishop;
this.SearchMethod = MStabSearchMethod.Grid;
this.ZoneAreas = null;
this.gridPosition = MStabGridPosition.Right;
this.CalculationOptions = new MStabCalculationOptions();
this.GeometryCreationOptions = new MStabGeometryCreationOptions();
this.SheetPiling = null;
this.HorizontalBalanceArea = new HorizontalBalanceArea();
this.SlipCircleDefinition = new SlipCircleDefinition();
}
public bool IsCombinedBishopUpliftVanCalculation { get { return (Model == MStabModelType.BishopUpliftVan); } }
// IsCombinedBishopUpliftVanCalculation (formerly IsAutoSelectCalculation) is the same as Model == MStabModel.BishopUpliftVan
// This property was first implemented for FewsDam and later MStabModel.BishopUpliftVan was implemented for normal DAM operation
// Now we will use Model == MStabModel.BishopUpliftVan for both FewsDam and DAM
// This readonly property is implemented for backward compatibiity
public bool IsCalculateAllStabilityProjectsAtOnce { get; set; }
// Normally PLLine creation is specified per location.
// If IsOverrulePLLineCreationMethod is set to true the settings in the locations will be
// overruled with the value in PLLineCreationMethod
public bool IsOverrulePLLineCreationMethod { get; set; }
public PLLineCreationMethod PLLineCreationMethod { get; set; }
[Label("Model")]
public MStabModelType Model { get; set; }
[Label("Shear Strength")]
public MStabShearStrength ShearStrength { get; set; }
[Label("Search Method")]
public MStabSearchMethod SearchMethod { get; set; }
public bool IsProbabilistic { get; set; }
public string ProjectFileName { get; set; }
public string SoilDatabaseName { get; set; }
public MStabZoneAreas ZoneAreas { get; set; }
public MStabForbiddenZone ForbiddenZone { get; set; }
public MStabGeometryCreationOptions GeometryCreationOptions { get; set; }
public SheetPiling SheetPiling { get; set; }
public HorizontalBalanceArea HorizontalBalanceArea { get; set; }
[Validate]
public SlipCircleDefinition SlipCircleDefinition { get; set; }
public MStabCalculationOptions CalculationOptions { get; set; }
public MStabGridPosition GridPosition
{
get { return gridPosition; }
set
{
DataEventPublisher.BeforeChange(this, "GridPosition");
gridPosition = value;
DataEventPublisher.AfterChange(this, "GridPosition");
}
}
public void Assign(MStabParameters mstabParameters)
{
this.Model = mstabParameters.Model;
this.ShearStrength = mstabParameters.ShearStrength;
this.SearchMethod = mstabParameters.SearchMethod;
this.IsProbabilistic = mstabParameters.IsProbabilistic;
this.GridPosition = mstabParameters.GridPosition;
this.ProjectFileName = mstabParameters.ProjectFileName;
this.SoilDatabaseName = mstabParameters.SoilDatabaseName;
if (this.ZoneAreas != null)
{
this.ZoneAreas.Assign(mstabParameters.ZoneAreas);
}
else
{
this.ZoneAreas = null;
}
if (this.ForbiddenZone != null)
{
this.ForbiddenZone.Assign(mstabParameters.ForbiddenZone);
}
else
{
this.ForbiddenZone = null;
}
if (this.CalculationOptions != null)
{
this.CalculationOptions.Assign(mstabParameters.CalculationOptions);
}
else
{
this.CalculationOptions = null;
}
if (this.GeometryCreationOptions != null)
{
this.GeometryCreationOptions.Assign(mstabParameters.GeometryCreationOptions);
}
else
{
this.GeometryCreationOptions = null;
}
if (this.SheetPiling != null)
{
this.SheetPiling.Assign(mstabParameters.SheetPiling);
}
else
{
this.SheetPiling = null;
}
if (this.HorizontalBalanceArea != null)
{
this.HorizontalBalanceArea.Assign(mstabParameters.HorizontalBalanceArea);
}
else
{
this.HorizontalBalanceArea = null;
}
this.SoilDatabaseName = mstabParameters.SoilDatabaseName;
if (this.SlipCircleDefinition != null)
{
this.SlipCircleDefinition.Assign(mstabParameters.SlipCircleDefinition);
}
else
{
this.SlipCircleDefinition = null;
}
}
[Label("MStab Zone Types")]
[ReadOnly(true)]
[XmlIgnore]
public MStabZonesType ZonesType
{
get { return this.CalculationOptions.ZonesType; }
set { this.CalculationOptions.ZonesType = value; }
}
public MStabParameters Clone()
{
var mstabParameters = new MStabParameters();
if (this.ZoneAreas != null)
mstabParameters.ZoneAreas = this.ZoneAreas.Clone();
if (this.ForbiddenZone != null)
mstabParameters.ForbiddenZone = this.ForbiddenZone.Clone();
if (this.GeometryCreationOptions != null)
mstabParameters.GeometryCreationOptions = this.GeometryCreationOptions.Clone();
if (this.SheetPiling != null)
mstabParameters.SheetPiling = this.SheetPiling.Clone();
if (this.HorizontalBalanceArea != null)
mstabParameters.HorizontalBalanceArea = this.HorizontalBalanceArea.Clone();
if (this.SlipCircleDefinition != null)
mstabParameters.SlipCircleDefinition = this.SlipCircleDefinition.Clone();
if (this.CalculationOptions != null)
mstabParameters.CalculationOptions = this.CalculationOptions.Clone();
mstabParameters.Assign(this);
return mstabParameters;
}
#region IVisibleEnabled Members
public bool IsEnabled(string property)
{
switch (property)
{
case "SearchMethod": return Location.DamProjectType == DamProjectType.Design || Location.DamProjectType == DamProjectType.Assessment;
case "GridPosition": return false; // position depends on failuremechanisme type (inside or outside)
case "ZonesType": return false; // Is set per location!
default: return true;
}
}
public bool IsVisible(string property)
{
switch (property)
{
case "Model": return Location.DamProjectType != DamProjectType.Assessment;
case "SearchMethod": return
(SlipCircleDefinition.Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside ||
SlipCircleDefinition.Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) &&
(Model == MStabModelType.Bishop ||
Model == MStabModelType.BishopUpliftVan || Model == MStabModelType.UpliftVan);
case "ZonesType": return false; // Is set per location!
case "GridPosition": return false; // position depends on failuremechanisme type (inside or outside)
default: return true;
}
}
#endregion
}
}