Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamFailureMechanismeCalculationSpecification.cs =================================================================== diff -u -r6822 -r6946 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamFailureMechanismeCalculationSpecification.cs (.../DamFailureMechanismeCalculationSpecification.cs) (revision 6822) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamFailureMechanismeCalculationSpecification.cs (.../DamFailureMechanismeCalculationSpecification.cs) (revision 6946) @@ -35,24 +35,42 @@ /// /// /// -public class DamFailureMechanismeCalculationSpecification : IDomain, IVisibleEnabled +public class DamFailureMechanismeCalculationSpecification : IDomain, IVisibleEnabled, ICloneable { private FailureMechanismSystemType failureMechanismSystemType; private PipingModelType pipingModelType = PipingModelType.Wti2017; - private Enum calculationModel; + private StabilityModelType stabilityModelType = StabilityModelType.UpliftVan; + private Enum calculationModel = StabilityModelType.UpliftVan; private Boolean firstTime = true; public DamFailureMechanismeCalculationSpecification() { //Todo interface failureMechanismSystemType = FailureMechanismSystemType.StabilityInside; - StabilityParameters = new StabilityParameters(); - CalculationModel = StabilityParameters.MStabParameters.Model; + SearchMethod = StabilitySearchMethod.BeeSwarm; + IsUpliftVanRunOnlyWhenUpliftOccurs = true; + SlipCircleDefinition = new SlipCircleDefinition(); ReadUserSettingsSlipCircleDefinition(); } - - [Browsable(false)] [Validate] public StabilityParameters StabilityParameters { get; set; } - + + /// + /// The search method to use for stability calculations. + /// + [Validate] public StabilitySearchMethod SearchMethod { get; set; } + + /// + /// When true, the uplift van calculation is only run when an uplift occurs. + /// + [Validate] public bool IsUpliftVanRunOnlyWhenUpliftOccurs { get; set; } + + /// + /// The slip circle definition. + /// + [Validate] public SlipCircleDefinition SlipCircleDefinition { get; set; } + + /// + /// The failure mechanism system type. + /// [Label("Failure mechanism")] [PropertyOrder(1, 0)] public FailureMechanismSystemType FailureMechanismSystemType @@ -88,6 +106,14 @@ } } + /// + /// The dam project type. + /// + [Browsable(false)] public static DamProjectType DamProjectType { get; set; } + + /// + /// The piping model type. + /// [Browsable(false)] public PipingModelType PipingModelType { @@ -104,10 +130,28 @@ } } } - - [Browsable(false)] public static DamProjectType DamProjectType { get; set; } - + /// + /// The stability model type. + /// + [Browsable(false)] + public StabilityModelType StabilityModelType + { + get + { + return stabilityModelType; + } + set + { + stabilityModelType = value; + if (failureMechanismSystemType != FailureMechanismSystemType.Piping) + { + CalculationModel = 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 /// mechanism instead of the fixed types per mechanism. @@ -131,47 +175,44 @@ } else { - StabilityParameters.MStabParameters.Model = (StabilityModelType) value; - if (StabilityParameters.MStabParameters.Model != StabilityModelType.Bishop) + stabilityModelType = (StabilityModelType) value; + if (stabilityModelType != StabilityModelType.Bishop) { - StabilityParameters.MStabParameters.SearchMethod = StabilitySearchMethod.BeeSwarm; + SearchMethod = StabilitySearchMethod.BeeSwarm; } } DataEventPublisher.AfterChange(this, "CalculationModel"); } } - [Browsable(false)] - public StabilityModelType StabilityModelType + private void Assign(DamFailureMechanismeCalculationSpecification damFailureMechanismCalculation) { - get + failureMechanismSystemType = damFailureMechanismCalculation.FailureMechanismSystemType; + calculationModel = damFailureMechanismCalculation.CalculationModel; + pipingModelType = damFailureMechanismCalculation.PipingModelType; + stabilityModelType = damFailureMechanismCalculation.StabilityModelType; + SearchMethod = damFailureMechanismCalculation.SearchMethod; + IsUpliftVanRunOnlyWhenUpliftOccurs = damFailureMechanismCalculation.IsUpliftVanRunOnlyWhenUpliftOccurs; + if (SlipCircleDefinition != null) { - return StabilityParameters.MStabParameters.Model; + SlipCircleDefinition.Assign(damFailureMechanismCalculation.SlipCircleDefinition); } - set + else { - StabilityParameters.MStabParameters.Model = value; - if (failureMechanismSystemType != FailureMechanismSystemType.Piping) - { - CalculationModel = value; - } + SlipCircleDefinition = null; } - } - - private void Assign(DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculation) - { - failureMechanismSystemType = damFailureMechanismeCalculation.FailureMechanismSystemType; - calculationModel = damFailureMechanismeCalculation.CalculationModel; - pipingModelType = damFailureMechanismeCalculation.pipingModelType; - StabilityParameters.Assign(damFailureMechanismeCalculation.StabilityParameters); - StabilityModelType = damFailureMechanismeCalculation.StabilityModelType; //assign interface } public DamFailureMechanismeCalculationSpecification Clone() { var damFailureMechanismeCalculation = new DamFailureMechanismeCalculationSpecification(); + + if (SlipCircleDefinition != null) + { + SlipCircleDefinition = SlipCircleDefinition.Clone(); + } damFailureMechanismeCalculation.Assign(this); @@ -183,28 +224,28 @@ /// private void ReadUserSettingsSlipCircleDefinition() { - if (StabilityParameters.MStabParameters.SlipCircleDefinition == null) + if (SlipCircleDefinition == null) { - StabilityParameters.MStabParameters.SlipCircleDefinition = new SlipCircleDefinition(); + SlipCircleDefinition = new SlipCircleDefinition(); } - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanTangentLinesDefinition = Settings.Default.SlipCircleUpliftVanTangentLinesDefinition; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanTangentLinesDistance = Settings.Default.SlipCircleUpliftVanTangentLinesDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.BishopSearchAreaDetermination = Settings.Default.SlipCircleBishopSearchAreaDetermination; - StabilityParameters.MStabParameters.SlipCircleDefinition.BishopTangentLinesDistance = Settings.Default.SlipCircleBishopTangentLinesDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanGridSizeDetermination = Settings.Default.SlipCircleUpliftVanGridSizeDetermination; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridVerticalPointCount = Settings.Default.SlipCircleUpliftVanLeftGridVerticalPointCount; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridVerticalPointDistance = Settings.Default.SlipCircleUpliftVanLeftGridVerticalPointDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridHorizontalPointCount = Settings.Default.SlipCircleUpliftVanLeftGridHorizontalPointCount; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance = Settings.Default.SlipCircleUpliftVanLeftGridHorizontalPointDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanRightGridVerticalPointCount = Settings.Default.SlipCircleUpliftVanRightGridVerticalPointCount; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanRightGridVerticalPointDistance = Settings.Default.SlipCircleUpliftVanRightGridVerticalPointDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanRightGridHorizontalPointCount = Settings.Default.SlipCircleUpliftVanRightGridHorizontalPointCount; - StabilityParameters.MStabParameters.SlipCircleDefinition.UpliftVanRightGridHorizontalPointDistance = Settings.Default.SlipCircleUpliftVanRightGridHorizontalPointDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.BishopGridVerticalPointCount = Settings.Default.SlipCircleBishopGridVerticalPointCount; - StabilityParameters.MStabParameters.SlipCircleDefinition.BishopGridVerticalPointDistance = Settings.Default.SlipCircleBishopGridVerticalPointDistance; - StabilityParameters.MStabParameters.SlipCircleDefinition.BishopGridHorizontalPointCount = Settings.Default.SlipCircleBishopGridHorizontalPointCount; - StabilityParameters.MStabParameters.SlipCircleDefinition.BishopGridHorizontalPointDistance = Settings.Default.SlipCircleBishopGridHorizontalPointDistance; + SlipCircleDefinition.UpliftVanTangentLinesDefinition = Settings.Default.SlipCircleUpliftVanTangentLinesDefinition; + SlipCircleDefinition.UpliftVanTangentLinesDistance = Settings.Default.SlipCircleUpliftVanTangentLinesDistance; + SlipCircleDefinition.BishopSearchAreaDetermination = Settings.Default.SlipCircleBishopSearchAreaDetermination; + SlipCircleDefinition.BishopTangentLinesDistance = Settings.Default.SlipCircleBishopTangentLinesDistance; + SlipCircleDefinition.UpliftVanGridSizeDetermination = Settings.Default.SlipCircleUpliftVanGridSizeDetermination; + SlipCircleDefinition.UpliftVanLeftGridVerticalPointCount = Settings.Default.SlipCircleUpliftVanLeftGridVerticalPointCount; + SlipCircleDefinition.UpliftVanLeftGridVerticalPointDistance = Settings.Default.SlipCircleUpliftVanLeftGridVerticalPointDistance; + SlipCircleDefinition.UpliftVanLeftGridHorizontalPointCount = Settings.Default.SlipCircleUpliftVanLeftGridHorizontalPointCount; + SlipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance = Settings.Default.SlipCircleUpliftVanLeftGridHorizontalPointDistance; + SlipCircleDefinition.UpliftVanRightGridVerticalPointCount = Settings.Default.SlipCircleUpliftVanRightGridVerticalPointCount; + SlipCircleDefinition.UpliftVanRightGridVerticalPointDistance = Settings.Default.SlipCircleUpliftVanRightGridVerticalPointDistance; + SlipCircleDefinition.UpliftVanRightGridHorizontalPointCount = Settings.Default.SlipCircleUpliftVanRightGridHorizontalPointCount; + SlipCircleDefinition.UpliftVanRightGridHorizontalPointDistance = Settings.Default.SlipCircleUpliftVanRightGridHorizontalPointDistance; + SlipCircleDefinition.BishopGridVerticalPointCount = Settings.Default.SlipCircleBishopGridVerticalPointCount; + SlipCircleDefinition.BishopGridVerticalPointDistance = Settings.Default.SlipCircleBishopGridVerticalPointDistance; + SlipCircleDefinition.BishopGridHorizontalPointCount = Settings.Default.SlipCircleBishopGridHorizontalPointCount; + SlipCircleDefinition.BishopGridHorizontalPointDistance = Settings.Default.SlipCircleBishopGridHorizontalPointDistance; } public override string ToString() @@ -215,7 +256,7 @@ (FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside)) { //interface? - description += $" ({StabilityParameters.MStabParameters.Model})"; + description += $" ({StabilityModelType})"; } return description; @@ -231,6 +272,30 @@ return ConfigurationManager.Instance.GetAvailableMechanismModels(DamProjectType, FailureMechanismSystemType.Piping); case "FailureMechanismSystemType": return ConfigurationManager.Instance.GetAvailableFailureMechanisms(DamProjectType); + case "SearchMethod": + if (SlipCircleDefinition.Specification.FailureMechanismSystemType == + FailureMechanismSystemType.StabilityInside && + (StabilityModelType == StabilityModelType.UpliftVan || StabilityModelType == StabilityModelType.BishopUpliftVan)) + { + return new[] + { + StabilitySearchMethod.BeeSwarm, + StabilitySearchMethod.Grid + }; + } + + // Make sure that grid is reset and updated too when needed. + if (SearchMethod != StabilitySearchMethod.Grid) + { + DataEventPublisher.BeforeChange(this, "SearchMethod"); + SearchMethod = StabilitySearchMethod.Grid; + DataEventPublisher.AfterChange(this, "SearchMethod"); + } + + return new[] + { + StabilitySearchMethod.Grid + }; default: return null; } } @@ -242,13 +307,19 @@ { return false; // Disable model selection when stability outside is active, as only Bishop is currently supported. } - - return true; + + switch (property) + { + case "SearchMethod": + case "IsUpliftVanRunOnlyWhenUpliftOccurs": + return Location.DamProjectType == DamProjectType.Design; + default: return true; + } } public bool IsVisible(string property) { - if (Equals(property, nameof(StabilityParameters))) + if (Equals(property, nameof(StabilityModelType))) { switch (FailureMechanismSystemType) { @@ -258,7 +329,16 @@ default: return true; } } - - return true; + + switch (property) + { + case "SearchMethod": + case "IsUpliftVanRunOnlyWhenUpliftOccurs": + return + (SlipCircleDefinition.Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside || + SlipCircleDefinition.Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) && + (stabilityModelType == StabilityModelType.BishopUpliftVan || stabilityModelType == StabilityModelType.UpliftVan); + default: return true; + } } } \ No newline at end of file