From 68a1e62c18be8253b3fc282f814d00ab860414de 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: Sat, 15 Feb 2025 19:20:52 +0500 Subject: [PATCH] Impliment IOneVaribleFunction to delegate --- .../Windows/Graphs/MaterialDiagramViewModel.cs | 3 ++- .../Materials/Factories/HeadMaterialFactory.cs | 2 +- .../Models/Materials/FunctionMaterial.cs | 8 ++++---- .../Models/Materials/IFunctionMaterial.cs | 10 ++++++++-- .../Materials/Logics/FunctionMaterialLogic.cs | 13 +++++-------- .../Models/Materials/MaterialDC.cd | 8 ++++---- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/StructureHelper/Windows/Graphs/MaterialDiagramViewModel.cs b/StructureHelper/Windows/Graphs/MaterialDiagramViewModel.cs index 085a518..47d295d 100644 --- a/StructureHelper/Windows/Graphs/MaterialDiagramViewModel.cs +++ b/StructureHelper/Windows/Graphs/MaterialDiagramViewModel.cs @@ -7,6 +7,7 @@ using StructureHelper.Windows.ViewModels; using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Settings; using StructureHelperCommon.Services.ColorServices; +using StructureHelperLogics.Models.Materials; using System; using System.Collections.Generic; using System.Linq; @@ -174,7 +175,7 @@ namespace StructureHelper.Windows.Graphs for (double s = minValue; s < maxValue; s += step) { double strain = s * factor; - double diagramValue = loaderMaterial.Diagram.Invoke(loaderMaterial.DiagramParameters, strain) * factor; + double diagramValue = loaderMaterial.Diagram.Invoke(loaderMaterial.DiagramParameters, strain) * factor; //!!!!!!!!!!!!!!!!!!!! StressEntity stressEntity = new() { LimitState = limitState, diff --git a/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs b/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs index 0066434..80acd9d 100644 --- a/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs +++ b/StructureHelperLogics/Models/Materials/Factories/HeadMaterialFactory.cs @@ -108,7 +108,7 @@ namespace StructureHelperLogics.Models.Materials private static IHeadMaterial GetFunction() { var material = new HeadMaterial(); - material.HelperMaterial = new ReinforcementLibMaterial(); + material.HelperMaterial = new FunctionMaterial() { Modulus = 2e11d, CompressiveStrength = 4e8d, TensileStrength = 4e8d }; return material; } } diff --git a/StructureHelperLogics/Models/Materials/FunctionMaterial.cs b/StructureHelperLogics/Models/Materials/FunctionMaterial.cs index 1e7f3e7..d9c3acb 100644 --- a/StructureHelperLogics/Models/Materials/FunctionMaterial.cs +++ b/StructureHelperLogics/Models/Materials/FunctionMaterial.cs @@ -1,5 +1,6 @@ using LoaderCalculator.Data.Materials; using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Materials.Libraries; using StructureHelperLogics.Models.Materials.Logics; using System; @@ -14,9 +15,10 @@ namespace StructureHelperLogics.Models.Materials { private IFunctionMaterialLogic functionMaterialLogic => new FunctionMaterialLogic(); public double Modulus { get; set; } - public double CompressiveStrength { get; set; } - public double TensileStrength { get; set; } + public double CompressiveStrength { get; set; } + public double TensileStrength { get; set; } public List SafetyFactors { get; } = new(); + public IOneVariableFunction Function { get; set; } public Guid Id { get; } @@ -33,7 +35,6 @@ namespace StructureHelperLogics.Models.Materials var material = functionMaterialLogic.GetLoaderMaterial(this, limitState, calcTerm); return material; } - public object Clone() { var newItem = new FunctionMaterial(); @@ -41,7 +42,6 @@ namespace StructureHelperLogics.Models.Materials updateStrategy.Update(newItem, this); return newItem; } - public IMaterial GetCrackedLoaderMaterial(LimitStates limitState, CalcTerms calcTerm) { return GetLoaderMaterial(limitState, calcTerm); diff --git a/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs b/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs index cdd4287..d220bbe 100644 --- a/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs +++ b/StructureHelperLogics/Models/Materials/IFunctionMaterial.cs @@ -1,4 +1,6 @@ -using System; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Materials.Libraries; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,6 +10,10 @@ namespace StructureHelperLogics.Models.Materials { internal interface IFunctionMaterial : IHelperMaterial { - + double Modulus { get; set; } + double CompressiveStrength { get; set; } + double TensileStrength { get; set; } + List SafetyFactors { get; } + public IOneVariableFunction Function { get; set; } } } diff --git a/StructureHelperLogics/Models/Materials/Logics/FunctionMaterialLogic.cs b/StructureHelperLogics/Models/Materials/Logics/FunctionMaterialLogic.cs index 25031bc..a5a32c0 100644 --- a/StructureHelperLogics/Models/Materials/Logics/FunctionMaterialLogic.cs +++ b/StructureHelperLogics/Models/Materials/Logics/FunctionMaterialLogic.cs @@ -12,12 +12,14 @@ namespace StructureHelperLogics.Models.Materials.Logics internal class FunctionMaterialLogic : IFunctionMaterialLogic { private List parameters; + private IFunctionMaterial functionMaterial; public IMaterial GetLoaderMaterial(IFunctionMaterial functionMaterial, LimitStates limitState, CalcTerms calcTerm, double factor = 1d) { IMaterial material = new Material(); - /*material.InitModulus = functionMaterial.Modulus; + material.InitModulus = functionMaterial.Modulus; IFactorLogic factorLogic = new FactorLogic(functionMaterial.SafetyFactors); var factors = factorLogic.GetTotalFactor(limitState, calcTerm); + this.functionMaterial = functionMaterial; parameters = new List() { functionMaterial.Modulus, @@ -25,17 +27,12 @@ namespace StructureHelperLogics.Models.Materials.Logics functionMaterial.TensileStrength * factors.Tensile * factor }; material.DiagramParameters = parameters; - material.Diagram = GetStressByStrain;*/ + material.Diagram = GetStressByStrain; return material; } private double GetStressByStrain(IEnumerable parameters1, double strain) { - double modulus = parameters.First(); - double stress = modulus * strain; - double compressiveStrength = (-1d) * parameters.ElementAt(1); - double tensileStrength = parameters.ElementAt(2); - if (stress > tensileStrength || stress < compressiveStrength) { return 0d; } - else { return stress; } + return functionMaterial.Function.GetByX(strain); } } } diff --git a/StructureHelperLogics/Models/Materials/MaterialDC.cd b/StructureHelperLogics/Models/Materials/MaterialDC.cd index 34c9afd..8cd48b2 100644 --- a/StructureHelperLogics/Models/Materials/MaterialDC.cd +++ b/StructureHelperLogics/Models/Materials/MaterialDC.cd @@ -47,7 +47,7 @@ Models\Materials\IConcreteLibMaterial.cs - + AAAAAAAAgAEAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA= @@ -69,7 +69,7 @@ - + AAAAAAAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Models\Materials\IHelperMaterial.cs @@ -89,7 +89,7 @@ Models\Materials\IMaterialOptionLogic.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -106,7 +106,7 @@ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + AAAAAAAAgAEAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA= Models\Materials\IFunctionMaterial.cs