From f127594b5ce45f6e95da8582f75e8bb9c19b7afe Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sat, 24 May 2025 20:26:44 +0500 Subject: [PATCH] Fix beam shear force calculator --- .../UI/Resources/ItemEditPanels.xaml | 4 +- StructureHelper/StructureHelper.csproj.user | 6 + .../BeamShears/BeamShearActionResultView.xaml | 56 ++++++++ .../BeamShearActionResultView.xaml.cs | 36 ++++++ .../BeamShearActionResultViewModel.cs | 26 ++++ .../BeamShearCalculatorInputDataViewModel.cs | 19 ++- .../BeamShears/BeamShearCalculatorView.xaml | 6 +- .../BeamShearCalculatorView.xaml.cs | 5 + .../BeamShearCalculatorViewModel.cs | 20 ++- .../BeamShearCalculatorsViewModel.cs | 19 ++- .../BeamShears/BeamShearLoadsViewModel.cs | 5 - .../BeamShears/BeamShearResultView.xaml | 34 ++++- .../BeamShears/BeamShearResultViewModel.cs | 41 +++++- .../ExportActionResultToCSVLogic.cs | 69 ++++++++++ .../Windows/BeamShears/ShearDiagramLogic.cs | 81 ++++++++++++ .../Factories/SourceTargetFactory.cs | 4 +- .../SelectPrimitivesSourceTarget.cs | 6 - .../Windows/ViewModels/SourceTargetVM.cs | 7 +- .../Interfaces/IGetFactorLogic.cs | 13 ++ .../BeamShearActionUpdateStrategy.cs | 1 + ...FactorLogic.cs => IMaterialFactorLogic.cs} | 2 +- ...{FactorLogic.cs => MaterialFactorLogic.cs} | 4 +- .../Materials/MaterialCommonOptionLogic.cs | 4 +- .../BeamShears/BeamShearActionResult.cs | 2 + .../Models/BeamShears/BeamShearCalculator.cs | 6 +- .../BeamShears/BeamShearCalculatorLogic.cs | 121 +++++++++++++----- .../BeamShears/BeamShearCalculatorResult.cs | 6 + .../BeamShearSectionCalculatorResult.cs | 14 -- .../BeamShears/BeamShearSectionLogic.cs | 70 +++++++++- .../BeamShears/BeamShearSectionLogicResult.cs | 19 +++ .../BeamShears/IBeamShearActionResult.cs | 2 + .../Models/BeamShears/IBeamShearCalculator.cs | 1 + .../BeamShears/IBeamShearCalculatorResult.cs | 4 + .../IBeamShearSectionLogicResult.cs | 5 + .../Models/BeamShears/IInclinedSection.cs | 8 ++ .../BeamShears/ISectionEffectiveness.cs | 2 +- .../Models/BeamShears/InclinedSection.cs | 2 + ...mShearCalculatorInputDataUpdateStrategy.cs | 1 + .../BeamShearCalculatorUpdateStrategy.cs | 1 + .../ConcreteStrengthLogic.cs} | 35 +++-- .../Logics/GetInclinedSectionListLogic.cs | 3 +- .../Logics/GetLogitudinalForceFactorLogic.cs | 109 ++++++++++++++++ .../{ => Logics}/IBeamShearStrenghLogic.cs | 2 +- .../IGetLongitudinalForceFactorLogic.cs | 15 +++ ...ic.cs => StirrupByDensityStrengthLogic.cs} | 18 ++- .../Logics/StirrupByRebarStrengthLogic.cs | 60 +++++++++ .../StirrupByRebarToDensityConvertStrategy.cs | 5 + .../BeamShears/Logics/StirrupStrengthLogic.cs | 48 +++++++ .../Models/Materials/ConcreteLibMaterial.cs | 2 +- .../Materials/FRMaterials/FRMaterial.cs | 2 +- .../Materials/Logics/ElasticMaterialLogic.cs | 2 +- .../Materials/ReinforcementLibMaterial.cs | 2 +- .../BeamShearStrengthByStirrupDensityTests.cs | 6 +- 53 files changed, 920 insertions(+), 121 deletions(-) create mode 100644 StructureHelper/Windows/BeamShears/BeamShearActionResultView.xaml create mode 100644 StructureHelper/Windows/BeamShears/BeamShearActionResultView.xaml.cs create mode 100644 StructureHelper/Windows/BeamShears/BeamShearActionResultViewModel.cs create mode 100644 StructureHelper/Windows/BeamShears/ExportActionResultToCSVLogic.cs create mode 100644 StructureHelper/Windows/BeamShears/ShearDiagramLogic.cs create mode 100644 StructureHelperCommon/Infrastructures/Interfaces/IGetFactorLogic.cs rename StructureHelperCommon/Models/Materials/Libraries/{IFactorLogic.cs => IMaterialFactorLogic.cs} (90%) rename StructureHelperCommon/Models/Materials/Libraries/{FactorLogic.cs => MaterialFactorLogic.cs} (86%) delete mode 100644 StructureHelperLogics/Models/BeamShears/BeamShearSectionCalculatorResult.cs create mode 100644 StructureHelperLogics/Models/BeamShears/BeamShearSectionLogicResult.cs rename StructureHelperLogics/Models/BeamShears/{BeamSectionShearStrengthLogic.cs => Logics/ConcreteStrengthLogic.cs} (61%) create mode 100644 StructureHelperLogics/Models/BeamShears/Logics/GetLogitudinalForceFactorLogic.cs rename StructureHelperLogics/Models/BeamShears/{ => Logics}/IBeamShearStrenghLogic.cs (91%) create mode 100644 StructureHelperLogics/Models/BeamShears/Logics/IGetLongitudinalForceFactorLogic.cs rename StructureHelperLogics/Models/BeamShears/Logics/{BeamShearStrengthByStirrupDensityLogic.cs => StirrupByDensityStrengthLogic.cs} (69%) create mode 100644 StructureHelperLogics/Models/BeamShears/Logics/StirrupByRebarStrengthLogic.cs create mode 100644 StructureHelperLogics/Models/BeamShears/Logics/StirrupStrengthLogic.cs diff --git a/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml b/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml index 4324620..5dd9a5a 100644 --- a/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml @@ -10,7 +10,7 @@ + ItemTemplate="{Binding ItemDataTemplate}"> @@ -23,7 +23,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StructureHelper/Windows/BeamShears/BeamShearActionResultView.xaml.cs b/StructureHelper/Windows/BeamShears/BeamShearActionResultView.xaml.cs new file mode 100644 index 0000000..82df597 --- /dev/null +++ b/StructureHelper/Windows/BeamShears/BeamShearActionResultView.xaml.cs @@ -0,0 +1,36 @@ +using StructureHelperLogics.Models.BeamShears; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace StructureHelper.Windows.BeamShears +{ + /// + /// Interaction logic for BeamShearActionResultView.xaml + /// + public partial class BeamShearActionResultView : Window + { + private BeamShearActionResultViewModel viewModel; + + public BeamShearActionResultView(BeamShearActionResultViewModel viewModel) + { + this.viewModel = viewModel; + InitializeComponent(); + this.DataContext = this.viewModel; + } + public BeamShearActionResultView(IBeamShearActionResult result) : this (new BeamShearActionResultViewModel(result)) + { + + } + } +} diff --git a/StructureHelper/Windows/BeamShears/BeamShearActionResultViewModel.cs b/StructureHelper/Windows/BeamShears/BeamShearActionResultViewModel.cs new file mode 100644 index 0000000..7b92a47 --- /dev/null +++ b/StructureHelper/Windows/BeamShears/BeamShearActionResultViewModel.cs @@ -0,0 +1,26 @@ +using StructureHelper.Infrastructure; +using StructureHelper.Windows.CalculationWindows.CalculatorsViews; +using StructureHelperLogics.Models.BeamShears; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Windows.BeamShears +{ + public class BeamShearActionResultViewModel : ViewModelBase + { + private IBeamShearActionResult result; + public IBeamShearSectionLogicResult SelectedResult { get; set; } + public List SectionResults => result.SectionResults; + public ValidResultCounterVM ValidResultCounter { get; } + + public BeamShearActionResultViewModel(IBeamShearActionResult result) + { + this.result = result; + ValidResultCounter = new(this.result.SectionResults); + } + + } +} diff --git a/StructureHelper/Windows/BeamShears/BeamShearCalculatorInputDataViewModel.cs b/StructureHelper/Windows/BeamShears/BeamShearCalculatorInputDataViewModel.cs index 91b6673..964c8ae 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearCalculatorInputDataViewModel.cs +++ b/StructureHelper/Windows/BeamShears/BeamShearCalculatorInputDataViewModel.cs @@ -2,6 +2,9 @@ using StructureHelper.Windows.ViewModels; using StructureHelperCommon.Models.Forces; using StructureHelperLogics.Models.BeamShears; +using System; +using System.ComponentModel; +using System.Runtime.CompilerServices; namespace StructureHelper.Windows.BeamShears { @@ -25,13 +28,23 @@ namespace StructureHelper.Windows.BeamShears { ActionSourceTarget.SetTargetItems(inputData.Actions); ActionSourceTarget.SetSourceItems(shearRepository.Actions); - ActionSourceTarget.ItemDataDemplate = SourceTargetFactory.GetSimpleTemplate(); + ActionSourceTarget.ItemDataTemplate = SourceTargetFactory.GetSimpleTemplate(); StirrupSourceTarget.SetTargetItems(inputData.Stirrups); StirrupSourceTarget.SetSourceItems(shearRepository.Stirrups); - StirrupSourceTarget.ItemDataDemplate = SourceTargetFactory.GetSimpleTemplate(); + StirrupSourceTarget.ItemDataTemplate = SourceTargetFactory.GetSimpleTemplate(); SectionSourceTarget.SetTargetItems(inputData.Sections); SectionSourceTarget.SetSourceItems(shearRepository.Sections); - SectionSourceTarget.ItemDataDemplate = SourceTargetFactory.GetSimpleTemplate(); + SectionSourceTarget.ItemDataTemplate = SourceTargetFactory.GetSimpleTemplate(); + } + + internal void Refresh() + { + inputData.Actions.Clear(); + inputData.Actions.AddRange(ActionSourceTarget.GetTargetItems()); + inputData.Stirrups.Clear(); + inputData.Stirrups.AddRange(StirrupSourceTarget.GetTargetItems()); + inputData.Sections.Clear(); + inputData.Sections.AddRange(SectionSourceTarget.GetTargetItems()); } } } diff --git a/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml b/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml index 782b3ec..7d21aff 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml +++ b/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears" d:DataContext="{d:DesignInstance local:BeamShearCalculatorViewModel}" mc:Ignorable="d" - Title="Beam Shear Calculator" Height="300" Width="350" ResizeMode="NoResize" WindowStartupLocation="CenterScreen"> + Title="Beam Shear Calculator" Height="300" Width="350" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" Closing="Window_Closing"> @@ -18,12 +18,14 @@ + + - + diff --git a/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml.cs b/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml.cs index 41a3fe2..34cfe25 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml.cs +++ b/StructureHelper/Windows/BeamShears/BeamShearCalculatorView.xaml.cs @@ -15,5 +15,10 @@ namespace StructureHelper.Windows.BeamShears this.viewModel.ParentWindow = this; this.DataContext = this.viewModel; } + + private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) + { + viewModel.Refresh(); + } } } diff --git a/StructureHelper/Windows/BeamShears/BeamShearCalculatorViewModel.cs b/StructureHelper/Windows/BeamShears/BeamShearCalculatorViewModel.cs index fb4e275..6fec5c8 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearCalculatorViewModel.cs +++ b/StructureHelper/Windows/BeamShears/BeamShearCalculatorViewModel.cs @@ -1,4 +1,5 @@ using StructureHelper.Windows.ViewModels; +using StructureHelperCommon.Models.Calculators; using StructureHelperLogics.Models.BeamShears; namespace StructureHelper.Windows.BeamShears @@ -7,7 +8,7 @@ namespace StructureHelper.Windows.BeamShears { private readonly IBeamShearRepository shearRepository; private readonly IBeamShearCalculator calculator; - + private bool showTraceData; public string Name { @@ -18,6 +19,18 @@ namespace StructureHelper.Windows.BeamShears OnPropertyChanged(nameof(Name)); } } + public bool ShowTraceData + { + get + { + return calculator.ShowTraceData; + } + set + { + calculator.ShowTraceData = value; + OnPropertyChanged(nameof(ShowTraceData)); + } + } public BeamShearCalculatorInputDataViewModel InputDataViewModel { get; } public BeamShearCalculatorViewModel(IBeamShearRepository shearRepository, IBeamShearCalculator calculator) { @@ -25,5 +38,10 @@ namespace StructureHelper.Windows.BeamShears this.calculator = calculator; InputDataViewModel = new(this.shearRepository, this.calculator.InputData); } + + internal void Refresh() + { + InputDataViewModel.Refresh(); + } } } diff --git a/StructureHelper/Windows/BeamShears/BeamShearCalculatorsViewModel.cs b/StructureHelper/Windows/BeamShears/BeamShearCalculatorsViewModel.cs index 1900b10..037d7c9 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearCalculatorsViewModel.cs +++ b/StructureHelper/Windows/BeamShears/BeamShearCalculatorsViewModel.cs @@ -6,6 +6,7 @@ using StructureHelper.Windows.ViewModels.Errors; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Forces.BeamShearActions; using StructureHelperLogics.Models.BeamShears; using System; using System.Windows; @@ -18,6 +19,7 @@ namespace StructureHelper.Windows.BeamShears private object parameter; private readonly IBeamShearRepository shearRepository; private RelayCommand runCommand; + private BeamShearCalculatorUpdateStrategy updateStrategy; public ICommand Run { @@ -69,14 +71,21 @@ namespace StructureHelper.Windows.BeamShears Window window; if (SelectedItem is IBeamShearCalculator beamShearCalculator) { + var tmpCalculator = beamShearCalculator.Clone() as IBeamShearCalculator; var viewModel = new BeamShearCalculatorViewModel(shearRepository, beamShearCalculator); window = new BeamShearCalculatorView(viewModel); + window.ShowDialog(); + if (window.DialogResult != true) + { + updateStrategy ??= new BeamShearCalculatorUpdateStrategy(); + updateStrategy.Update(beamShearCalculator, tmpCalculator); + } + base.EditMethod(parameter); } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem)); } - window.ShowDialog(); } private void RunMethod(object param) { @@ -95,12 +104,18 @@ namespace StructureHelper.Windows.BeamShears if (SelectedItem is IBeamShearCalculator beamShearCalculator) { beamShearCalculator.Run(); + var result = beamShearCalculator.Result as IBeamShearCalculatorResult; + Window window = new BeamShearResultView(result); + window.ShowDialog(); + if (beamShearCalculator.ShowTraceData == true) + { + TraceDocumentService.ShowDocument(SelectedItem.TraceLogger.TraceLoggerEntries); + } } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem)); } - TraceDocumentService.ShowDocument(SelectedItem.TraceLogger.TraceLoggerEntries); } } } diff --git a/StructureHelper/Windows/BeamShears/BeamShearLoadsViewModel.cs b/StructureHelper/Windows/BeamShears/BeamShearLoadsViewModel.cs index 00b9906..fc611a4 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearLoadsViewModel.cs +++ b/StructureHelper/Windows/BeamShears/BeamShearLoadsViewModel.cs @@ -4,13 +4,8 @@ using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces.BeamShearActions; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Forms; namespace StructureHelper.Windows.BeamShears { diff --git a/StructureHelper/Windows/BeamShears/BeamShearResultView.xaml b/StructureHelper/Windows/BeamShears/BeamShearResultView.xaml index cb3a808..13e7dc0 100644 --- a/StructureHelper/Windows/BeamShears/BeamShearResultView.xaml +++ b/StructureHelper/Windows/BeamShears/BeamShearResultView.xaml @@ -7,18 +7,38 @@ xmlns:uc="clr-namespace:StructureHelper.Windows.UserControls" d:DataContext="{d:DesignInstance local:BeamShearResultViewModel}" mc:Ignorable="d" - Title="BeamShearResultView" Height="450" Width="800" MinHeight="400" MinWidth="600" MaxHeight="900" MaxWidth="1200"> + Title="Beam Shear Result" Height="450" Width="800" MinHeight="400" MinWidth="600" MaxHeight="900" MaxWidth="1200" WindowStartupLocation="CenterScreen"> - + + @@ -41,6 +61,8 @@ + +