From 91ccebf14789c3131aab8f44eb58858453ff7c3e Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sat, 8 Feb 2025 22:13:50 +0500 Subject: [PATCH] Add beam shear classes --- .../Infrastructure/Enums/AnalysisTypes.cs | 14 + .../UI/Resources/ButtonStyles.xaml | 766 +++++++++--------- .../MainWindow/Analyses/AnalysesLogic.cs | 23 +- .../MainWindow/AnalysesManagerView.xaml | 13 +- .../Materials/HeadMaterialView.xaml.cs | 91 ++- .../Materials/HeadMaterialViewModel.cs | 8 +- .../Materials/HelperMaterialViewModel.cs | 2 +- .../Interfaces/IEffectiveDepth.cs | 13 + .../Interfaces/IHasBeamShearActions.cs | 14 + .../Models/Forces/IAction.cs | 4 - .../Models/Forces/IBeamShearAction.cs | 13 + .../Models/Analyses/BeamShearAnalysis.cs | 34 + .../BeamShearAnalysisUpdateStrategy.cs | 59 ++ .../Analyses/CrossSectionNdmAnalysis.cs | 2 +- .../Models/Analyses/IBeamShearAnalysis.cs | 13 + .../BeamSheaStrengthByStirrupDensity.cs | 59 ++ .../Models/BeamShears/BeamShear.cs | 24 + .../Models/BeamShears/BeamShearRepository.cs | 30 + .../BeamShears/BeamShearUpdateStrategy.cs | 17 + .../Models/BeamShears/IBeamShear.cs | 14 + .../Models/BeamShears/IBeamShearRepository.cs | 16 + .../BeamShears/IBeamShearStrenghLogic.cs | 21 + .../Models/BeamShears/IInclinedSection.cs | 15 + .../Models/BeamShears/IStirrup.cs | 17 + .../Models/BeamShears/IStirrupByDensity.cs | 19 + .../BeamShears/IStirrupByDirectValue.cs | 19 + .../Models/BeamShears/IStirrupByRebar.cs | 17 + .../BeamShears/IStirrupEffectiveness.cs | 15 + .../Models/BeamShears/IStirrupGroup.cs | 13 + .../Models/BeamShears/InclinedSection.cs | 15 + .../Models/BeamShears/StirrupByDensity.cs | 25 + .../Models/BeamShears/StirrupByDirectValue.cs | 20 + .../Models/BeamShears/StirrupGroup.cs | 26 + 33 files changed, 1002 insertions(+), 449 deletions(-) create mode 100644 StructureHelper/Infrastructure/Enums/AnalysisTypes.cs create mode 100644 StructureHelperCommon/Infrastructures/Interfaces/IEffectiveDepth.cs create mode 100644 StructureHelperCommon/Infrastructures/Interfaces/IHasBeamShearActions.cs create mode 100644 StructureHelperCommon/Models/Forces/IBeamShearAction.cs create mode 100644 StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs create mode 100644 StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs create mode 100644 StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs create mode 100644 StructureHelperLogics/Models/BeamShears/BeamSheaStrengthByStirrupDensity.cs create mode 100644 StructureHelperLogics/Models/BeamShears/BeamShear.cs create mode 100644 StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs create mode 100644 StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IBeamShear.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IBeamShearStrenghLogic.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IInclinedSection.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IStirrup.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IStirrupByDensity.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IStirrupByDirectValue.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IStirrupByRebar.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IStirrupEffectiveness.cs create mode 100644 StructureHelperLogics/Models/BeamShears/IStirrupGroup.cs create mode 100644 StructureHelperLogics/Models/BeamShears/InclinedSection.cs create mode 100644 StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs create mode 100644 StructureHelperLogics/Models/BeamShears/StirrupByDirectValue.cs create mode 100644 StructureHelperLogics/Models/BeamShears/StirrupGroup.cs diff --git a/StructureHelper/Infrastructure/Enums/AnalysisTypes.cs b/StructureHelper/Infrastructure/Enums/AnalysisTypes.cs new file mode 100644 index 0000000..b60316b --- /dev/null +++ b/StructureHelper/Infrastructure/Enums/AnalysisTypes.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Infrastructure.Enums +{ + public enum AnalysisTypes + { + CrossSection, + BeamShear + } +} diff --git a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml index 847c8a1..0538cde 100644 --- a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml @@ -155,13 +155,19 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs b/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs index d86f24c..8471061 100644 --- a/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs +++ b/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs @@ -1,10 +1,12 @@ using StructureHelper.Infrastructure; +using StructureHelper.Infrastructure.Enums; using StructureHelper.Windows.MainWindow.Analyses; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Infrastructures.Settings; using StructureHelperCommon.Models.Analyses; using StructureHelperLogic.Models.Analyses; +using StructureHelperLogics.Models.Analyses; using StructureHelperLogics.Models.CrossSections; using System; using System.Collections.Generic; @@ -36,7 +38,14 @@ namespace StructureHelper.Windows.MainWindow { return addAnalyisCommand ??= new RelayCommand(obj => { - AddCrossSectionNdmAnalysis(); + if (obj is AnalysisTypes.CrossSection) + { + AddCrossSectionNdmAnalysis(); + } + else if (obj is AnalysisTypes.BeamShear) + { + AddBeamShearAnalysis(); + } Refresh(); }); } @@ -181,7 +190,7 @@ namespace StructureHelper.Windows.MainWindow } private void AddCrossSectionNdmAnalysis() { - var analysis = new CrossSectionNdmAnalysis(); + CrossSectionNdmAnalysis analysis = new(); analysis.Name = "New NDM Analysis"; analysis.Tags = "#New group"; var visualAnalysis = new VisualAnalysis(analysis); @@ -189,6 +198,16 @@ namespace StructureHelper.Windows.MainWindow ProgramSetting.SetCurrentProjectToNotActual(); } + private void AddBeamShearAnalysis() + { + BeamShearAnalysis analysis = new(Guid.NewGuid()); + analysis.Name = "New Beam Shear Analysis"; + analysis.Tags = "#New group"; + VisualAnalysis visualAnalysis = new(analysis); + ProgramSetting.CurrentProject.VisualAnalyses.Add(visualAnalysis); + ProgramSetting.SetCurrentProjectToNotActual(); + } + private void ActionToRun() { if (SelectedAnalysis is null) { return; } diff --git a/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml b/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml index 0386eab..bac279c 100644 --- a/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml +++ b/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml @@ -4,6 +4,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:StructureHelper.Windows.MainWindow" + xmlns:enums="clr-namespace:StructureHelper.Infrastructure.Enums" xmlns:uc="clr-namespace:StructureHelper.Windows.UserControls" mc:Ignorable="d" d:DataContext="{d:DesignInstance local:AnalysesManagerViewModel}" @@ -51,7 +52,7 @@ - + diff --git a/StructureHelper/Windows/MainWindow/Materials/HeadMaterialView.xaml.cs b/StructureHelper/Windows/MainWindow/Materials/HeadMaterialView.xaml.cs index f4f8c65..b7047d0 100644 --- a/StructureHelper/Windows/MainWindow/Materials/HeadMaterialView.xaml.cs +++ b/StructureHelper/Windows/MainWindow/Materials/HeadMaterialView.xaml.cs @@ -24,63 +24,60 @@ namespace StructureHelper.Windows.MainWindow.Materials public partial class HeadMaterialView : Window { IHeadMaterial headMaterial; - HeadMaterialViewModel vm; + HeadMaterialViewModel viewModel; + Dictionary bindings = new(); + IHelperMaterial helperMaterial; + string templateName; + + public HeadMaterialView(HeadMaterialViewModel viewModel) + { + this.viewModel = viewModel; + } + public HeadMaterialView(IHeadMaterial headMaterial) { InitializeComponent(); this.headMaterial = headMaterial; - vm = new HeadMaterialViewModel(this.headMaterial) + helperMaterial = this.headMaterial.HelperMaterial; + viewModel = new HeadMaterialViewModel(this.headMaterial) { ParentWindow = this }; - DataContext = vm; + DataContext = viewModel; AddDataTemplates(); } private void AddDataTemplates() { StpMaterialProperties.Children.Clear(); - var bindings = new Dictionary(); - var helperMaterial = headMaterial.HelperMaterial; - string templateName; + GetByndingsByMaterial(); + SetContentControls(); + } + + private void GetByndingsByMaterial() + { if (helperMaterial is IConcreteLibMaterial) { - templateName = "ConcreteMaterial"; - var binding = new Binding(); - binding.Source = vm.HelperMaterialViewModel; - bindings.Add(templateName, binding); + SetConcreteLibraryMaterial(); } else if (helperMaterial is IReinforcementLibMaterial) { - templateName = "ReinforcementMaterial"; - var binding = new Binding(); - binding.Source = vm.HelperMaterialViewModel; - bindings.Add(templateName, binding); + SetReinForcementLibraryMaterial(); } else if (helperMaterial is IElasticMaterial) { - templateName = "ElasticMaterial"; - var binding = new Binding(); - binding.Source = vm.HelperMaterialViewModel; - bindings.Add(templateName, binding); - if (helperMaterial is IFRMaterial) - { - templateName = "CarbonProperties"; - var carbonBinding = new Binding(); - carbonBinding.Source = vm.HelperMaterialViewModel as FRViewModel; - bindings.Add(templateName, carbonBinding); - } - templateName = "DirectSafetyFactors"; - var frBinding = new Binding(); - frBinding.Source = (vm.HelperMaterialViewModel as ElasticViewModel).SafetyFactors; - bindings.Add(templateName, frBinding); + SetElasticMaterial(); } else { - throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(IHelperMaterial)}, but was: {helperMaterial.GetType()}"); + string errorString = ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(IHelperMaterial)}, but was: {helperMaterial.GetType()}"; + throw new StructureHelperException(errorString); } - + } + + private void SetContentControls() + { foreach (var item in bindings) { ContentControl contentControl = new ContentControl(); @@ -89,5 +86,37 @@ namespace StructureHelper.Windows.MainWindow.Materials StpMaterialProperties.Children.Add(contentControl); } } + private void SetElasticMaterial() + { + templateName = "ElasticMaterial"; + var binding = new Binding(); + binding.Source = viewModel.HelperMaterialViewModel; + bindings.Add(templateName, binding); + if (helperMaterial is IFRMaterial) + { + templateName = "CarbonProperties"; + var carbonBinding = new Binding(); + carbonBinding.Source = viewModel.HelperMaterialViewModel as FRViewModel; + bindings.Add(templateName, carbonBinding); + } + templateName = "DirectSafetyFactors"; + var frBinding = new Binding(); + frBinding.Source = (viewModel.HelperMaterialViewModel as ElasticViewModel).SafetyFactors; + bindings.Add(templateName, frBinding); + } + private void SetReinForcementLibraryMaterial() + { + templateName = "ReinforcementMaterial"; + var binding = new Binding(); + binding.Source = viewModel.HelperMaterialViewModel; + bindings.Add(templateName, binding); + } + private void SetConcreteLibraryMaterial() + { + templateName = "ConcreteMaterial"; + var binding = new Binding(); + binding.Source = viewModel.HelperMaterialViewModel; + bindings.Add(templateName, binding); + } } } diff --git a/StructureHelper/Windows/ViewModels/Materials/HeadMaterialViewModel.cs b/StructureHelper/Windows/ViewModels/Materials/HeadMaterialViewModel.cs index bb341af..d02ebd8 100644 --- a/StructureHelper/Windows/ViewModels/Materials/HeadMaterialViewModel.cs +++ b/StructureHelper/Windows/ViewModels/Materials/HeadMaterialViewModel.cs @@ -2,21 +2,15 @@ using StructureHelper.Models.Materials; using StructureHelper.Windows.AddMaterialWindow; using StructureHelperCommon.Infrastructures.Exceptions; -using StructureHelperCommon.Models.Materials; using StructureHelperCommon.Models.Materials.Libraries; using StructureHelperCommon.Services.ColorServices; using StructureHelperLogics.Models.Materials; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Input; using System.Windows.Media; namespace StructureHelper.Windows.ViewModels.Materials { - internal class HeadMaterialViewModel : OkCancelViewModelBase + public class HeadMaterialViewModel : OkCancelViewModelBase { IHeadMaterial headMaterial; HelperMaterialViewModel helperMaterialViewModel; diff --git a/StructureHelper/Windows/ViewModels/Materials/HelperMaterialViewModel.cs b/StructureHelper/Windows/ViewModels/Materials/HelperMaterialViewModel.cs index 1270346..cb1f9c6 100644 --- a/StructureHelper/Windows/ViewModels/Materials/HelperMaterialViewModel.cs +++ b/StructureHelper/Windows/ViewModels/Materials/HelperMaterialViewModel.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace StructureHelper.Windows.ViewModels.Materials { - internal abstract class HelperMaterialViewModel : ViewModelBase + public abstract class HelperMaterialViewModel : ViewModelBase { } } diff --git a/StructureHelperCommon/Infrastructures/Interfaces/IEffectiveDepth.cs b/StructureHelperCommon/Infrastructures/Interfaces/IEffectiveDepth.cs new file mode 100644 index 0000000..7179500 --- /dev/null +++ b/StructureHelperCommon/Infrastructures/Interfaces/IEffectiveDepth.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Infrastructures.Interfaces +{ + public interface IEffectiveDepth + { + double EffectiveDepth { get; set; } + } +} diff --git a/StructureHelperCommon/Infrastructures/Interfaces/IHasBeamShearActions.cs b/StructureHelperCommon/Infrastructures/Interfaces/IHasBeamShearActions.cs new file mode 100644 index 0000000..fee6be5 --- /dev/null +++ b/StructureHelperCommon/Infrastructures/Interfaces/IHasBeamShearActions.cs @@ -0,0 +1,14 @@ +using StructureHelperCommon.Models.Forces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Infrastructures.Interfaces +{ + public interface IHasBeamShearActions + { + List BeamShearActions { get; } + } +} diff --git a/StructureHelperCommon/Models/Forces/IAction.cs b/StructureHelperCommon/Models/Forces/IAction.cs index ace6902..1d50945 100644 --- a/StructureHelperCommon/Models/Forces/IAction.cs +++ b/StructureHelperCommon/Models/Forces/IAction.cs @@ -1,9 +1,5 @@ using StructureHelperCommon.Infrastructures.Interfaces; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelperCommon.Models.Forces { diff --git a/StructureHelperCommon/Models/Forces/IBeamShearAction.cs b/StructureHelperCommon/Models/Forces/IBeamShearAction.cs new file mode 100644 index 0000000..3ad1127 --- /dev/null +++ b/StructureHelperCommon/Models/Forces/IBeamShearAction.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Forces +{ + public interface IBeamShearAction : IAction + { + + } +} diff --git a/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs b/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs new file mode 100644 index 0000000..b269b0a --- /dev/null +++ b/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs @@ -0,0 +1,34 @@ +using StructureHelperCommon.Models.Analyses; +using StructureHelperLogics.Models.BeamShears; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; + +namespace StructureHelperLogics.Models.Analyses +{ + public class BeamShearAnalysis : IBeamShearAnalysis + { + + public Guid Id { get; } + public string Name { get; set; } = string.Empty; + public string Tags { get; set; } = string.Empty; + public string Comment { get; set; } = string.Empty; + public Color Color { get; set; } = Color.FromRgb(128, 0, 0); + public IVersionProcessor VersionProcessor { get; set; } = new VersionProcessor(); + public BeamShearAnalysis(Guid id) + { + Id = id; + BeamShear beamShear = new(Guid.NewGuid()); + VersionProcessor.AddVersion(beamShear); + } + + + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs b/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs new file mode 100644 index 0000000..c4e2096 --- /dev/null +++ b/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs @@ -0,0 +1,59 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Analyses; +using StructureHelperCommon.Services; +using StructureHelperLogics.Models.BeamShears; +using StructureHelperLogics.Models.CrossSections; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.Analyses +{ + public class BeamShearAnalysisUpdateStrategy : IUpdateStrategy + { + private IUpdateStrategy analysisUpdateStrategy; + private IUpdateStrategy beamShearUpdateStrategy; + private IUpdateStrategy dateUpdateStrategy; + + public void Update(IBeamShearAnalysis targetObject, IBeamShearAnalysis sourceObject) + { + CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; }; + InitialzeStrategies(); + analysisUpdateStrategy.Update(targetObject, sourceObject); + targetObject.VersionProcessor.Versions.Clear(); + foreach (var version in sourceObject.VersionProcessor.Versions) + { + if (version is IBeamShear beamShear) + { + updateVersion(targetObject, version, beamShear); + } + else + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(version.AnalysisVersion)); + } + } + } + + private void updateVersion(IBeamShearAnalysis targetObject, IDateVersion version, IBeamShear beamShear) + { + DateVersion newVersion = new(); + dateUpdateStrategy.Update(newVersion, version); + BeamShear newBeamShear = new(Guid.NewGuid()); + beamShearUpdateStrategy.Update(newBeamShear, beamShear); + newVersion.AnalysisVersion = newBeamShear; + targetObject.VersionProcessor.Versions.Add(newVersion); + } + + private void InitialzeStrategies() + { + analysisUpdateStrategy ??= new AnalysisUpdateStrategy(); + beamShearUpdateStrategy ??= new BeamShearUpdateStrategy(); + dateUpdateStrategy ??= new DateVersionUpdateStrategy(); + } + } +} diff --git a/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysis.cs b/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysis.cs index 5f1204c..fcf36d2 100644 --- a/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysis.cs +++ b/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysis.cs @@ -30,7 +30,7 @@ namespace StructureHelperLogic.Models.Analyses public CrossSectionNdmAnalysis() : this(Guid.NewGuid(), new VersionProcessor()) { - CrossSection crossSection = new CrossSection(); + CrossSection crossSection = new(); VersionProcessor.AddVersion(crossSection); } diff --git a/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs b/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs new file mode 100644 index 0000000..939f5d5 --- /dev/null +++ b/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs @@ -0,0 +1,13 @@ +using StructureHelperCommon.Models.Analyses; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.Analyses +{ + public interface IBeamShearAnalysis : IAnalysis + { + } +} diff --git a/StructureHelperLogics/Models/BeamShears/BeamSheaStrengthByStirrupDensity.cs b/StructureHelperLogics/Models/BeamShears/BeamSheaStrengthByStirrupDensity.cs new file mode 100644 index 0000000..9f1aeb8 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/BeamSheaStrengthByStirrupDensity.cs @@ -0,0 +1,59 @@ +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Loggers; +using StructureHelperCommon.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia +//All rights reserved. + +namespace StructureHelperLogics.Models.BeamShears +{ + public class BeamSheaStrengthByStirrupDensity : IBeamShearStrenghLogic + { + private readonly IStirrupEffectiveness stirrupEffectiveness; + private readonly IStirrupByDensity stirrupByDensity; + private readonly IInclinedSection inclinedSection; + + + public BeamSheaStrengthByStirrupDensity( + IStirrupEffectiveness stirrupEffectiveness, + IStirrupByDensity stirrupByDensity, + IInclinedSection inclinedSection, + IShiftTraceLogger? traceLogger) + { + this.stirrupEffectiveness = stirrupEffectiveness; + this.stirrupByDensity = stirrupByDensity; + this.inclinedSection = inclinedSection; + TraceLogger = traceLogger; + } + + public IShiftTraceLogger? TraceLogger { get; set; } + + public double GetShearStrength() + { + Check(); + TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service); + TraceLogger?.AddMessage("Calculation has been started", TraceLogStatuses.Debug); + double crackLength = inclinedSection.EndCoord - inclinedSection.StartCoord; + TraceLogger?.AddMessage($"Length of crack = {inclinedSection.EndCoord} - {inclinedSection.StartCoord} = {crackLength}(m)"); + double maxCrackLength = stirrupEffectiveness.MaxCrackLengthFactor * inclinedSection.EffectiveDepth; + TraceLogger?.AddMessage($"Max length of crack = {stirrupEffectiveness.MaxCrackLengthFactor} * {inclinedSection.EffectiveDepth} = {maxCrackLength}(m)"); + double finalCrackLength = Math.Min(crackLength, maxCrackLength); + TraceLogger?.AddMessage($"Length of crack = Min({crackLength}, {maxCrackLength}) = {finalCrackLength}(m)"); + double strength = stirrupEffectiveness.StirrupShapeFactor * stirrupEffectiveness.StirrupPlacementFactor * finalCrackLength * stirrupByDensity.StirrupDensity; + TraceLogger?.AddMessage($"Bearing capacity of stirrups V = {stirrupEffectiveness.StirrupShapeFactor} * {stirrupEffectiveness.StirrupPlacementFactor} * {finalCrackLength} * {stirrupByDensity.StirrupDensity} = {strength}(N)"); + TraceLogger?.AddMessage("Calculation has been finished successfully", TraceLogStatuses.Debug); + return strength; + } + + private void Check() + { + CheckObject.IsNull(stirrupByDensity); + CheckObject.IsNull(inclinedSection); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/BeamShear.cs b/StructureHelperLogics/Models/BeamShears/BeamShear.cs new file mode 100644 index 0000000..31c0355 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/BeamShear.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class BeamShear : IBeamShear + { + + public Guid Id { get; } + public IBeamShearRepository Repository { get; } = new BeamShearRepository(Guid.NewGuid()); + public BeamShear(Guid id) + { + Id = id; + } + + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs b/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs new file mode 100644 index 0000000..f697788 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs @@ -0,0 +1,30 @@ +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Forces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class BeamShearRepository : IBeamShearRepository + { + + public Guid Id { get; } + + public List BeamShearActions { get; } + + public List Calculators { get; } + + public BeamShearRepository(Guid id) + { + Id = id; + } + + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs new file mode 100644 index 0000000..8d4bc83 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs @@ -0,0 +1,17 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class BeamShearUpdateStrategy : IUpdateStrategy + { + public void Update(IBeamShear targetObject, IBeamShear sourceObject) + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShear.cs b/StructureHelperLogics/Models/BeamShears/IBeamShear.cs new file mode 100644 index 0000000..39c52c4 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IBeamShear.cs @@ -0,0 +1,14 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public interface IBeamShear : ISaveable, ICloneable + { + IBeamShearRepository Repository { get; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs b/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs new file mode 100644 index 0000000..793abf6 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs @@ -0,0 +1,16 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Forces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public interface IBeamShearRepository : ISaveable, IHasBeamShearActions, IHasCalculators, ICloneable + { + + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShearStrenghLogic.cs b/StructureHelperLogics/Models/BeamShears/IBeamShearStrenghLogic.cs new file mode 100644 index 0000000..ab4ebe2 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IBeamShearStrenghLogic.cs @@ -0,0 +1,21 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + /// + /// Implement logic for calculation of bearing capacity of inclined section for shear + /// + public interface IBeamShearStrenghLogic : ILogic + { + /// + /// Returns Bearing capacity of inclined section for shear + /// + /// Bearing capacity of inclined section for shear, N + double GetShearStrength(); + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IInclinedSection.cs b/StructureHelperLogics/Models/BeamShears/IInclinedSection.cs new file mode 100644 index 0000000..d32c24d --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IInclinedSection.cs @@ -0,0 +1,15 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public interface IInclinedSection : IEffectiveDepth + { + double StartCoord { get; set; } + double EndCoord { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IStirrup.cs b/StructureHelperLogics/Models/BeamShears/IStirrup.cs new file mode 100644 index 0000000..791b996 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IStirrup.cs @@ -0,0 +1,17 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + /// + /// Implement properties of stirrups + /// + public interface IStirrup : ISaveable, ICloneable + { + string Name { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IStirrupByDensity.cs b/StructureHelperLogics/Models/BeamShears/IStirrupByDensity.cs new file mode 100644 index 0000000..c562af2 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IStirrupByDensity.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + /// + /// Implement logic for calculation of bearing capacity of stirrups by value of their density + /// + public interface IStirrupByDensity : IStirrup + { + /// + /// Direct density of stirrups, N/m + /// + double StirrupDensity { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IStirrupByDirectValue.cs b/StructureHelperLogics/Models/BeamShears/IStirrupByDirectValue.cs new file mode 100644 index 0000000..7b735f1 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IStirrupByDirectValue.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + /// + /// Implement logic for stirrup bearing capacity which does not depend on specific inclined section + /// + public interface IStirrupByDirectValue : IStirrup + { + /// + /// Direct value of bearing capacity which is applied for any inclined section, N + /// + double BearingCapacityValue { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IStirrupByRebar.cs b/StructureHelperLogics/Models/BeamShears/IStirrupByRebar.cs new file mode 100644 index 0000000..36e62b7 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IStirrupByRebar.cs @@ -0,0 +1,17 @@ +using StructureHelperLogics.Models.Materials; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public interface IStirrupByRebar : IStirrup + { + IReinforcementLibMaterial ReinforcementMaterial { get; set; } + double LegCount { get; set; } + double Diameter { get; set; } + double Step { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IStirrupEffectiveness.cs b/StructureHelperLogics/Models/BeamShears/IStirrupEffectiveness.cs new file mode 100644 index 0000000..9c9c74b --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IStirrupEffectiveness.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public interface IStirrupEffectiveness + { + double MaxCrackLengthFactor { get; set; } + double StirrupShapeFactor { get; set; } + double StirrupPlacementFactor { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/IStirrupGroup.cs b/StructureHelperLogics/Models/BeamShears/IStirrupGroup.cs new file mode 100644 index 0000000..8510954 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/IStirrupGroup.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public interface IStirrupGroup : IStirrup + { + List Stirrups { get; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/InclinedSection.cs b/StructureHelperLogics/Models/BeamShears/InclinedSection.cs new file mode 100644 index 0000000..0530bc2 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/InclinedSection.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class InclinedSection : IInclinedSection + { + public double StartCoord { get; set; } + public double EndCoord { get; set; } + public double EffectiveDepth { get; set; } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs b/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs new file mode 100644 index 0000000..8889bce --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class StirrupByDensity : IStirrupByDensity + { + public Guid Id { get; } + public string Name { get; set; } = string.Empty; + public double StirrupDensity { get; set; } + + public StirrupByDensity(Guid id) + { + Id = id; + } + + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/StirrupByDirectValue.cs b/StructureHelperLogics/Models/BeamShears/StirrupByDirectValue.cs new file mode 100644 index 0000000..9ff836a --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/StirrupByDirectValue.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class StirrupByDirectValue : IStirrupByDirectValue + { + public Guid Id { get; } + public string Name { get; set; } + public double BearingCapacityValue { get; set; } + + public object Clone() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/StirrupGroup.cs b/StructureHelperLogics/Models/BeamShears/StirrupGroup.cs new file mode 100644 index 0000000..325b8b5 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/StirrupGroup.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class StirrupGroup : IStirrupGroup + { + public Guid Id { get; } + public string Name { get; set; } + public List Stirrups { get; } = new(); + + public double GetShearBearingCapacity(IInclinedSection inclinedSection) + { + throw new NotImplementedException(); + } + + public object Clone() + { + throw new NotImplementedException(); + } + + } +}