From 4ec3ef25fb896984c23f378fcae66d75f0fe9845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD=20=D0=98=D0=B2=D0=B0=D1=88=D0=BA?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 28 Jan 2025 14:31:34 +0500 Subject: [PATCH] Add function material interface and button --- .../Infrastructure/Enums/MaterialType.cs | 3 +- .../Windows/MainWindow/CrossSectionView.xaml | 3 + .../Materials/MaterialsViewModel.cs | 7 ++ .../Factories/HeadMaterialFactory.cs | 13 +- .../Models/Materials/FunctionMaterial.cs | 49 ++++++++ .../Materials/HeadMaterialRepository.cs | 4 - .../Models/Materials/IFunctionMaterial.cs | 13 ++ .../Models/Materials/MaterialDC.cd | 114 ++++++++++++++++++ 8 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 StructureHelperLogics/Models/Materials/FunctionMaterial.cs create mode 100644 StructureHelperLogics/Models/Materials/IFunctionMaterial.cs create mode 100644 StructureHelperLogics/Models/Materials/MaterialDC.cd diff --git a/StructureHelper/Infrastructure/Enums/MaterialType.cs b/StructureHelper/Infrastructure/Enums/MaterialType.cs index 19b6550..e799925 100644 --- a/StructureHelper/Infrastructure/Enums/MaterialType.cs +++ b/StructureHelper/Infrastructure/Enums/MaterialType.cs @@ -12,6 +12,7 @@ namespace StructureHelper.Infrastructure.Enums Reinforcement, Elastic, CarbonFiber, - GlassFiber + GlassFiber, + Function, } } diff --git a/StructureHelper/Windows/MainWindow/CrossSectionView.xaml b/StructureHelper/Windows/MainWindow/CrossSectionView.xaml index 8f9e094..949fabb 100644 --- a/StructureHelper/Windows/MainWindow/CrossSectionView.xaml +++ b/StructureHelper/Windows/MainWindow/CrossSectionView.xaml @@ -160,6 +160,9 @@ + diff --git a/StructureHelper/Windows/ViewModels/Materials/MaterialsViewModel.cs b/StructureHelper/Windows/ViewModels/Materials/MaterialsViewModel.cs index 1e4bb33..56a34f4 100644 --- a/StructureHelper/Windows/ViewModels/Materials/MaterialsViewModel.cs +++ b/StructureHelper/Windows/ViewModels/Materials/MaterialsViewModel.cs @@ -41,6 +41,7 @@ namespace StructureHelper.Windows.ViewModels.Materials else if (parameterType == MaterialType.Elastic) { AddElastic(); } else if (parameterType == MaterialType.CarbonFiber) { AddCarbonFiber(); } else if (parameterType == MaterialType.GlassFiber) { AddGlassFiber(); } + else if (parameterType == MaterialType.Function) { AddFunctionMaterial(); } else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $". Expected: {typeof(MaterialType)}, Actual type: {nameof(parameterType)}"); GlobalRepository.Materials.Create(NewItem); base.AddMethod(parameter); @@ -118,6 +119,12 @@ namespace StructureHelper.Windows.ViewModels.Materials material.Name = "New Concrete"; NewItem = material; } + private void AddFunctionMaterial() + { + var material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Function); + material.Name = "New Function Material"; + NewItem = material; + } private void CheckParameters(object parameter) { if (parameter is null) { throw new StructureHelperException(ErrorStrings.ParameterIsNull); } diff --git a/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs b/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs index f64d469..78a289f 100644 --- a/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs +++ b/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs @@ -1,4 +1,5 @@ -using StructureHelper.Models.Materials; +using NLog.MessageTemplates; +using StructureHelper.Models.Materials; using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Settings; @@ -20,7 +21,8 @@ namespace StructureHelperLogics.Models.Materials Reinforecement500, Elastic200, Carbon1400, - Glass1200 + Glass1200, + Function, } public static class HeadMaterialFactory @@ -37,6 +39,7 @@ namespace StructureHelperLogics.Models.Materials if (type == HeadmaterialType.Elastic200) { return GetElastic200(); } if (type == HeadmaterialType.Carbon1400) { return GetCarbon1400(); } if (type == HeadmaterialType.Glass1200) { return GetGlass1200(); } + if (type == HeadmaterialType.Function) { return GetFunction(); } else throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + nameof(type)); } @@ -102,5 +105,11 @@ namespace StructureHelperLogics.Models.Materials material.HelperMaterial = libMat; return material; } + private static IHeadMaterial GetFunction() + { + var material = new HeadMaterial(); + material.HelperMaterial = new + return material; + } } } diff --git a/StructureHelperLogics/Models/Materials/FunctionMaterial.cs b/StructureHelperLogics/Models/Materials/FunctionMaterial.cs new file mode 100644 index 0000000..5270363 --- /dev/null +++ b/StructureHelperLogics/Models/Materials/FunctionMaterial.cs @@ -0,0 +1,49 @@ +using LoaderCalculator.Data.Materials; +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models.Materials.Libraries; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.Materials +{ + public class FunctionMaterial + { + private IElasticMaterialLogic elasticMaterialLogic => new ElasticMaterialLogic(); + public double Modulus { get; set; } + public double CompressiveStrength { get; set; } + public double TensileStrength { get; set; } + public List SafetyFactors { get; } = new(); + + public Guid Id { get; } + + public FunctionMaterial(Guid id) + { + Id = id; + } + public FunctionMaterial() : this(Guid.NewGuid()) + { + + } + public IMaterial GetLoaderMaterial(LimitStates limitState, CalcTerms calcTerm) + { + var material = elasticMaterialLogic.GetLoaderMaterial(this, limitState, calcTerm); + return material; + } + + public object Clone() + { + var newItem = new ElasticMaterial(); + var updateStrategy = new ElasticUpdateStrategy(); + updateStrategy.Update(newItem, this); + return newItem; + } + + public IMaterial GetCrackedLoaderMaterial(LimitStates limitState, CalcTerms calcTerm) + { + return GetLoaderMaterial(limitState, calcTerm); + } + } +} diff --git a/StructureHelperLogics/Models/Materials/HeadMaterialRepository.cs b/StructureHelperLogics/Models/Materials/HeadMaterialRepository.cs index 3afd932..e9c3885 100644 --- a/StructureHelperLogics/Models/Materials/HeadMaterialRepository.cs +++ b/StructureHelperLogics/Models/Materials/HeadMaterialRepository.cs @@ -10,20 +10,16 @@ namespace StructureHelperLogics.Models.Materials public class HeadMaterialRepository : IHeadMaterialRepository { public object Parent { get; private set; } - public List HeadMaterials { get; set; } - public HeadMaterialRepository() { HeadMaterials = new List(); } - public HeadMaterialRepository(object parent) { Parent = parent; HeadMaterials = new List(); } - public void RegisterParent(object obj) { Parent = obj; diff --git a/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs b/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs new file mode 100644 index 0000000..cdd4287 --- /dev/null +++ b/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.Models.Materials +{ + internal interface IFunctionMaterial : IHelperMaterial + { + + } +} diff --git a/StructureHelperLogics/Models/Materials/MaterialDC.cd b/StructureHelperLogics/Models/Materials/MaterialDC.cd new file mode 100644 index 0000000..34c9afd --- /dev/null +++ b/StructureHelperLogics/Models/Materials/MaterialDC.cd @@ -0,0 +1,114 @@ + + + + + + BAACAgAQAQEBAAADEQAiBQAAAgQAAgAAAAAACAAAAhA= + Models\Materials\ConcreteLibMaterial.cs + + + + + + + AAACAAAQgAEBAAAAAQAAAAAQAAAAAAAAAAAAAAAAABA= + Models\Materials\ElasticMaterial.cs + + + + + + + AAAAAAAAAAAAEAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\HeadMaterialRepository.cs + + + + + + + AAACAIBQCAMBAQIAAAAABAQAAAAAAgAEAgAEAAAAAhA= + Models\Materials\LibMaterial.cs + + + + + + + AAACAIAUAAABAAAAEAAAAAQAgAAAAACAAAAAgAAAABA= + Models\Materials\HeadMaterial.cs + + + + + + + AAAAAAAAAAAAAAAAAQAAAQAAAgAAAAAAAAAAAAAAAAA= + Models\Materials\IConcreteLibMaterial.cs + + + + + + AAAAAAAAgAEAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA= + Models\Materials\IElasticMaterial.cs + + + + + + AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\IHasHeadMaterials.cs + + + + + + AAAAAAAAAAAAEAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\IHeadMaterialRepository.cs + + + + + + AAAAAAAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\IHelperMaterial.cs + + + + + + AAAAAAAAAAEAAAAAAAAABAAAAAAAAgAAAAAAAAAAAgA= + Models\Materials\ILibMaterial.cs + + + + + + AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\IMaterialOptionLogic.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\IReinforcementLibMaterial.cs + + + + + + AAAAAAAUAAABAAAAAAAAAAQAAAAAAAAAAAAAgAAAAAA= + Models\Materials\IHeadMaterial.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Models\Materials\IFunctionMaterial.cs + + + + \ No newline at end of file