Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/LocationJob.cs =================================================================== diff -u -r6892 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/LocationJob.cs (.../LocationJob.cs) (revision 6892) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/LocationJob.cs (.../LocationJob.cs) (revision 6964) @@ -140,10 +140,10 @@ internal static bool IsUpliftVanNoUplift(CsvExportData calculationResult) { - if (calculationResult is { DamFailureMechanismeCalculation: not null }) + if (calculationResult is { DamProjectCalculationSpecification: not null }) { - return calculationResult.DamFailureMechanismeCalculation.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside && - calculationResult.DamFailureMechanismeCalculation.StabilityModelType == StabilityModelType.UpliftVan && + return calculationResult.DamProjectCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside && + calculationResult.DamProjectCalculationSpecification.StabilityModelType == StabilityModelType.UpliftVan && calculationResult.IsUplift == false; } return false; Index: DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationOptionsPropertyControl.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationOptionsPropertyControl.cs (.../DamProjectCalculationOptionsPropertyControl.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationOptionsPropertyControl.cs (.../DamProjectCalculationOptionsPropertyControl.cs) (revision 6964) @@ -30,14 +30,14 @@ { public partial class DamProjectCalculationOptionsPropertyControl : UserControl, IPropertyControl { - private DamFailureMechanismeCalculationSpecification currentSpecification; - + private DamStabilityParameters currentSpecification; + private DamProjectCalculationSpecification currentCalculatioSpecification; public DamProjectCalculationOptionsPropertyControl() { InitializeComponent(); - BindSupport.BindTextAndValue(SearchMethodPanelControl, SearchMethodLabel, SearchMethodCombobox, p => p.SearchMethod); - BindSupport.BindTextAndValue(SearchMethodPanelControl, IsUpliftVanRunOnlyWhenUpliftOccursLabel, IsUpliftVanRunOnlyWhenUpliftOccursCheckBox, p => p.IsUpliftVanRunOnlyWhenUpliftOccurs); + BindSupport.BindTextAndValue(SearchMethodPanelControl, SearchMethodLabel, SearchMethodCombobox, p => p.SearchMethod); + BindSupport.BindTextAndValue(SearchMethodPanelControl, IsUpliftVanRunOnlyWhenUpliftOccursLabel, IsUpliftVanRunOnlyWhenUpliftOccursCheckBox, p => p.IsUpliftVanRunOnlyWhenUpliftOccurs); BindSupport.BindTextAndValue(CircleDefinitionPanelControl, UpliftVanGridCreationLabel, UpliftVanGridCreationComboBox, p => p.UpliftVanGridSizeDetermination); @@ -78,7 +78,7 @@ } set { - if (value is DamFailureMechanismeCalculationSpecification specification) + if (value is DamStabilityParameters specification) { currentSpecification = specification; BindSupport.Assign(SearchMethodPanelControl, currentSpecification); @@ -97,15 +97,22 @@ private void DataEventPublisher_OnAfterChange(object sender, PublishEventArgs e) { - if (sender is DamFailureMechanismeCalculationSpecification specification) + if (sender is DamStabilityParameters specification) { currentSpecification = specification; SetSelectedDamCalculationSpecification(); } + if (sender is DamProjectCalculationSpecification calculationSpecification) + { + currentSpecification = calculationSpecification.DamStabilityParameters; + SetSelectedDamCalculationSpecification(); + } + if (sender is DamProject pd) { - currentSpecification = pd.DamProjectData.DamProjectCalculationSpecification.CurrentSpecification; + currentCalculatioSpecification = pd.DamProjectData.DamProjectCalculationSpecification; + currentSpecification = pd.DamProjectData.DamProjectCalculationSpecification.DamStabilityParameters; SetSelectedDamCalculationSpecification(); } } @@ -114,7 +121,7 @@ { if (currentSpecification != null) { - currentSpecification.SlipCircleDefinition.Specification = currentSpecification; + currentSpecification.SlipCircleDefinition.Specification = currentCalculatioSpecification; if (SearchMethodPanelControl.InvokeRequired) { Action action = () => BindSupport.Assign(SearchMethodPanelControl, currentSpecification); @@ -135,12 +142,6 @@ BindSupport.Assign(CircleDefinitionPanelControl, currentSpecification.SlipCircleDefinition); } -// if (selection.FailureMechanismSystemType != FailureMechanismSystemType.Piping && firstEdit) -// { -// // this is a hack to force update on ill placed edits. -// this.Width = this.Width + 1; -// firstEdit = false; -// } } } } Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs =================================================================== diff -u -r6932 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs (.../DamProject.cs) (revision 6932) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs (.../DamProject.cs) (revision 6964) @@ -28,7 +28,6 @@ using Deltares.Standard; using Deltares.Standard.EventPublisher; using Deltares.Standard.IO; -using Deltares.Standard.IO.DtoAssembler; using Deltares.Standard.IO.Xml; using Deltares.Standard.Language; using Deltares.Standard.Logging; @@ -165,9 +164,9 @@ } // Add stability as standard mechanism when not yet available. - if (damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Count == 0) + if (damProjectData.DamProjectCalculationSpecification == null) { - damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(new DamFailureMechanismeCalculationSpecification()); + damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); } } @@ -279,9 +278,9 @@ }); // Add stability as standard mechanism when not yet available. - if (!damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Any()) + if (damProjectData.DamProjectCalculationSpecification == null) { - damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(new DamFailureMechanismeCalculationSpecification()); + damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); } if (damProjectData != null) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectData.cs =================================================================== diff -u -r6896 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectData.cs (.../DamProjectData.cs) (revision 6896) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectData.cs (.../DamProjectData.cs) (revision 6964) @@ -47,6 +47,7 @@ private DamProjectType damProjectType = DamProjectType.Design; private string damDataSourceFileName = ""; private List designCalculations; + private DamProjectCalculationSpecification damProjectCalculationSpecification; /// /// Constructor @@ -56,9 +57,15 @@ VersionInfo = new VersionInfo(); dike = new Dike(); dikeJob = null; + DamProjectCalculationSpecifications = new List(); DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); + DataEventPublisher.OnAfterChange += DataEventPublisher_OnAfterChange; } + [ReadOnly(true)] //For now make read only as only 1 spec is allowed at this moment + [XmlIgnore] + public List DamProjectCalculationSpecifications { get; } + /// Gets the version information. /// The version information. public VersionInfo VersionInfo { get; set; } @@ -124,7 +131,24 @@ /// /// Composite relationship [Validate] - public DamProjectCalculationSpecification DamProjectCalculationSpecification { get; set; } + public DamProjectCalculationSpecification DamProjectCalculationSpecification + { + get => damProjectCalculationSpecification; + set + { + DataEventPublisher.BeforeChange(this, "DamProjectCalculationSpecification"); + damProjectCalculationSpecification = value; + if (DamProjectCalculationSpecifications.Count == 0) + { + DamProjectCalculationSpecifications.Add(damProjectCalculationSpecification); + } + else + { + DamProjectCalculationSpecifications[0] = damProjectCalculationSpecification; + } + DataEventPublisher.AfterChange(this, "DamProjectCalculationSpecification"); + } + } [Child] public virtual DamJob DikeJob @@ -184,7 +208,7 @@ damProjectType = value; Location.DamProjectType = value; - DamFailureMechanismeCalculationSpecification.DamProjectType = value; + DamProjectCalculationSpecification.DamProjectType = value; if (modified) { @@ -364,7 +388,7 @@ TimeSerie timeSerie = OutputTimeSerieCollection.Series.FirstOrDefault(serie => serie.LocationId == locationJob.Location.Name); if (timeSerie != null) { - if (DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) + if (DamProjectCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) { locationJob.LocationResult.PipingTimeSerie = timeSerie; } @@ -467,13 +491,13 @@ validationResults.AddRange(Validator.ValidateProperty(damSoil, "AbovePhreaticLevel", sourceName)); validationResults.AddRange(Validator.ValidateProperty(damSoil, "BelowPhreaticLevel", sourceName)); - if (DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) + if (DamProjectCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) { validationResults.AddRange(Validator.ValidateProperty(damSoil, "DiameterD70", sourceName)); validationResults.AddRange(Validator.ValidateProperty(damSoil, "PermeabKx", sourceName)); } - if (DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType is + if (DamProjectCalculationSpecification.FailureMechanismSystemType is FailureMechanismSystemType.StabilityOutside or FailureMechanismSystemType.StabilityInside) { switch (damSoil.ShearStrengthModel) @@ -537,13 +561,17 @@ public override bool IsVisible(string property) { + if (DamProjectCalculationSpecifications.Count <= 0) + { + return false; + } + switch (property) { case "SensorData": return damProjectType == DamProjectType.DamLiveConfiguration; case "DesignCalculations": return HasResults() && DamProjectType == DamProjectType.Design; case "RunColumnVisible": return DamProjectType == DamProjectType.Design; - case "DamProjectCalculationSpecification": - return DamProjectCalculationSpecification.DamCalculationSpecifications.Count > 0; + case "DamProjectCalculationSpecification": return DamProjectCalculationSpecification != null; default: return true; } } @@ -645,14 +673,22 @@ return numberOfCalculatedJobs; } + private void DataEventPublisher_OnAfterChange(object sender, PublishEventArgs e) + { + if (sender == damProjectCalculationSpecification) + { + DataEventPublisher.AfterChange(this); + } + } + /// /// Check if design with geometry adaption is allowed /// /// private bool IsDesignWithGeometryAdaptionAllowed() { bool isAdoption = DamProjectType == DamProjectType.Design && DamProjectCalculationSpecification.SelectedAnalysisType != AnalysisType.NoAdaption; - bool isStabilityOutside = DamProjectCalculationSpecification.DamCalculationSpecifications.Any(specification => specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside); + bool isStabilityOutside = DamProjectCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside; return (!isAdoption || !isStabilityOutside); } } \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.TestHelper/ComputeHelper.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.TestHelper/ComputeHelper.cs (.../ComputeHelper.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.TestHelper/ComputeHelper.cs (.../ComputeHelper.cs) (revision 6964) @@ -65,15 +65,15 @@ // Specify calculation damProjectData.MaxCalculationCores = computeStabilityProjectParameters.MaxCores; - damProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType = computeStabilityProjectParameters.ModelType; - damProjectData.DamProjectCalculationSpecification.CurrentSpecification.SearchMethod = StabilitySearchMethod.Grid; + damProjectData.DamProjectCalculationSpecification.StabilityModelType = computeStabilityProjectParameters.ModelType; + damProjectData.DamProjectCalculationSpecification.DamStabilityParameters.SearchMethod = StabilitySearchMethod.Grid; if (computeStabilityProjectParameters.IsStabilityInside) { - damProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; + damProjectData.DamProjectCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; } else { - damProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityOutside; + damProjectData.DamProjectCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityOutside; } // Determine locations to calculate Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 6964) @@ -187,7 +187,7 @@ { damProjectData.DamProjectType = ConversionHelper.ConvertToDamProjectType(input.DamProjectType); - var calculationSpecification = new DamFailureMechanismeCalculationSpecification(); + var calculationSpecification = new DamProjectCalculationSpecification(); calculationSpecification.FailureMechanismSystemType = ConversionHelper.ConvertToFailureMechanismSystemType(input.FailureMechanismSystemType); @@ -206,7 +206,7 @@ calculationSpecification.StabilityModelType = ConversionHelper.ConvertToStabilityModelType(input.StabilityModelType); } - damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(calculationSpecification); + damProjectData.DamProjectCalculationSpecification = calculationSpecification; } private static void TransferStabilityParameters(Input input, DamProjectData damProjectData) @@ -215,7 +215,7 @@ { if (damProjectData.DamProjectCalculationSpecification != null) { - DamFailureMechanismeCalculationSpecification curSpec = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + DamStabilityParameters curSpec = damProjectData.DamProjectCalculationSpecification.DamStabilityParameters; if (curSpec != null) { curSpec.SearchMethod = ConversionHelper.ConvertToSearchMethod(input.StabilityParameters.SearchMethod); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvExportData.cs =================================================================== diff -u -r6801 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvExportData.cs (.../CsvExportData.cs) (revision 6801) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvExportData.cs (.../CsvExportData.cs) (revision 6964) @@ -49,7 +49,7 @@ { private string profileName; - private DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification; + private DamProjectCalculationSpecification damProjectCalculationSpecificationSpecification; private Scenario scenario; private SoilProfile1D soilProfile; private double? localPipingExitPointX; @@ -214,17 +214,17 @@ } [Browsable(false)] - public DamFailureMechanismeCalculationSpecification DamFailureMechanismeCalculation // moet vanuit invoer komen + public DamProjectCalculationSpecification DamProjectCalculationSpecification // moet vanuit invoer komen { get { - return damFailureMechanismeCalculationSpecification; + return damProjectCalculationSpecificationSpecification; } set { // Clone the specification to ensure a non-changeable version. - damFailureMechanismeCalculationSpecification = value.Clone(); - if (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) + damProjectCalculationSpecificationSpecification = value.Clone(); + if (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) { redesignedSurfaceLine = RedesignedSurfaceLine2; } @@ -241,7 +241,7 @@ { get { - return damFailureMechanismeCalculationSpecification?.ToString() ?? ""; + return damProjectCalculationSpecificationSpecification?.ToString() ?? ""; } } @@ -1319,7 +1319,7 @@ return soilProfile; } - FailureMechanismSystemType failureMechanismSystemType = damFailureMechanismeCalculationSpecification.FailureMechanismSystemType; + FailureMechanismSystemType failureMechanismSystemType = damProjectCalculationSpecificationSpecification.FailureMechanismSystemType; var fileName = ""; if (failureMechanismSystemType == FailureMechanismSystemType.Piping && File.Exists(PipingResultFile)) @@ -1370,7 +1370,7 @@ return redesignedSurfaceLine; } - FailureMechanismSystemType failureMechanismSystemType = damFailureMechanismeCalculationSpecification.FailureMechanismSystemType; + FailureMechanismSystemType failureMechanismSystemType = damProjectCalculationSpecificationSpecification.FailureMechanismSystemType; var fileName = ""; if (failureMechanismSystemType == FailureMechanismSystemType.Piping && File.Exists(PipingResultFile)) @@ -1411,7 +1411,7 @@ { get { - FailureMechanismSystemType failureMechanismSystemType = damFailureMechanismeCalculationSpecification.FailureMechanismSystemType; + FailureMechanismSystemType failureMechanismSystemType = damProjectCalculationSpecificationSpecification.FailureMechanismSystemType; var fileName = ""; if ((failureMechanismSystemType == FailureMechanismSystemType.StabilityInside || failureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) && File.Exists(GetDesignResultFile())) @@ -1467,7 +1467,7 @@ get { double? res = null; - switch (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType) + switch (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityOutside: case FailureMechanismSystemType.StabilityInside: @@ -1497,7 +1497,7 @@ get { double? res = null; - switch (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType) + switch (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityOutside: case FailureMechanismSystemType.StabilityInside: @@ -1522,7 +1522,7 @@ get { double? res = null; - switch (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType) + switch (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityOutside: res = RequiredSafetyFactorStabilityOuterSlope; @@ -1549,7 +1549,7 @@ get { double? res = null; - switch (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType) + switch (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityInside: res = StabilityShoulderHeight; @@ -1573,7 +1573,7 @@ get { double? res = null; - switch (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType) + switch (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityInside: res = StabilityToeAtPolderX; @@ -1597,7 +1597,7 @@ get { double? res = null; - switch (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType) + switch (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityInside: res = StabilityToeAtPolderZ; @@ -1619,10 +1619,10 @@ { get { - if (damFailureMechanismeCalculationSpecification != null && - damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) + if (damProjectCalculationSpecificationSpecification != null && + damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) { - return damFailureMechanismeCalculationSpecification.PipingModelType; + return damProjectCalculationSpecificationSpecification.PipingModelType; } return null; @@ -1639,9 +1639,9 @@ get { double? res = null; - if (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) + if (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) { - switch (damFailureMechanismeCalculationSpecification.PipingModelType) + switch (damProjectCalculationSpecificationSpecification.PipingModelType) { case PipingModelType.Bligh: res = BlighPipingFactor; @@ -1844,9 +1844,9 @@ get { double? res = null; - if (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) + if (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping) { - switch (damFailureMechanismeCalculationSpecification.PipingModelType) + switch (damProjectCalculationSpecificationSpecification.PipingModelType) { case PipingModelType.Bligh: res = BlighHCritical; @@ -1998,7 +1998,7 @@ /// public void OpenCalculationFile() { - if (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType is FailureMechanismSystemType.StabilityInside or FailureMechanismSystemType.StabilityOutside) + if (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType is FailureMechanismSystemType.StabilityInside or FailureMechanismSystemType.StabilityOutside) { if (File.Exists(InputFile)) { @@ -2051,31 +2051,27 @@ public bool IsVisible(string property) { - if (damFailureMechanismeCalculationSpecification == null) - { - return false; - } switch (property) { case "StabilityModel": - return damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + return damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside || - damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside; case "PipingModel": - return damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + return damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping; case "PipingFactor": - return damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + return damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping; case "HCritical": - return damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + return damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.Piping; case "OpenCalculationFile": - return (damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + return (damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside || - damFailureMechanismeCalculationSpecification.FailureMechanismSystemType == + damProjectCalculationSpecificationSpecification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside); default: return true; Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.TestHelper/ProjectLoader.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.TestHelper/ProjectLoader.cs (.../ProjectLoader.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.TestHelper/ProjectLoader.cs (.../ProjectLoader.cs) (revision 6964) @@ -43,13 +43,17 @@ return LoadProjectData(dataFileOrPath, CreateDefaultFailureMechanismCalculationSpecification); } - private static DamFailureMechanismeCalculationSpecification CreateDefaultFailureMechanismCalculationSpecification( + private static DamProjectCalculationSpecification CreateDefaultFailureMechanismCalculationSpecification( DamProjectData damProjectData) { - var damCalculationSpecification = new DamFailureMechanismeCalculationSpecification + var damStabilityParameters = new DamStabilityParameters { + SearchMethod = StabilitySearchMethod.Grid + }; + var damCalculationSpecification = new DamProjectCalculationSpecification + { StabilityModelType = StabilityModelType.Bishop, - SearchMethod = StabilitySearchMethod.Grid, + DamStabilityParameters = damStabilityParameters, FailureMechanismSystemType = FailureMechanismSystemType.StabilityOutside }; DamProjectCalculationSpecification.SelectedAnalysisType = AnalysisType.AdaptGeometry; @@ -79,13 +83,13 @@ return damProject.DamProjectData; } - private static DamProjectData LoadProjectData(string projectDataFolder, Func failureMechanismCalculationSpecificationFactoryMethod) + private static DamProjectData LoadProjectData(string projectDataFolder, Func failureMechanismCalculationSpecificationFactoryMethod) { DamProjectData damProjectData = LoadDike(projectDataFolder); // Specify calculation - DamFailureMechanismeCalculationSpecification damCalculationSpecification = failureMechanismCalculationSpecificationFactoryMethod(damProjectData); - damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(damCalculationSpecification); + DamProjectCalculationSpecification damCalculationSpecification = failureMechanismCalculationSpecificationFactoryMethod(damProjectData); + damProjectData.DamProjectCalculationSpecification = damCalculationSpecification; return damProjectData; } Index: DamClients/DamUI/trunk/src/Dam/Application/Program.cs =================================================================== diff -u -r6938 -r6964 --- DamClients/DamUI/trunk/src/Dam/Application/Program.cs (.../Program.cs) (revision 6938) +++ DamClients/DamUI/trunk/src/Dam/Application/Program.cs (.../Program.cs) (revision 6964) @@ -82,7 +82,10 @@ mainForm.Register(new GeometryPlugin()); mainForm.Register(new GeotechnicsPlugin()); mainForm.Register(new DamPlugin()); - + // Line below is make sure that mainForm.applicationTemplate.HasUnsavedChanges is false. + // This is a hack as you can not set that property directly. + mainForm.ProjectIsSaved(""); + // run System.Windows.Forms.Application.Run(mainForm); Index: DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.resx =================================================================== diff -u -r4539 -r6964 --- DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.resx (.../DamProjectCalculationSpecificationPropertyControl.resx) (revision 4539) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.resx (.../DamProjectCalculationSpecificationPropertyControl.resx) (revision 6964) @@ -1,126 +1,127 @@ - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + 17, 17 + \ No newline at end of file Index: DamClients/DamUI/trunk/data/Tutorials/DAMDesign/Stability/DAM Tutorial Design.damx =================================================================== diff -u -r6947 -r6964 --- DamClients/DamUI/trunk/data/Tutorials/DAMDesign/Stability/DAM Tutorial Design.damx (.../DAM Tutorial Design.damx) (revision 6947) +++ DamClients/DamUI/trunk/data/Tutorials/DAMDesign/Stability/DAM Tutorial Design.damx (.../DAM Tutorial Design.damx) (revision 6964) @@ -1,7 +1,7 @@  - + - + @@ -6528,14 +6528,12 @@ - - - - - - + + + + - + Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 6964) @@ -367,9 +367,9 @@ private static void TransferAnalysisSpecification(DamProjectData damProjectData, Input input) { input.DamProjectType = ConversionHelper.ConvertToInputDamProjectType(damProjectData.DamProjectType); - if (damProjectData.DamProjectCalculationSpecification.CurrentSpecification != null) + if (damProjectData.DamProjectCalculationSpecification.DamStabilityParameters != null) { - input.FailureMechanismSystemType = ConversionHelper.ConvertToInputFailureMechanismSystemType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType); + input.FailureMechanismSystemType = ConversionHelper.ConvertToInputFailureMechanismSystemType(damProjectData.DamProjectCalculationSpecification.FailureMechanismSystemType); input.AnalysisTypeSpecified = (input.DamProjectType == InputDamProjectType.Design); if (input.AnalysisTypeSpecified) @@ -380,23 +380,23 @@ input.PipingModelTypeSpecified = input.FailureMechanismSystemType == InputFailureMechanismSystemType.Piping; if (input.PipingModelTypeSpecified) { - input.PipingModelType = ConversionHelper.ConvertToInputPipingModelType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.PipingModelType); + input.PipingModelType = ConversionHelper.ConvertToInputPipingModelType(damProjectData.DamProjectCalculationSpecification.PipingModelType); } input.StabilityModelTypeSpecified = input.FailureMechanismSystemType == InputFailureMechanismSystemType.StabilityInside || input.FailureMechanismSystemType == InputFailureMechanismSystemType.StabilityOutside; if (input.StabilityModelTypeSpecified) { - input.StabilityModelType = ConversionHelper.ConvertToInputStabilityModelType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType); + input.StabilityModelType = ConversionHelper.ConvertToInputStabilityModelType(damProjectData.DamProjectCalculationSpecification.StabilityModelType); } } } private static void TransferStabilityParameters(DamProjectData damProjectData, Input input) { - if (damProjectData.DamProjectCalculationSpecification != null && damProjectData.DamProjectCalculationSpecification.CurrentSpecification != null) + if (damProjectData.DamProjectCalculationSpecification != null && damProjectData.DamProjectCalculationSpecification.DamStabilityParameters != null) { - DamFailureMechanismeCalculationSpecification curSpec = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + DamStabilityParameters curSpec = damProjectData.DamProjectCalculationSpecification.DamStabilityParameters; input.StabilityParameters = new DamEngine.Io.XmlInput.StabilityParameters(); input.StabilityParameters.SearchMethod = ConversionHelper.ConvertToInputSearchMethod(curSpec.SearchMethod); @@ -446,7 +446,7 @@ Dike dike = damProjectData.Dike; ThrowHelper.ThrowIfArgumentNull(dike.Locations, nameof(dike.Locations), StringResourceNames.NoLocationsDefined); // Following situation should never occur in the UI. Tested because of the check on RiverLevelLow in the code below - DamFailureMechanismeCalculationSpecification currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + DamProjectCalculationSpecification currentSpecification = damProjectData.DamProjectCalculationSpecification; ThrowHelper.ThrowIfArgumentNull(currentSpecification, nameof(currentSpecification), StringResourceNames.NoCalculationTypeSpecified); foreach (Location location in selectedLocations) { Fisheye: Tag 6964 refers to a dead (removed) revision in file `DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamFailureMechanismeCalculationSpecificationTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 6964) @@ -606,7 +606,7 @@ DamProjectData damProjectData = CreateExampleDamProjectData(); Scenario scenario = damProjectData.Dike.Locations[0].Scenarios[0]; scenario.RiverLevelLow = null; - DamFailureMechanismeCalculationSpecification currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + DamProjectCalculationSpecification currentSpecification = damProjectData.DamProjectCalculationSpecification; currentSpecification.FailureMechanismSystemType = failureMechanismSystemType; // When Writing Xml, Then Raise Exception With Clear Message in case of Stability Outside @@ -899,19 +899,19 @@ damProjectData.DamProjectType = DamProjectType.Design; damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); DamProjectCalculationSpecification.SelectedAnalysisType = expectedAnalysisType; - var calculationSpecification = new DamFailureMechanismeCalculationSpecification + var calculationSpecification = new DamProjectCalculationSpecification { FailureMechanismSystemType = FailureMechanismSystemType.Piping, CalculationModel = PipingModelType.Bligh }; - damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(calculationSpecification); + damProjectData.DamProjectCalculationSpecification = calculationSpecification; } private static void FillStabilityParameters(DamProjectData damProjectData) { // Note: DamProjectCalculationSpecification created and filled by FillAnalysisSpecification - DamFailureMechanismeCalculationSpecification currentSpecification = - damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + DamStabilityParameters currentSpecification = + damProjectData.DamProjectCalculationSpecification.DamStabilityParameters; currentSpecification.SearchMethod = StabilitySearchMethod.Grid; currentSpecification.IsUpliftVanRunOnlyWhenUpliftOccurs = false; currentSpecification.SlipCircleDefinition = new SlipCircleDefinition Index: DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.Designer.cs =================================================================== diff -u -r6791 -r6964 --- DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.Designer.cs (.../DamProjectCalculationSpecificationPropertyControl.Designer.cs) (revision 6791) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.Designer.cs (.../DamProjectCalculationSpecificationPropertyControl.Designer.cs) (revision 6964) @@ -30,6 +30,7 @@ /// Required designer variable. /// private System.ComponentModel.IContainer components = null; + /// /// Clean up any resources being used. @@ -45,6 +46,11 @@ } #region Component Designer generated code + private DevExpress.XtraEditors.PanelControl CalculationDefinitionPanelControl; + private DevExpress.XtraEditors.LabelControl FailureMechanismLabel; + private DevExpress.XtraEditors.ComboBoxEdit FailureMechanismCombobox; + private DevExpress.XtraEditors.ComboBoxEdit CalculationModelComboBox; + private DevExpress.XtraEditors.LabelControl CalculationModelLabel; /// /// Required method for Designer support - do not modify @@ -54,15 +60,19 @@ { this.CalculationSpecificationsGroupControl = new DevExpress.XtraEditors.GroupControl(); this.damProjectCalculationOptionsPropertyControl1 = new Deltares.Dam.Forms.DamProjectCalculationOptionsPropertyControl(); - this.Grid = new Deltares.Standard.Forms.DExpress.GridViewControl(); + this.CalculationDefinitionPanelControl = new DevExpress.XtraEditors.PanelControl(); + this.FailureMechanismLabel = new DevExpress.XtraEditors.LabelControl(); + this.FailureMechanismCombobox = new DevExpress.XtraEditors.ComboBoxEdit(); + this.CalculationModelComboBox = new DevExpress.XtraEditors.ComboBoxEdit(); + this.CalculationModelLabel = new DevExpress.XtraEditors.LabelControl(); ((System.ComponentModel.ISupportInitialize)(this.CalculationSpecificationsGroupControl)).BeginInit(); this.CalculationSpecificationsGroupControl.SuspendLayout(); this.SuspendLayout(); // // CalculationSpecificationsGroupControl // this.CalculationSpecificationsGroupControl.Controls.Add(this.damProjectCalculationOptionsPropertyControl1); - this.CalculationSpecificationsGroupControl.Controls.Add(this.Grid); + this.CalculationSpecificationsGroupControl.Controls.Add(this.CalculationDefinitionPanelControl); this.CalculationSpecificationsGroupControl.Dock = System.Windows.Forms.DockStyle.Top; this.CalculationSpecificationsGroupControl.Location = new System.Drawing.Point(0, 0); this.CalculationSpecificationsGroupControl.Margin = new System.Windows.Forms.Padding(4); @@ -82,25 +92,67 @@ this.damProjectCalculationOptionsPropertyControl1.Size = new System.Drawing.Size(324, 668); this.damProjectCalculationOptionsPropertyControl1.TabIndex = 14; // - // Grid + // Calculation specification groupbox // - this.Grid.AdjustHeightToFit = false; - this.Grid.AllowAddDeleteOnly = false; - this.Grid.AllowedUserColumnFilters = null; - this.Grid.AllowInserts = true; - this.Grid.AllowUserColumnFilterEdit = true; - this.Grid.CurrentContext = null; - this.Grid.Dock = System.Windows.Forms.DockStyle.Fill; - this.Grid.EnableMasterViewMode = true; - this.Grid.HideUnusedColumns = false; - this.Grid.Location = new System.Drawing.Point(2, 0); - this.Grid.Margin = new System.Windows.Forms.Padding(4); - this.Grid.Name = "Grid"; - this.Grid.SendSelectionChanged = true; - this.Grid.ShowToolbar = true; - this.Grid.Size = new System.Drawing.Size(324, 120); - this.Grid.TabIndex = 13; + ((System.ComponentModel.ISupportInitialize)(this.CalculationModelComboBox.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.CalculationDefinitionPanelControl)).BeginInit(); + this.CalculationDefinitionPanelControl.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FailureMechanismCombobox.Properties)).BeginInit(); // + // CalculationModelComboBox + // + this.CalculationModelComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CalculationModelComboBox.Location = new System.Drawing.Point(233, 43); + this.CalculationModelComboBox.Margin = new System.Windows.Forms.Padding(4); + this.CalculationModelComboBox.Name = "TangentLineUpliftVanComboBox"; + this.CalculationModelComboBox.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.CalculationModelComboBox.Size = new System.Drawing.Size(85, 22); + this.CalculationModelComboBox.TabIndex = 3; + // + // CalculationModelLabel + // + this.CalculationModelLabel.Location = new System.Drawing.Point(6, 46); + this.CalculationModelLabel.Margin = new System.Windows.Forms.Padding(4); + this.CalculationModelLabel.Name = "TangentLineUpliftVanLabel"; + this.CalculationModelLabel.Size = new System.Drawing.Size(97, 16); + this.CalculationModelLabel.TabIndex = 2; + this.CalculationModelLabel.Text = "Calculation model"; + // + // CalculationDefinitionPanelControl + // + this.CalculationDefinitionPanelControl.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.CalculationDefinitionPanelControl.Controls.Add(this.FailureMechanismCombobox); + this.CalculationDefinitionPanelControl.Controls.Add(this.FailureMechanismLabel); + this.CalculationDefinitionPanelControl.Controls.Add(this.CalculationModelComboBox); + this.CalculationDefinitionPanelControl.Controls.Add(this.CalculationModelLabel); + this.CalculationDefinitionPanelControl.Dock = System.Windows.Forms.DockStyle.Top; + this.CalculationDefinitionPanelControl.Location = new System.Drawing.Point(2, 24); + this.CalculationDefinitionPanelControl.Name = "SearchMethodPanelControl"; + this.CalculationDefinitionPanelControl.Size = new System.Drawing.Size(324, 69); + this.CalculationDefinitionPanelControl.TabIndex = 1; + // + // FailureMechanismLabel + // + this.FailureMechanismLabel.Location = new System.Drawing.Point(6, 14); + this.FailureMechanismLabel.Margin = new System.Windows.Forms.Padding(4); + this.FailureMechanismLabel.Name = "SearchMethodLabel"; + this.FailureMechanismLabel.Size = new System.Drawing.Size(86, 16); + this.FailureMechanismLabel.TabIndex = 3; + this.FailureMechanismLabel.Text = "Failure mechanism"; + // + // SearchMethodCombobox + // + this.FailureMechanismCombobox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.FailureMechanismCombobox.Location = new System.Drawing.Point(233, 11); + this.FailureMechanismCombobox.Margin = new System.Windows.Forms.Padding(4); + this.FailureMechanismCombobox.Name = "SearchMethodCombobox"; + this.FailureMechanismCombobox.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.FailureMechanismCombobox.Size = new System.Drawing.Size(85, 22); + this.FailureMechanismCombobox.TabIndex = 4; + + // // DamProjectCalculationSpecificationPropertyControl // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); @@ -111,14 +163,19 @@ this.Size = new System.Drawing.Size(328, 800); ((System.ComponentModel.ISupportInitialize)(this.CalculationSpecificationsGroupControl)).EndInit(); this.CalculationSpecificationsGroupControl.ResumeLayout(false); + + ((System.ComponentModel.ISupportInitialize)(this.CalculationModelComboBox.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.CalculationDefinitionPanelControl)).EndInit(); + this.CalculationDefinitionPanelControl.ResumeLayout(false); + this.CalculationDefinitionPanelControl.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FailureMechanismCombobox.Properties)).EndInit(); this.ResumeLayout(false); } #endregion private DevExpress.XtraEditors.GroupControl CalculationSpecificationsGroupControl; - protected Standard.Forms.DExpress.GridViewControl Grid; private DamProjectCalculationOptionsPropertyControl damProjectCalculationOptionsPropertyControl1; Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectCalculationSpecification.cs =================================================================== diff -u -r6831 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectCalculationSpecification.cs (.../DamProjectCalculationSpecification.cs) (revision 6831) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectCalculationSpecification.cs (.../DamProjectCalculationSpecification.cs) (revision 6964) @@ -24,6 +24,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Xml.Serialization; +using Deltares.Dam.Data.UISupport; using Deltares.Standard; using Deltares.Standard.Attributes; using Deltares.Standard.EventPublisher; @@ -36,101 +37,211 @@ /// Represents the calculation specifications at project level for DAM. /// These are the main choices that specify the calculation /// -public class DamProjectCalculationSpecification : IVisibleEnabled, IDomain, IRepairer, IDisposable +public class DamProjectCalculationSpecification : IVisibleEnabled, IDomain, IDisposable, ICloneable { private static AnalysisType selectedAnalysisType = AnalysisType.NoAdaption; - private DamFailureMechanismeCalculationSpecification currentSpecification; + private FailureMechanismSystemType failureMechanismSystemType; + private PipingModelType pipingModelType = PipingModelType.Wti2017; + private StabilityModelType stabilityModelType = StabilityModelType.UpliftVan; + private Enum calculationModel = StabilityModelType.UpliftVan; + private DamStabilityParameters damStabilityParameters = new(); + private Boolean firstTime = true; public DamProjectCalculationSpecification() { - DamCalculationSpecifications = new List(); + failureMechanismSystemType = FailureMechanismSystemType.StabilityInside; + damStabilityParameters.SlipCircleDefinition.Specification = this; DataEventPublisher.OnAfterChange += DataEventPublisher_OnAfterChange; + } - [ReadOnly(true)] //For now make read only as only 1 spec is allowed at this moment - [Validate] - public List DamCalculationSpecifications { get; } + public DamProjectCalculationSpecification Clone() + { + var damFailureMechanismCalculation = new DamProjectCalculationSpecification(); + + if (damStabilityParameters != null) + { + damFailureMechanismCalculation.DamStabilityParameters = damStabilityParameters.Clone(); + } + damFailureMechanismCalculation.Assign(this); + + return damFailureMechanismCalculation; + } + + public override string ToString() + { + var description = ""; + description += $"{FailureMechanismSystemType}"; + if ((FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside) || + (FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside)) + { + //interface? + description += $" ({StabilityModelType})"; + } + + return description; + } + /// - /// Gets or sets the analysis type for serialization purpose only. - /// This "dummy" property is and must be only used for serialization/deserialization purposes as the real static property - /// SelectedAnalysisType is NOT serialized. + /// The stability parameters. /// - /// - /// The analysis type for serialization purpose only. - /// - public AnalysisType AnalysisType + public DamStabilityParameters DamStabilityParameters { get { - return selectedAnalysisType; + return damStabilityParameters; } set { - selectedAnalysisType = value; + damStabilityParameters = value; + DataEventPublisher.AfterChange(this); } } /// - /// Gets or sets the type of the selected analysis. + /// The failure mechanism system type. /// - /// - /// The type of the selected analysis. - /// - [Label("Analysis type")] - public static AnalysisType SelectedAnalysisType + [Label("Failure mechanism")] + [PropertyOrder(1, 0)] + public FailureMechanismSystemType FailureMechanismSystemType { get { - return selectedAnalysisType; + return failureMechanismSystemType; } set { - // Create local instance of DamProjectCalculationSpecification because event handlers need sender - var r = new DamProjectCalculationSpecification(); - DataEventPublisher.BeforeChange(r, "SelectedAnalysisType"); - selectedAnalysisType = value; - DataEventPublisher.AfterChange(r, "SelectedAnalysisType"); + // Make sure the set is done for the very first time too even when the value has not changed (MWDAM-1199). + if (failureMechanismSystemType != value || firstTime) + { + firstTime = false; + 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. + PipingModelType oldPipingModelType = pipingModelType; + foreach (Enum possibleModel in GetDomain("CalculationModel")) + { + CalculationModel = possibleModel; + break; + } + + if (failureMechanismSystemType == FailureMechanismSystemType.Piping) + { + PipingModelType = oldPipingModelType; + } + + DataEventPublisher.AfterChange(this, "FailureMechanismSystemType"); + } } } - - [XmlIgnore] - public DamFailureMechanismeCalculationSpecification CurrentSpecification + + /// + /// The dam project type. + /// + [Browsable(false)] public static DamProjectType DamProjectType { get; set; } + + /// + /// The piping model type. + /// + [Browsable(false)] + public PipingModelType PipingModelType { get { - if (currentSpecification == null && DamCalculationSpecifications.Count > 0) + return pipingModelType; + } + set + { + pipingModelType = value; + if (failureMechanismSystemType == FailureMechanismSystemType.Piping) { - currentSpecification = DamCalculationSpecifications[0]; + CalculationModel = pipingModelType; } - - return currentSpecification; } + } + + /// + /// The stability model type. + /// + [Browsable(false)] + public StabilityModelType StabilityModelType + { + get + { + return stabilityModelType; + } set { - DataEventPublisher.BeforeChange(this, "CurrentSpecification"); - currentSpecification = value; - DataEventPublisher.AfterChange(this, "CurrentSpecification"); + stabilityModelType = value; + if (failureMechanismSystemType != FailureMechanismSystemType.Piping) + { + CalculationModel = value; + } } } - - [XmlIgnore] [Browsable(false)] public IVisibleEnabledProvider VisibleEnabledProvider { get; set; } - - [Validate] - public ValidationResult[] Validate() + + /// + /// 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. + /// + [XmlIgnore] + [Label("Model")] + [PropertyOrder(1, 1)] + public Enum CalculationModel { - if (DamCalculationSpecifications.Count > 1) + get { - return new[] + return calculationModel; + } + set + { + DataEventPublisher.BeforeChange(this, "CalculationModel"); + calculationModel = value; + if (value is PipingModelType) { - new ValidationResult(ValidationResultType.Error, LocalizationManager.GetTranslatedText(this, "MaxOneCalculationSpecification"), - this, "DamCalculationSpecifications", "DamCalculationSpecifications", this) - }; + pipingModelType = (PipingModelType) value; + } + else + { + stabilityModelType = (StabilityModelType) value; + if (stabilityModelType != StabilityModelType.Bishop) + { + damStabilityParameters.SearchMethod = StabilitySearchMethod.BeeSwarm; + } + } + + DataEventPublisher.AfterChange(this, "CalculationModel"); } + } - return new ValidationResult[0]; + /// + /// Gets or sets the type of the selected analysis. + /// + /// + /// The type of the selected analysis. + /// + [Label("Analysis type")] + public static AnalysisType SelectedAnalysisType + { + get + { + return selectedAnalysisType; + } + set + { + // Create local instance of DamProjectCalculationSpecification because event handlers need sender + var r = new DamProjectCalculationSpecification(); + DataEventPublisher.BeforeChange(r, "SelectedAnalysisType"); + selectedAnalysisType = value; + DataEventPublisher.AfterChange(r, "SelectedAnalysisType"); + } } + [XmlIgnore] [Browsable(false)] public IVisibleEnabledProvider VisibleEnabledProvider { get; set; } + public void Dispose() { DataEventPublisher.OnAfterChange -= DataEventPublisher_OnAfterChange; @@ -140,6 +251,12 @@ { switch (property) { + case "CalculationModel": + return ConfigurationManager.Instance.GetAvailableMechanismModels(DamProjectType, failureMechanismSystemType); + case "PipingModelType": + return ConfigurationManager.Instance.GetAvailableMechanismModels(DamProjectType, FailureMechanismSystemType.Piping); + case "FailureMechanismSystemType": + return ConfigurationManager.Instance.GetAvailableFailureMechanisms(DamProjectType); case "SelectedAnalysisType": return new[] { @@ -150,51 +267,35 @@ } } - public void Repair(object subject, string property, string id) - { - switch (id) - { - case "DamCalculationSpecifications": - RepairTooManySpecifications(); - break; - } - } - - public string GetRepairDescription(object subject, string property, string id) - { - switch (id) - { - case "DamCalculationSpecifications": - return LocalizationManager.GetTranslatedText(this, "KeepFirstCalculationSpecification"); - default: return ""; - } - } - public bool IsVisible(string property) { - if (DamCalculationSpecifications.Count <= 0) + if (Equals(property, nameof(StabilityModelType))) { - return false; + switch (FailureMechanismSystemType) + { + case FailureMechanismSystemType.StabilityInside: return true; + case FailureMechanismSystemType.StabilityOutside: return false; + case FailureMechanismSystemType.Piping: return false; + default: return true; + } } switch (property) { case "SelectedAnalysisType": return Location.DamProjectType == DamProjectType.Design; - case "CurrentSpecification": - { - bool bol = (DamCalculationSpecifications.Count > 0) && - (CurrentSpecification.FailureMechanismSystemType == - FailureMechanismSystemType.StabilityInside || - CurrentSpecification.FailureMechanismSystemType == - FailureMechanismSystemType.StabilityOutside); - return bol; - } + case "DamStabilityParameters": return FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside || + FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside; default: return true; } } public bool IsEnabled(string property) { + if (Equals(nameof(CalculationModel), property) + && FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) + { + return false; // Disable model selection when stability outside is active, as only Bishop is currently supported. + } switch (property) { default: return true; @@ -203,17 +304,26 @@ private void DataEventPublisher_OnAfterChange(object sender, PublishEventArgs e) { - if (sender == currentSpecification) + if (sender == damStabilityParameters) { DataEventPublisher.AfterChange(this); } } - - private void RepairTooManySpecifications() + + private void Assign(DamProjectCalculationSpecification damFailureMechanismCalculation) { - for (int i = DamCalculationSpecifications.Count - 1; i > 0; i--) + failureMechanismSystemType = damFailureMechanismCalculation.FailureMechanismSystemType; + calculationModel = damFailureMechanismCalculation.CalculationModel; + pipingModelType = damFailureMechanismCalculation.PipingModelType; + stabilityModelType = damFailureMechanismCalculation.StabilityModelType; + if (DamStabilityParameters != null) { - DamCalculationSpecifications.Remove(DamCalculationSpecifications[i]); + DamStabilityParameters.Assign(damFailureMechanismCalculation.DamStabilityParameters); } + else + { + DamStabilityParameters = null; + } } + } \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/SlipCircleDefinition.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/SlipCircleDefinition.cs (.../SlipCircleDefinition.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/SlipCircleDefinition.cs (.../SlipCircleDefinition.cs) (revision 6964) @@ -341,7 +341,7 @@ } } - public DamFailureMechanismeCalculationSpecification Specification { get; set; } + public DamProjectCalculationSpecification Specification { get; set; } public void Assign(SlipCircleDefinition slipCircleDefinition) { @@ -363,6 +363,7 @@ BishopGridVerticalPointDistance = slipCircleDefinition.BishopGridVerticalPointDistance; BishopGridHorizontalPointCount = slipCircleDefinition.BishopGridHorizontalPointCount; BishopGridHorizontalPointDistance = slipCircleDefinition.BishopGridHorizontalPointDistance; + Specification = slipCircleDefinition.Specification; } public SlipCircleDefinition Clone() Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlOutput.cs =================================================================== diff -u -r6873 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlOutput.cs (.../FillDamUiFromXmlOutput.cs) (revision 6873) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlOutput.cs (.../FillDamUiFromXmlOutput.cs) (revision 6964) @@ -159,7 +159,8 @@ var desResult = new CsvExportData(designResult.LocationName, designResult.ScenarioName) { - DamFailureMechanismeCalculation = damProjectData.DamProjectCalculationSpecification.CurrentSpecification, // vanuit invoer + DamProjectCalculationSpecification = damProjectData.DamProjectCalculationSpecification, // vanuit invoer + AnalysisType = DamProjectCalculationSpecification.SelectedAnalysisType, //is vanuit invoer DikeName = damProjectData.Dike.Name, CalculationResult = ConversionHelper.ConvertToCalculationResult(designResult.CalculationResult), Fisheye: Tag 6964 refers to a dead (removed) revision in file `DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamFailureMechanismeCalculationSpecification.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamStabilityParametersTest.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamStabilityParametersTest.cs (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamStabilityParametersTest.cs (revision 6964) @@ -0,0 +1,167 @@ +// 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 Deltares.Standard; +using Deltares.Dam.Data; +using NUnit.Framework; + +namespace Deltares.Dam.Tests +{ + [TestFixture] + public class DamStabilityParametersTest + { + [Test] + public void Constructor_ExpectedValues() + { + // Call + var parameters = new DamStabilityParameters(); + + // Assert + Assert.That(parameters, Is.InstanceOf>()); + Assert.That(parameters, Is.InstanceOf()); + + Assert.Multiple(() => + { + Assert.That(parameters.IsUpliftVanRunOnlyWhenUpliftOccurs, Is.True); + Assert.That(parameters.SearchMethod, Is.EqualTo(StabilitySearchMethod.BeeSwarm)); + Assert.That(parameters.SlipCircleDefinition, Is.Not.Null); + }); + } + + [Test] + [TestCase(FailureMechanismSystemType.StabilityInside, true)] + [TestCase(FailureMechanismSystemType.StabilityOutside, false)] + public void GivenSpecificationWithStabilityModel_WhenIsEnabledCalledWithCalculationModel_ThenReturnsExpectedResult( + FailureMechanismSystemType failureMechanism, bool expectedIsEnabled) + { + // Given + var specification = new DamProjectCalculationSpecification() + { + FailureMechanismSystemType = failureMechanism + }; + + // When + bool isEnabled = specification.IsEnabled(nameof(specification.CalculationModel)); + + // Then + Assert.That(isEnabled, Is.EqualTo(expectedIsEnabled)); + } + + [Test] + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + [TestCase("Property")] + public void GivenSpecificationWithStabilityInside_WhenIsEnabledCalledWithOtherProperty_ThenReturnsTrue( + string property) + { + // Given + var specification = new DamProjectCalculationSpecification() + { + FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside + }; + + // When + bool isEnabled = specification.IsEnabled(property); + + // Then + Assert.That(isEnabled, Is.True); + } + + [Test] + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + [TestCase("Property")] + public void GivenSpecificationWithStabilityOutside_WhenIsEnabledCalledWithOtherProperty_ThenReturnsTrue( + string property) + { + // Given + var specification = new DamProjectCalculationSpecification + { + FailureMechanismSystemType = FailureMechanismSystemType.StabilityOutside + }; + + // When + bool isEnabled = specification.IsEnabled(property); + + // Then + Assert.That(isEnabled, Is.True); + } + + [Test] + [TestCase(FailureMechanismSystemType.Piping)] + public void GivenSpecificationWithNotStabilityModel_WhenIsEnabledCalledWithCalculationModel_ThenReturnsTrue( + FailureMechanismSystemType failureMechanism) + { + // Given + var specification = new DamProjectCalculationSpecification + { + FailureMechanismSystemType = failureMechanism + }; + + // When + bool isEnabled = specification.IsEnabled(nameof(specification.CalculationModel)); + + // Then + Assert.That(isEnabled, Is.True); + } + + [Test] + [TestCase(FailureMechanismSystemType.StabilityInside, true)] + [TestCase(FailureMechanismSystemType.StabilityOutside, false)] + [TestCase(FailureMechanismSystemType.Piping, false)] + public void IsVisible_WithFailureMechanismTypeAndCalledWithStabilityParametersProperty_ReturnsExpectedResult( + FailureMechanismSystemType failureMechanismSystemType, bool expectedVisibility) + { + // Setup + var specification = new DamProjectCalculationSpecification + { + FailureMechanismSystemType = failureMechanismSystemType + }; + + // Call + bool isVisible = specification.IsVisible(nameof(StabilityModelType)); + + // Assert + Assert.That(isVisible, Is.EqualTo(expectedVisibility)); + } + + [Test] + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + [TestCase("Property")] + public void IsVisible_CalledWithProperty_ReturnsTrue(string property) + { + // Setup + var specification = new DamProjectCalculationSpecification + { + FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside + }; + + // Call + bool isVisible = specification.IsVisible(property); + + // Assert + Assert.That(isVisible, Is.True); + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.cs =================================================================== diff -u -r6946 -r6964 --- DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.cs (.../DamProjectCalculationSpecificationPropertyControl.cs) (revision 6946) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamProjectCalculationSpecificationPropertyControl.cs (.../DamProjectCalculationSpecificationPropertyControl.cs) (revision 6964) @@ -19,13 +19,15 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System.Windows.Forms; using Deltares.Dam.Data; using Deltares.Standard.EventPublisher; using Deltares.Standard.EventPublisher.Enum; using Deltares.Standard.Forms; using Deltares.Standard.Forms.DExpress; +using System; +using System.Windows.Forms; + namespace Deltares.Dam.Forms { public partial class DamProjectCalculationSpecificationPropertyControl : UserControl, IPropertyControl @@ -37,43 +39,59 @@ public DamProjectCalculationSpecificationPropertyControl() { InitializeComponent(); - // Make sure PropertyEditorReactionType is set to Ignore (Design time this does NOT work TODO for Grid component). - Grid.PropertyEditorReactionType = PropertyEditorReactionType.Ignore; + Name = "Calculation"; - - BindSupport.Bind(this, Grid, p => p.DamCalculationSpecifications); - + + BindSupport.BindTextAndValue(CalculationDefinitionPanelControl, FailureMechanismLabel, FailureMechanismCombobox, p => p.FailureMechanismSystemType); + BindSupport.BindTextAndValue(CalculationDefinitionPanelControl, CalculationModelLabel, CalculationModelComboBox, p => p.CalculationModel); DataEventPublisher.OnSelectionChanged += DataEventPublisher_OnSubSelectionChanged; DataEventPublisher.OnAfterChange += DataEventPublisher_OnAfterChange; FormsSupport.RepairRightAnchoredControls(this); + FormsSupport.AdjustSizeToContents(CalculationDefinitionPanelControl); FormsSupport.AdjustSizeToContents(damProjectCalculationOptionsPropertyControl1); firstEdit = true; } private void DataEventPublisher_OnAfterChange(object sender, PublishEventArgs e) { - var specification = sender as DamFailureMechanismeCalculationSpecification; + var specification = sender as DamProjectCalculationSpecification; if (specification != null && damProjectCalculationSpecification != null) { - damProjectCalculationSpecification.CurrentSpecification = specification; + damProjectCalculationSpecification = specification; SetSelectedDamCalculationSpecification(); } + if (sender is DamProject pd) + { + damProjectCalculationSpecification = pd.DamProjectData.DamProjectCalculationSpecification; + //currentSpecification = pd.DamProjectData.DamProjectCalculationSpecification.DamStabilityParameters; + SetSelectedDamCalculationSpecification(); + } } private void SetSelectedDamCalculationSpecification() { - DamFailureMechanismeCalculationSpecification selection = damProjectCalculationSpecification.CurrentSpecification; + DamProjectCalculationSpecification selection = damProjectCalculationSpecification; if (selection != null) { - selection.SlipCircleDefinition.Specification = selection; + selection.DamStabilityParameters.SlipCircleDefinition.Specification = selection; BindSupport.Assign(damProjectCalculationOptionsPropertyControl1, selection); if (firstEdit) { // Ensure that all edits of the damProjectCalculationOptionsPropertyControl1 are updated at start damProjectCalculationOptionsPropertyControl1.SelectedObject = selection; } + if (CalculationDefinitionPanelControl.InvokeRequired) + { + Action action = () => BindSupport.Assign(CalculationDefinitionPanelControl, selection); + CalculationDefinitionPanelControl.Invoke(action); + } + else + { + BindSupport.Assign(CalculationDefinitionPanelControl, selection); + } + if (selection.FailureMechanismSystemType != FailureMechanismSystemType.Piping && firstEdit) { // this is a hack to force update on ill placed edits. @@ -85,13 +103,23 @@ private void DataEventPublisher_OnSubSelectionChanged(object sender, PublishEventArgs e) { - if (((SelectionEventArgs) e).PropertyEditorReactionType == PropertyEditorReactionType.Ignore && - sender is DamFailureMechanismeCalculationSpecification item && - damProjectCalculationSpecification.DamCalculationSpecifications.Contains(item)) + if (((SelectionEventArgs)e).PropertyEditorReactionType == PropertyEditorReactionType.Ignore && + sender is DamProjectCalculationSpecification item && + damProjectData.DamProjectCalculationSpecifications.Contains(item)) { - damProjectCalculationSpecification.CurrentSpecification = item; + damProjectCalculationSpecification = item; SetSelectedDamCalculationSpecification(); } + + DamProjectData data = sender as DamProjectData; + if (data != null && ((SelectionEventArgs)e).PropertyEditorReactionType == PropertyEditorReactionType.Update && + data.DamProjectCalculationSpecifications.Contains(data.DamProjectCalculationSpecification)) + { + damProjectData = data; + damProjectCalculationSpecification = data.DamProjectCalculationSpecification; + SetSelectedDamCalculationSpecification(); + SelectedObject = data; + } } #region IPropertyControl Members @@ -109,11 +137,10 @@ damProjectData = data; damProjectCalculationSpecification = damProjectData.DamProjectCalculationSpecification; BindSupport.Assign(this, damProjectCalculationSpecification); + BindSupport.Assign(CalculationDefinitionPanelControl, data.DamProjectCalculationSpecifications); + SetSelectedDamCalculationSpecification(); - if (damProjectData.DamProjectType == DamProjectType.Design) - { - Grid.ShowToolbar = false; - } + CalculationSpecificationsGroupControl.Visible = true; } } } Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs =================================================================== diff -u -r6873 -r6964 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 6873) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 6964) @@ -84,7 +84,7 @@ output = DamXmlSerialization.LoadOutputFromXmlString(outputString); var actualDamProjectData = new DamProjectData(); actualDamProjectData.Dike = new Dike(); - actualDamProjectData.DamProjectCalculationSpecification.CurrentSpecification = new DamFailureMechanismeCalculationSpecification(); + actualDamProjectData.DamProjectCalculationSpecification.DamStabilityParameters = new DamStabilityParameters(); Assert.That(() => FillDamUiFromXmlOutput.AddOutputToDamProjectData(actualDamProjectData, output), Throws.InstanceOf()); } @@ -100,8 +100,8 @@ output = DamXmlSerialization.LoadOutputFromXmlString(outputString); var actualDamProjectData = new DamProjectData(); actualDamProjectData.Dike = new Dike(); - actualDamProjectData.DamProjectCalculationSpecification.CurrentSpecification = - new DamFailureMechanismeCalculationSpecification(); + actualDamProjectData.DamProjectCalculationSpecification.DamStabilityParameters = + new DamStabilityParameters(); actualDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(actualDamProjectData, output); Assert.That(string.IsNullOrEmpty(actualDamProjectData.DesignCalculations.First().BaseFileName), Is.False, "BaseFileName should be reset"); @@ -272,7 +272,7 @@ private DamProjectData CreateInputProjectDataForPiping() { - var spec = new DamFailureMechanismeCalculationSpecification + var spec = new DamProjectCalculationSpecification { FailureMechanismSystemType = FailureMechanismSystemType.Piping, PipingModelType = PipingModelType.Bligh @@ -282,22 +282,19 @@ private DamProjectData CreateInputProjectDataForStability(StabilityModelType stabilityModelType) { - var spec = new DamFailureMechanismeCalculationSpecification + var spec = new DamProjectCalculationSpecification { FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside, CalculationModel = stabilityModelType }; return CreateInputProjectData(spec); } - private static DamProjectData CreateInputProjectData(DamFailureMechanismeCalculationSpecification spec) + private static DamProjectData CreateInputProjectData(DamProjectCalculationSpecification spec) { var project = new DamProjectData { - DamProjectCalculationSpecification = - { - CurrentSpecification = spec - } + DamProjectCalculationSpecification = spec }; project.Dike = new Dike(); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamStabilityParameters.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamStabilityParameters.cs (revision 0) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamStabilityParameters.cs (revision 6964) @@ -0,0 +1,194 @@ +// 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.Collections; +using Deltares.Dam.Data.Properties; +using Deltares.Standard; +using Deltares.Standard.EventPublisher; +using Deltares.Standard.Validation; + +namespace Deltares.Dam.Data; + +/// +/// +/// +public class DamStabilityParameters : IDomain, IVisibleEnabled, ICloneable +{ + private bool isUpliftVanRunOnlyWhenUpliftOccurs = true; + + public DamStabilityParameters() + { + SearchMethod = StabilitySearchMethod.BeeSwarm; + IsUpliftVanRunOnlyWhenUpliftOccurs = true; + SlipCircleDefinition = new SlipCircleDefinition(); + ReadUserSettingsSlipCircleDefinition(); + } + + /// + /// 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 + { + return isUpliftVanRunOnlyWhenUpliftOccurs; + } + set + { + isUpliftVanRunOnlyWhenUpliftOccurs = value; + } + } + + /// + /// The slip circle definition. + /// + [Validate] public SlipCircleDefinition SlipCircleDefinition { get; set; } + + /// + /// Assigns the values from the given stability calculation. + /// + /// + public void Assign(DamStabilityParameters damFailureMechanismCalculation) + { + // failureMechanismSystemType = damFailureMechanismCalculation.FailureMechanismSystemType; + // calculationModel = damFailureMechanismCalculation.CalculationModel; + // pipingModelType = damFailureMechanismCalculation.PipingModelType; + // stabilityModelType = damFailureMechanismCalculation.StabilityModelType; + SearchMethod = damFailureMechanismCalculation.SearchMethod; + IsUpliftVanRunOnlyWhenUpliftOccurs = damFailureMechanismCalculation.IsUpliftVanRunOnlyWhenUpliftOccurs; + if (SlipCircleDefinition != null) + { + SlipCircleDefinition.Assign(damFailureMechanismCalculation.SlipCircleDefinition); + } + else + { + SlipCircleDefinition = null; + } + //assign interface + } + + public DamStabilityParameters Clone() + { + var stabilityParameters = new DamStabilityParameters(); + + if (SlipCircleDefinition != null) + { + SlipCircleDefinition = SlipCircleDefinition.Clone(); + } + + stabilityParameters.Assign(this); + + return stabilityParameters; + } + + /// + /// Reads the user settings. + /// + private void ReadUserSettingsSlipCircleDefinition() + { + if (SlipCircleDefinition == null) + { + SlipCircleDefinition = new SlipCircleDefinition(); + } + + 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 ICollection GetDomain(string property) + { + switch (property) + { + case "SearchMethod": + if (SlipCircleDefinition.Specification.FailureMechanismSystemType == + FailureMechanismSystemType.StabilityInside && + (SlipCircleDefinition.Specification.StabilityModelType == StabilityModelType.UpliftVan || + SlipCircleDefinition.Specification.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; + } + } + + public bool IsEnabled(string property) + { + switch (property) + { + case "SearchMethod": + case "IsUpliftVanRunOnlyWhenUpliftOccurs": + return Location.DamProjectType == DamProjectType.Design; + default: return true; + } + } + + public bool IsVisible(string property) + { + switch (property) + { + case "SearchMethod": + case "IsUpliftVanRunOnlyWhenUpliftOccurs": + return + (SlipCircleDefinition.Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityInside || + SlipCircleDefinition.Specification.FailureMechanismSystemType == FailureMechanismSystemType.StabilityOutside) && + (SlipCircleDefinition.Specification.StabilityModelType == StabilityModelType.BishopUpliftVan || + SlipCircleDefinition.Specification.StabilityModelType == StabilityModelType.UpliftVan); + default: return true; + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data.Tests/DamProjectDataTests.cs =================================================================== diff -u -r6873 -r6964 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data.Tests/DamProjectDataTests.cs (.../DamProjectDataTests.cs) (revision 6873) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data.Tests/DamProjectDataTests.cs (.../DamProjectDataTests.cs) (revision 6964) @@ -43,12 +43,7 @@ var damProjectData = new DamProjectData(); damProjectData.Dike = new Dike(); damProjectData.Dike.DamSoils.Add(soil); - var damCalculationSpecification = new DamFailureMechanismeCalculationSpecification - { - FailureMechanismSystemType = failureMechanismSystemType - }; - damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); - damProjectData.DamProjectCalculationSpecification.CurrentSpecification = damCalculationSpecification; + AddSpecification(damProjectData, failureMechanismSystemType); ValidationResult[] validationResults = damProjectData.ValidateDamSoils(); @@ -87,12 +82,7 @@ var damProjectData = new DamProjectData(); damProjectData.Dike = new Dike(); damProjectData.Dike.DamSoils.Add(soil); - var damCalculationSpecification = new DamFailureMechanismeCalculationSpecification - { - FailureMechanismSystemType = failureMechanismSystemType - }; - damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); - damProjectData.DamProjectCalculationSpecification.CurrentSpecification = damCalculationSpecification; + AddSpecification(damProjectData, failureMechanismSystemType); ValidationResult[] validationResults = damProjectData.ValidateDamSoils(); @@ -131,19 +121,24 @@ var damProjectData = new DamProjectData(); damProjectData.Dike = new Dike(); damProjectData.Dike.DamSoils.Add(soil); - var damCalculationSpecification = new DamFailureMechanismeCalculationSpecification + AddSpecification(damProjectData, failureMechanismSystemType); + ValidationResult[] validationResults = damProjectData.ValidateDamSoils(); + + Assert.That(validationResults, Has.Length.EqualTo(0)); + } + + private void AddSpecification(DamProjectData damProjectData, FailureMechanismSystemType failureMechanismSystemType) + { + var damCalculationSpecification = new DamProjectCalculationSpecification { FailureMechanismSystemType = failureMechanismSystemType }; - damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); - damProjectData.DamProjectCalculationSpecification.CurrentSpecification = damCalculationSpecification; - ValidationResult[] validationResults = damProjectData.ValidateDamSoils(); - - Assert.That(validationResults, Has.Length.EqualTo(0)); + damProjectData.DamProjectCalculationSpecification = damCalculationSpecification; + damProjectData.DamProjectCalculationSpecification.DamStabilityParameters = new DamStabilityParameters(); } - private static DamSoil CreateValidDamSoil() +private static DamSoil CreateValidDamSoil() { var damSoil = new DamSoil(); damSoil.AbovePhreaticLevel = 17; Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/LocationJobTests.cs =================================================================== diff -u -r6823 -r6964 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/LocationJobTests.cs (.../LocationJobTests.cs) (revision 6823) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/LocationJobTests.cs (.../LocationJobTests.cs) (revision 6964) @@ -53,7 +53,7 @@ { var calculationResult = new CsvExportData { - DamFailureMechanismeCalculation = new DamFailureMechanismeCalculationSpecification + DamProjectCalculationSpecification = new DamProjectCalculationSpecification { FailureMechanismSystemType = failureMechanismSystemType, StabilityModelType = stabilityModelType Index: DamClients/DamUI/trunk/src/Dam/Forms/DamPlugin.cs =================================================================== diff -u -r6951 -r6964 --- DamClients/DamUI/trunk/src/Dam/Forms/DamPlugin.cs (.../DamPlugin.cs) (revision 6951) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamPlugin.cs (.../DamPlugin.cs) (revision 6964) @@ -443,7 +443,7 @@ dpc.BuildPropertyControlTabForTypes(damSurfaceLineControl, typeof(SurfaceLine2), typeof(CharacteristicPoint), typeof(LocationJob)); progressDelegate = dikePropertyControl.DoProgress; - dpc.BuildPropertyControlTabForTypes(dikePropertyControl, typeof(Dike), typeof(DikeJob), typeof(DamProjectData)); + dpc.BuildPropertyControlTabForTypes(dikePropertyControl, typeof(Dike), typeof(DikeJob)); dpc.BuildPropertyControlTabForTypes(damProjectCalculationSpecificationPropertyControl, typeof(DamProjectData)); dpc.BuildPropertyControlTabForTypes(designCalculationPropertyControl, typeof(CsvExportData), typeof(LocationJob)); } @@ -1258,22 +1258,22 @@ LocationId = designResult.LocationName, SoilProfileId = designResult.ProfileName, Scenario = designResult.LocationScenarioId, - CalculationMechanism = designResult.DamFailureMechanismeCalculation.FailureMechanismSystemType.ToString(), + CalculationMechanism = designResult.DamProjectCalculationSpecification.FailureMechanismSystemType.ToString(), CalculationModel = "" }; - switch (designResult.DamFailureMechanismeCalculation.FailureMechanismSystemType) + switch (designResult.DamProjectCalculationSpecification.FailureMechanismSystemType) { case FailureMechanismSystemType.StabilityOutside: csvExportSurfaceLineIdentifiers.CalculationModel = - designResult.DamFailureMechanismeCalculation.StabilityModelType.ToString(); + designResult.DamProjectCalculationSpecification.StabilityModelType.ToString(); break; case FailureMechanismSystemType.StabilityInside: csvExportSurfaceLineIdentifiers.CalculationModel = - designResult.DamFailureMechanismeCalculation.StabilityModelType.ToString(); + designResult.DamProjectCalculationSpecification.StabilityModelType.ToString(); break; case FailureMechanismSystemType.Piping: csvExportSurfaceLineIdentifiers.CalculationModel = - designResult.DamFailureMechanismeCalculation.PipingModelType.ToString(); + designResult.DamProjectCalculationSpecification.PipingModelType.ToString(); break; }