//-----------------------------------------------------------------------
//
// Copyright (c) 2010 Deltares. All rights reserved.
//
// B.S.T.I.M. The
// tom.the@deltares.nl
// 18-05-2010
//
// data class for specifying one single calculation
// data class for xml file creator for DGSMStabDam.dll
// Note: this is a single class with dual purpose; maybe refactor
// Pull out the XML specific things into DamMStabInput
//
//-----------------------------------------------------------------------
using System.Collections;
using System.ComponentModel;
using System.Xml.Serialization;
using Deltares.Dam.Data.UISupport;
using Deltares.Standard.Attributes;
using Deltares.Standard.EventPublisher;
using Deltares.Standard.Validation;
namespace Deltares.Dam.Data
{
using System;
using Deltares.Standard;
///
///
///
public class DamFailureMechanismeCalculationSpecification: IDomain, IVisibleEnabled
{
private FailureMechanismSystemType failureMechanismSystemType;
private PipingModelType pipingModelType = PipingModelType.Sellmeijer4Forces;
private Enum calculationModel;
private FailureMechanismeParamatersMStab failureMechanismeParamatersMStab;
private static ProbabilisticType probabilisticType;
private static DamProjectType damProjectType;
private StabilityKernelType stabilityKernelType = StabilityKernelType.DamClassic;
public DamFailureMechanismeCalculationSpecification()
{
//Todo interface
failureMechanismSystemType = FailureMechanismSystemType.StabilityInside;
failureMechanismeParamatersMStab = new FailureMechanismeParamatersMStab();
CalculationModel = failureMechanismeParamatersMStab.MStabParameters.Model;
FailureMechanismeParamatersMStab.MStabParameters.GridPosition = MStabGridPosition.Right;
ReadUserSettingsSlipCircleDefinition();
}
[Browsable(false)]
[Validate]
public FailureMechanismeParamatersMStab FailureMechanismeParamatersMStab
{
get { return failureMechanismeParamatersMStab; }
set { failureMechanismeParamatersMStab = value; }
}
[Label("Failure mechanism")]
[PropertyOrder(1, 0)]
public FailureMechanismSystemType FailureMechanismSystemType
{
get { return failureMechanismSystemType; }
set
{
if (failureMechanismSystemType != value)
{
DataEventPublisher.BeforeChange(this, "FailureMechanismSystemType");
failureMechanismSystemType = value;
// To solve MWDAM-592, remember the current pipingmodeltype as this gets reset by setting the
// calculationmodel. Only switch it back when needed.
var oldPipingModelType = pipingModelType;
foreach (Enum possibleModel in this.GetDomain("CalculationModel"))
{
this.CalculationModel = possibleModel;
break;
}
switch (failureMechanismSystemType)
{
case FailureMechanismSystemType.StabilityInside:
failureMechanismeParamatersMStab.MStabParameters.GridPosition = MStabGridPosition.Right;
break;
case FailureMechanismSystemType.StabilityOutside:
failureMechanismeParamatersMStab.MStabParameters.GridPosition = MStabGridPosition.Left;
break;
case FailureMechanismSystemType.Piping:
PipingModelType = oldPipingModelType;
break;
}
DataEventPublisher.AfterChange(this, "FailureMechanismSystemType");
}
}
}
[Browsable(false)]
public PipingModelType PipingModelType
{
get { return pipingModelType; }
set
{
pipingModelType = value;
if (failureMechanismSystemType == FailureMechanismSystemType.Piping)
{
CalculationModel = pipingModelType;
}
}
}
[Browsable(false)]
public static DamProjectType DamProjectType
{
get { return damProjectType; }
set { damProjectType = value; }
}
[Browsable(false)]
public static ProbabilisticType ProbabilisticType
{
get { return probabilisticType; }
set { probabilisticType = value; }
}
///
/// The calculationmodel is only needed to support the selection of the modeltype in the UI. The dropdownlist
/// in the UI depends on this. This set can be filled with any proper types (for piping, stabilty etc) for any
/// mechanisme instead of the fixed types per mechanisme.
///
[XmlIgnore]
[Label("Model")]
[PropertyOrder(1, 1)]
public Enum CalculationModel
{
get { return calculationModel; }
set
{
DataEventPublisher.BeforeChange(this, "CalculationModel");
calculationModel = value;
if (value is PipingModelType)
{
pipingModelType = (PipingModelType) value;
}
else
{
failureMechanismeParamatersMStab.MStabParameters.Model = (MStabModelType)value;
}
DataEventPublisher.AfterChange(this, "CalculationModel");
}
}
[Browsable(false)]
public MStabModelType StabilityModelType
{
get { return failureMechanismeParamatersMStab.MStabParameters.Model; }
set
{
failureMechanismeParamatersMStab.MStabParameters.Model = value;
if (failureMechanismSystemType != FailureMechanismSystemType.Piping)
{
CalculationModel = value;
}
}
}
[Browsable(false)]
public StabilityKernelType StabilityKernelType
{
get { return stabilityKernelType; }
set { stabilityKernelType = value; }
}
public void Assign(DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculation)
{
this.FailureMechanismSystemType = damFailureMechanismeCalculation.failureMechanismSystemType;
this.FailureMechanismeParamatersMStab.Assign(damFailureMechanismeCalculation.FailureMechanismeParamatersMStab);
//assign interface
}
public DamFailureMechanismeCalculationSpecification Clone()
{
DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculation = new DamFailureMechanismeCalculationSpecification();
damFailureMechanismeCalculation.Assign(this);
return damFailureMechanismeCalculation;
}
public override string ToString()
{
string description = "";
description += String.Format("{0}", StabilityKernelType);
description += String.Format("{0}", this.FailureMechanismSystemType);
if ((this.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside) ||
(this.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside))
{
//interface?
description += String.Format(" ({0})", this.FailureMechanismeParamatersMStab.MStabParameters.Model);
}
return description;
}
public ICollection GetDomain(string property)
{
switch (property)
{
case "CalculationModel":
return (ConfigurationManager.Instance.GetAvailableMechanismModels(StabilityKernelType, DamProjectType,
ProbabilisticType, failureMechanismSystemType));
case "PipingModelType":
return (ConfigurationManager.Instance.GetAvailableMechanismModels(StabilityKernelType, DamProjectType,
ProbabilisticType, FailureMechanismSystemType.Piping));
case "FailureMechanismSystemType":
return (ConfigurationManager.Instance.GetAvailableFailureMechanisms(StabilityKernelType, DamProjectType,
ProbabilisticType));
case "StabilityKernelType":
return (ConfigurationManager.Instance.GetAvailableFailureMechanisms(StabilityKernelType, DamProjectType,
ProbabilisticType));
default: return null;
}
}
public bool IsEnabled(string property)
{
return true;
}
public bool IsVisible(string property)
{
switch (property)
{
case "FailureMechanismeParamatersMStab":
switch (this.FailureMechanismSystemType)
{
case Data.FailureMechanismSystemType.StabilityInside: return true;
case Data.FailureMechanismSystemType.StabilityOutside: return true;
case Data.FailureMechanismSystemType.HorizontalBalance: return false;
case Data.FailureMechanismSystemType.Piping: return false;
default: return true;
}
default: return true;
}
}
///
/// Determines whether slip circle definition is undefined.
///
///
/// true if [is slip circle definition undefined]; otherwise, false.
///
public bool IsSlipCircleDefinitionUndefined()
{
bool isSlipCircleDefinitionUndefined = (failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition == null);
if (!isSlipCircleDefinitionUndefined)
{
isSlipCircleDefinitionUndefined = (failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridHorizontalPointCount == 0);
}
return isSlipCircleDefinitionUndefined;
}
///
/// Reads the user settings.
///
public void ReadUserSettingsSlipCircleDefinition()
{
if (failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition == null)
{
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition = new SlipCircleDefinition();
}
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanTangentLinesDefinition = Properties.Settings.Default.SlipCircleUpliftVanTangentLinesDefinition;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanTangentLinesDistance = Properties.Settings.Default.SlipCircleUpliftVanTangentLinesDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.BishopTangentLinesDefinition = Properties.Settings.Default.SlipCircleBishopTangentLinesDefinition;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.BishopTangentLinesDistance = Properties.Settings.Default.SlipCircleBishopTangentLinesDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.GridSizeDetermination = Properties.Settings.Default.SlipCircleGridSizeDetermination;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridVerticalPointCount = Properties.Settings.Default.SlipCircleUpliftVanLeftGridVerticalPointCount;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridVerticalPointDistance = Properties.Settings.Default.SlipCircleUpliftVanLeftGridVerticalPointDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridHorizontalPointCount = Properties.Settings.Default.SlipCircleUpliftVanLeftGridHorizontalPointCount;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance = Properties.Settings.Default.SlipCircleUpliftVanLeftGridHorizontalPointDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanRightGridVerticalPointCount = Properties.Settings.Default.SlipCircleUpliftVanRightGridVerticalPointCount;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanRightGridVerticalPointDistance = Properties.Settings.Default.SlipCircleUpliftVanRightGridVerticalPointDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanRightGridHorizontalPointCount = Properties.Settings.Default.SlipCircleUpliftVanRightGridHorizontalPointCount;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.UpliftVanRightGridHorizontalPointDistance = Properties.Settings.Default.SlipCircleUpliftVanRightGridHorizontalPointDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.BishopGridVerticalPointCount = Properties.Settings.Default.SlipCircleBishopGridVerticalPointCount;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.BishopGridVerticalPointDistance = Properties.Settings.Default.SlipCircleBishopGridVerticalPointDistance;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.BishopGridHorizontalPointCount = Properties.Settings.Default.SlipCircleBishopGridHorizontalPointCount;
failureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition.BishopGridHorizontalPointDistance = Properties.Settings.Default.SlipCircleBishopGridHorizontalPointDistance;
}
}
}