Index: Riskeer/Common/src/Riskeer.Common.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -r88b53a8d5ebad04e8fb9dd1c240078bdd9904c6f -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/src/Riskeer.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 88b53a8d5ebad04e8fb9dd1c240078bdd9904c6f) +++ Riskeer/Common/src/Riskeer.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2021. All rights reserved. +// Copyright (C) Stichting Deltares 2021. All rights reserved. // // This file is part of Riskeer. // @@ -1780,7 +1780,7 @@ } /// - /// Looks up a localized string similar to Toetsoordeel voor dit toetsspoor:. + /// Looks up a localized string similar to Gecombineerde faalkans (1/jaar). /// public static string FailureMechanismResultView_FailureMechanismAssemblyLabel { get { Index: Riskeer/Common/src/Riskeer.Common.Forms/Properties/Resources.resx =================================================================== diff -u -r88b53a8d5ebad04e8fb9dd1c240078bdd9904c6f -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/src/Riskeer.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision 88b53a8d5ebad04e8fb9dd1c240078bdd9904c6f) +++ Riskeer/Common/src/Riskeer.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -1348,7 +1348,7 @@ ..\Resources\error.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - Toetsoordeel voor dit toetsspoor: + Gecombineerde faalkans (1/jaar) Categoriegrenzen Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.Designer.cs =================================================================== diff -u -re72b7c913b164e9dc9ca4aeafb52aa1e85ba6346 -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.Designer.cs (.../FailureMechanismResultView.Designer.cs) (revision e72b7c913b164e9dc9ca4aeafb52aa1e85ba6346) +++ Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.Designer.cs (.../FailureMechanismResultView.Designer.cs) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -19,6 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Windows.Forms; + namespace Riskeer.Common.Forms.Views { partial class FailureMechanismResultView @@ -39,23 +41,30 @@ this.components = new System.ComponentModel.Container(); this.TableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); this.failureMechanismAssemblyLabel = new System.Windows.Forms.Label(); + this.probabilityResultTypeComboBox = new System.Windows.Forms.ComboBox(); + this.failurePathAssemblyProbabilityTextBox = new System.Windows.Forms.TextBox(); this.DataGridViewControl = new Core.Common.Controls.DataGrid.DataGridViewControl(); + this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components); this.TableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); this.SuspendLayout(); // // TableLayoutPanel // - this.TableLayoutPanel.ColumnCount = 3; - this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.TableLayoutPanel.ColumnCount = 4; + this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.AutoSize)); + this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.AutoSize)); + this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); + this.TableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 363F)); this.TableLayoutPanel.Controls.Add(this.failureMechanismAssemblyLabel, 0, 0); + this.TableLayoutPanel.Controls.Add(this.probabilityResultTypeComboBox, 1, 0); + this.TableLayoutPanel.Controls.Add(this.failurePathAssemblyProbabilityTextBox, 2, 0); this.TableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.TableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.TableLayoutPanel.Location = new System.Drawing.Point(0, 42); this.TableLayoutPanel.Name = "TableLayoutPanel"; this.TableLayoutPanel.RowCount = 1; this.TableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.TableLayoutPanel.Size = new System.Drawing.Size(764, 30); + this.TableLayoutPanel.Size = new System.Drawing.Size(764, 40); this.TableLayoutPanel.TabIndex = 1; // // failureMechanismAssemblyLabel @@ -64,33 +73,63 @@ this.failureMechanismAssemblyLabel.Dock = System.Windows.Forms.DockStyle.Fill; this.failureMechanismAssemblyLabel.Location = new System.Drawing.Point(3, 0); this.failureMechanismAssemblyLabel.Name = "failureMechanismAssemblyLabel"; - this.failureMechanismAssemblyLabel.Size = new System.Drawing.Size(197, 30); + this.failureMechanismAssemblyLabel.Size = new System.Drawing.Size(162, 40); this.failureMechanismAssemblyLabel.TabIndex = 2; this.failureMechanismAssemblyLabel.Text = global::Riskeer.Common.Forms.Properties.Resources.FailureMechanismResultView_FailureMechanismAssemblyLabel; this.failureMechanismAssemblyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // + // probabilityResultTypeComboBox + // + this.probabilityResultTypeComboBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.probabilityResultTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.probabilityResultTypeComboBox.FormattingEnabled = true; + this.probabilityResultTypeComboBox.Location = new System.Drawing.Point(171, 10); + this.probabilityResultTypeComboBox.Margin = new System.Windows.Forms.Padding(3, 10, 3, 10); + this.probabilityResultTypeComboBox.Name = "probabilityResultTypeComboBox"; + this.probabilityResultTypeComboBox.Size = new System.Drawing.Size(121, 21); + this.probabilityResultTypeComboBox.TabIndex = 3; + this.probabilityResultTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ProbabilityResultTypeComboBoxSelectedIndexChanged); + // + // failurePathAssemblyProbabilityTextBox + // + this.failurePathAssemblyProbabilityTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.failurePathAssemblyProbabilityTextBox.Location = new System.Drawing.Point(298, 10); + this.failurePathAssemblyProbabilityTextBox.Margin = new System.Windows.Forms.Padding(3, 10, 3, 10); + this.failurePathAssemblyProbabilityTextBox.Name = "failurePathAssemblyProbabilityTextBox"; + this.failurePathAssemblyProbabilityTextBox.Size = new System.Drawing.Size(100, 20); + this.failurePathAssemblyProbabilityTextBox.KeyDown += new KeyEventHandler(this.FailurePathAssemblyProbabilityTextBoxKeyDown); + this.failurePathAssemblyProbabilityTextBox.TabIndex = 4; + // // DataGridViewControl // this.DataGridViewControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.DataGridViewControl.Location = new System.Drawing.Point(0, 30); + this.DataGridViewControl.Location = new System.Drawing.Point(0, 0); this.DataGridViewControl.MultiSelect = true; this.DataGridViewControl.Name = "DataGridViewControl"; this.DataGridViewControl.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect; - this.DataGridViewControl.Size = new System.Drawing.Size(764, 52); + this.DataGridViewControl.Size = new System.Drawing.Size(764, 42); this.DataGridViewControl.TabIndex = 0; // - // FailureMechanismResultViewOld + // errorProvider // + this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink; + this.errorProvider.ContainerControl = this; + this.errorProvider.Icon = global::Riskeer.Common.Forms.Properties.Resources.ErrorIcon; + // + // FailureMechanismResultView + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; this.AutoScrollMinSize = new System.Drawing.Size(500, 0); this.Controls.Add(this.DataGridViewControl); this.Controls.Add(this.TableLayoutPanel); - this.Name = "FailureMechanismResultViewOld"; + this.errorProvider.SetIconPadding(this, 10); + this.Name = "FailureMechanismResultView"; this.Size = new System.Drawing.Size(764, 82); this.TableLayoutPanel.ResumeLayout(false); this.TableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); this.ResumeLayout(false); } @@ -100,5 +139,8 @@ protected Core.Common.Controls.DataGrid.DataGridViewControl DataGridViewControl; protected System.Windows.Forms.TableLayoutPanel TableLayoutPanel; private System.Windows.Forms.Label failureMechanismAssemblyLabel; + private System.Windows.Forms.ComboBox probabilityResultTypeComboBox; + private System.Windows.Forms.TextBox failurePathAssemblyProbabilityTextBox; + private ErrorProvider errorProvider; } } Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.cs =================================================================== diff -u -r74407a8a8acd86ad005b3d9515251193f3cf26af -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision 74407a8a8acd86ad005b3d9515251193f3cf26af) +++ Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -21,13 +21,20 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; +using System.Runtime.CompilerServices; using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.DataGrid; using Core.Common.Controls.Views; +using Core.Common.Util; using Core.Common.Util.Extensions; +using Riskeer.Common.Data.AssemblyTool; +using Riskeer.Common.Data.Exceptions; using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.FailurePath; +using Riskeer.Common.Forms.TypeConverters; namespace Riskeer.Common.Forms.Views { @@ -38,7 +45,7 @@ /// . /// The type of the row that is used to show the data. /// The type of the failure mechanism this view belongs to. - public abstract partial class FailureMechanismResultView : UserControl, IView + public abstract partial class FailureMechanismResultView : UserControl, IView, INotifyPropertyChanged where TSectionResult : FailureMechanismSectionResult where TSectionResultRow : FailureMechanismSectionResultRow where TFailureMechanism : IHasSectionResults @@ -50,7 +57,11 @@ private IEnumerable sectionResultRows; private bool rowUpdating; + private double failurePathAssemblyProbability; + private bool probabilityResultTypeComboBoxUpdating; + public event PropertyChangedEventHandler PropertyChanged; + /// /// Creates a new instance of . /// @@ -91,13 +102,32 @@ { Observable = failureMechanismSectionResults }; + + InitializeComboBox(); + InitializeTextBox(); } /// /// Gets the failure mechanism. /// public TFailureMechanism FailureMechanism { get; } + [TypeConverter(typeof(NoProbabilityValueDoubleConverter))] + public double FailurePathAssemblyProbability + { + get => failurePathAssemblyProbability; + set + { + if (IsManualAssembly()) + { + FailureMechanism.AssemblyResult.ManualFailurePathAssemblyProbability = value; + } + + failurePathAssemblyProbability = value; + OnPropertyChanged(nameof(FailurePathAssemblyProbability)); + } + } + public object Data { get; set; } protected override void OnLoad(EventArgs e) @@ -119,6 +149,12 @@ /// A display object which can be added as a row to the . protected abstract TSectionResultRow CreateFailureMechanismSectionResultRow(TSectionResult sectionResult); + /// + /// Gets the length effect factor 'N'. + /// + /// A representing the length effect factor 'N'. + protected abstract double GetN(); + protected override void Dispose(bool disposing) { failureMechanismObserver.Dispose(); @@ -148,6 +184,8 @@ protected void UpdateView() { UpdateDataGridViewDataSource(); + UpdateFailurePathAssemblyControls(); + UpdateAssemblyData(); } /// @@ -158,6 +196,51 @@ DataGridViewControl.RefreshDataGridView(false); } + private void InitializeComboBox() + { + IEnumerable> dataSource = + Enum.GetValues(typeof(FailurePathAssemblyProbabilityResultType)) + .Cast() + .Select(e => new EnumDisplayWrapper(e)) + .ToArray(); + + probabilityResultTypeComboBox.BeginUpdate(); + + probabilityResultTypeComboBoxUpdating = true; + probabilityResultTypeComboBox.DataSource = dataSource; + probabilityResultTypeComboBox.ValueMember = nameof(EnumDisplayWrapper.Value); + probabilityResultTypeComboBox.DisplayMember = nameof(EnumDisplayWrapper.DisplayName); + probabilityResultTypeComboBox.SelectedItem = FailureMechanism.AssemblyResult.ProbabilityResultType; + probabilityResultTypeComboBoxUpdating = false; + + probabilityResultTypeComboBox.EndUpdate(); + } + + private void InitializeTextBox() + { + Binding failurePathAssemblyProbabilityBinding = failurePathAssemblyProbabilityTextBox.DataBindings.Add(nameof(TextBox.Text), this, + nameof(FailurePathAssemblyProbability), + true, + DataSourceUpdateMode.OnValidation); + failurePathAssemblyProbabilityBinding.BindingComplete += FailurePathAssemblyProbabilityTextBoxBindingBindingComplete; + } + + private void UpdateFailurePathAssemblyControls() + { + failurePathAssemblyProbabilityTextBox.Enabled = IsManualAssembly(); + failurePathAssemblyProbabilityTextBox.ReadOnly = !IsManualAssembly(); + failurePathAssemblyProbabilityTextBox.Refresh(); + } + + private void UpdateAssemblyData() + { + ClearErrorMessage(); + + FailurePathAssemblyProbability = IsManualAssembly() + ? FailureMechanism.AssemblyResult.ManualFailurePathAssemblyProbability + : TryGetFailurePathAssemblyProbability(); + } + /// /// Updates the data source of the data grid view with the current known failure mechanism section results. /// @@ -198,6 +281,7 @@ { rowUpdating = true; RefreshDataGrid(); + UpdateAssemblyData(); } private void HandleCellStyling(object sender, DataGridViewCellFormattingEventArgs e) @@ -214,6 +298,81 @@ sectionResultRows.ForEachElementDo(row => row.Update()); DataGridViewControl.RefreshDataGridView(); + + UpdateAssemblyData(); } + + private double TryGetFailurePathAssemblyProbability() + { + try + { + return FailurePathAssemblyResultFactory.AssemblyFailurePath(GetN(), sectionResultRows.Select(r => r.AssemblyResult)); + } + catch (AssemblyException e) + { + SetErrorMessage(e.Message); + return double.NaN; + } + } + + private void ProbabilityResultTypeComboBoxSelectedIndexChanged(object sender, EventArgs e) + { + if (probabilityResultTypeComboBoxUpdating || probabilityResultTypeComboBox.SelectedIndex == -1) + { + return; + } + + FailureMechanism.AssemblyResult.ProbabilityResultType = (FailurePathAssemblyProbabilityResultType) probabilityResultTypeComboBox.SelectedValue; + + ClearErrorMessage(); + UpdateAssemblyData(); + UpdateFailurePathAssemblyControls(); + } + + private void FailurePathAssemblyProbabilityTextBoxBindingBindingComplete(object sender, BindingCompleteEventArgs e) + { + if (IsManualAssembly()) + { + if (e.BindingCompleteState != BindingCompleteState.Success) + { + SetErrorMessage(e.ErrorText); + FailurePathAssemblyProbability = double.NaN; + } + else if (e.BindingCompleteState == BindingCompleteState.Success) + { + ClearErrorMessage(); + } + } + } + + private void FailurePathAssemblyProbabilityTextBoxKeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + failureMechanismAssemblyLabel.Focus(); // Focus on different component to commit value + e.Handled = true; + } + } + + private bool IsManualAssembly() + { + return FailureMechanism.AssemblyResult.ProbabilityResultType == FailurePathAssemblyProbabilityResultType.Manual; + } + + private void SetErrorMessage(string errorMessage) + { + errorProvider.SetIconPadding(failurePathAssemblyProbabilityTextBox, 5); + errorProvider.SetError(failurePathAssemblyProbabilityTextBox, errorMessage); + } + + private void ClearErrorMessage() + { + errorProvider.SetError(failurePathAssemblyProbabilityTextBox, string.Empty); + } + + private void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } } } \ No newline at end of file Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.resx =================================================================== diff -u -re72b7c913b164e9dc9ca4aeafb52aa1e85ba6346 -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.resx (.../FailureMechanismResultView.resx) (revision e72b7c913b164e9dc9ca4aeafb52aa1e85ba6346) +++ Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismResultView.resx (.../FailureMechanismResultView.resx) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -117,7 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 \ No newline at end of file Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/FailureMechanismResultViewOldTest.cs =================================================================== diff -u -rac43a498c0b19cdf26f6007192ef9904f3a6fae3 -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/FailureMechanismResultViewOldTest.cs (.../FailureMechanismResultViewOldTest.cs) (revision ac43a498c0b19cdf26f6007192ef9904f3a6fae3) +++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/FailureMechanismResultViewOldTest.cs (.../FailureMechanismResultViewOldTest.cs) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -91,7 +91,7 @@ Assert.IsTrue(assemblyResultLabel.AutoSize); Assert.AreEqual(DockStyle.Fill, assemblyResultLabel.Dock); Assert.AreEqual(ContentAlignment.MiddleLeft, assemblyResultLabel.TextAlign); - Assert.AreEqual("Toetsoordeel voor dit toetsspoor:", assemblyResultLabel.Text); + Assert.AreEqual("Gecombineerde faalkans (1/jaar)", assemblyResultLabel.Text); Assert.IsInstanceOf(tableLayoutPanel.GetControlFromPosition(2, 0)); Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs =================================================================== diff -u -r82b497dea6643606db6d39bfce4e86c24bd048d2 -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision 82b497dea6643606db6d39bfce4e86c24bd048d2) +++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -100,14 +100,14 @@ Assert.AreEqual(2, view.Controls.Count); var tableLayoutPanel = (TableLayoutPanel) new ControlTester("TableLayoutPanel").TheObject; - Assert.AreEqual(3, tableLayoutPanel.ColumnCount); + Assert.AreEqual(4, tableLayoutPanel.ColumnCount); Assert.AreEqual(1, tableLayoutPanel.RowCount); var assemblyResultLabel = (Label) tableLayoutPanel.GetControlFromPosition(0, 0); Assert.IsTrue(assemblyResultLabel.AutoSize); Assert.AreEqual(DockStyle.Fill, assemblyResultLabel.Dock); Assert.AreEqual(ContentAlignment.MiddleLeft, assemblyResultLabel.TextAlign); - Assert.AreEqual("Toetsoordeel voor dit toetsspoor:", assemblyResultLabel.Text); + Assert.AreEqual("Gecombineerde faalkans (1/jaar)", assemblyResultLabel.Text); Assert.IsInstanceOf(view); Assert.IsInstanceOf(view); @@ -437,6 +437,13 @@ return new TestRow(sectionResult); } + public double N { private get; set; } + + protected override double GetN() + { + return N; + } + protected override void AddDataGridColumns() { DataGridViewControl.AddTextBoxColumn(nameof(TestRow.Name), "Test", true); Index: Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismResultView.cs =================================================================== diff -u -r5b444427ebef3934be3d209a66770dfca4154e48 -r77e3b60549930fa1846e5bc11fd5d17af5c35a91 --- Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismResultView.cs (.../PipingFailureMechanismResultView.cs) (revision 5b444427ebef3934be3d209a66770dfca4154e48) +++ Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismResultView.cs (.../PipingFailureMechanismResultView.cs) (revision 77e3b60549930fa1846e5bc11fd5d17af5c35a91) @@ -26,6 +26,7 @@ using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.Calculation; using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.Probability; using Riskeer.Common.Forms; using Riskeer.Common.Forms.Builders; using Riskeer.Common.Forms.Views; @@ -102,6 +103,11 @@ }; } + protected override double GetN() + { + return FailureMechanism.PipingProbabilityAssessmentInput.GetN(assessmentSection.ReferenceLine.Length); + } + protected override void Dispose(bool disposing) { calculationInputObserver.Dispose();