diff --git a/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs b/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs index 8383ce8..fd4e157 100644 --- a/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs +++ b/StructureHelper/Infrastructure/Enums/CalculatorTypes.cs @@ -10,6 +10,7 @@ namespace StructureHelper.Infrastructure.Enums { ForceCalculator, LimitCurveCalculator, + CrackCalculator, FireCalculator } } diff --git a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml index 82cf364..c1fe35d 100644 --- a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml @@ -1,8 +1,8 @@  - + + @@ -81,12 +94,87 @@ + + + + + + + + + + + + + - - + @@ -341,7 +352,16 @@ - + + + + + + + + + + diff --git a/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs b/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs index d639e36..5664f16 100644 --- a/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs +++ b/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs @@ -44,12 +44,21 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections { AddLimitCurveCalculator(); } + else if (parameterType == CalculatorTypes.CrackCalculator) + { + AddCrackCalculator(); + } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(parameterType)); } } + private void AddCrackCalculator() + { + throw new NotImplementedException(); + } + private void AddLimitCurveCalculator() { var inputData = new LimitCurveInputData(repository.Primitives); diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculator.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculator.cs index 7d1e22e..88c702c 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculator.cs @@ -1,4 +1,5 @@ using LoaderCalculator.Data.Ndms; +using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Calculators; @@ -12,8 +13,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { public class CrackWidthCalculator : ICalculator { - static readonly ILengthBetweenCracksLogic lengthLogic = new LengthBetweenCracksLogicSP63(); - CrackWidthCalculatorResult result; + private static readonly ILengthBetweenCracksLogic lengthLogic = new LengthBetweenCracksLogicSP63(); + private CrackWidthCalculatorResult result; private IEnumerable ndmPrimitives; private List? rebarPrimitives; private IEnumerable ndmCollection; @@ -24,7 +25,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking public CrackWidthCalculatorInputData InputData { get; set; } public IResult Result => result; - public IShiftTraceLogger? TraceLogger { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public IShiftTraceLogger? TraceLogger { get; set; } public void Run() { @@ -54,17 +55,17 @@ namespace StructureHelperLogics.NdmCalculations.Cracking crackInputData.RebarPrimitive = item; calculator.Run(); var rebarResult = calculator.Result as CrackWidthSimpleCalculatorResult; - if (crackForceResult.IsSectionCracked == false) - { - rebarResult.CrackWidth = 0d; - } + //if (crackForceResult.IsSectionCracked == false) + //{ + // rebarResult.CrackWidth = 0d; + //} result.RebarResults.Add(rebarResult); } } private void CalcStrainMatrix() { - IForceTupleInputData inputData = new ForceTupleInputData() { NdmCollection = ndmCollection, Tuple = InputData.ForceTuple}; + IForceTupleInputData inputData = new ForceTupleInputData() { NdmCollection = ndmCollection, Tuple = InputData.LongTermTuple}; IForceTupleCalculator calculator = new ForceTupleCalculator() { InputData = inputData }; calculator.Run(); var forceResult = calculator.Result as IForcesTupleResult; @@ -80,7 +81,6 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { PsiSFactor = crackForceResult.PsiS, Length = length, - LimitState = InputData.LimitState, StrainTuple = strainTuple }; return crackInputData; @@ -97,13 +97,13 @@ namespace StructureHelperLogics.NdmCalculations.Cracking rebarPrimitives.Add(item as RebarPrimitive); } } - ndmCollection = NdmPrimitivesService.GetNdms(ndmPrimitives, InputData.LimitState, InputData.CalcTerm); + ndmCollection = NdmPrimitivesService.GetNdms(ndmPrimitives, LimitStates.SLS, CalcTerms.ShortTerm); } private void CalcCrackForce() { var calculator = new CrackForceCalculator(); - calculator.EndTuple = InputData.ForceTuple; + calculator.EndTuple = InputData.LongTermTuple; calculator.NdmCollection = ndmCollection; calculator.Run(); crackForceResult = calculator.Result as CrackForceResult; diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorInputData.cs index 607ad35..bf0b0a9 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorInputData.cs @@ -1,4 +1,5 @@ using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models.Calculators; using StructureHelperCommon.Models.Forces; using StructureHelperLogics.NdmCalculations.Primitives; using System; @@ -9,11 +10,10 @@ using System.Threading.Tasks; namespace StructureHelperLogics.NdmCalculations.Cracking { - public class CrackWidthCalculatorInputData + public class CrackWidthCalculatorInputData : IInputData { - public LimitStates LimitState { get; set; } - public CalcTerms CalcTerm { get; set; } - public IForceTuple ForceTuple { get; set; } + public IForceTuple LongTermTuple { get; set; } + public IForceTuple ShortTermTuple { get; set; } public List NdmPrimitives {get;set;} } } diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorResult.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorResult.cs index 0afdafe..b1503a0 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorResult.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthCalculatorResult.cs @@ -1,4 +1,5 @@ using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Forces; using System; using System.Collections.Generic; using System.Linq; @@ -11,7 +12,12 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { public bool IsValid { get; set; } public string Description { get; set; } + public IForceTuple LongTermTuple { get; set; } + public IForceTuple ShortTermTuple { get; set; } + public bool IsCracked { get; set; } public List RebarResults { get; set; } + public double MaxLongTermCrackWidth => IsCracked? RebarResults.Select(x => x.LongTermResult.CrackWidth).Max() : 0d; + public double MaxShortTermCrackWidth => IsCracked? RebarResults.Select(x => x.ShortTermResult.CrackWidth).Max() : 0d; public CrackWidthCalculatorResult() { diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculator.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculator.cs index 03b423c..e0bebd2 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculator.cs @@ -11,8 +11,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking public ICrackWidthSimpleCalculatorInputData InputData { get; set; } public IResult Result => result; - public Action ActionToOutputResults { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public IShiftTraceLogger? TraceLogger { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public Action ActionToOutputResults { get; set; } + public IShiftTraceLogger? TraceLogger { get; set; } public void Run() { @@ -31,9 +31,9 @@ namespace StructureHelperLogics.NdmCalculations.Cracking result.Description += "\n" + ex; } result.RebarPrimitive = InputData.RebarPrimitive; - result.CrackWidth = crackWidth; - result.RebarStrain = logicInputData.RebarStrain; - result.ConcreteStrain = logicInputData.ConcreteStrain; + //result.CrackWidth = crackWidth; + //result.RebarStrain = logicInputData.RebarStrain; + //result.ConcreteStrain = logicInputData.ConcreteStrain; } public object Clone() { diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorInputData.cs index 73980a6..b759327 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorInputData.cs @@ -11,7 +11,6 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { public class CrackWidthSimpleCalculatorInputData : ICrackWidthSimpleCalculatorInputData { - public LimitStates LimitState { get; set; } public CalcTerms CalcTerm { get; set; } public StrainTuple StrainTuple { get; set; } public double PsiSFactor { get; set; } diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorResult.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorResult.cs index c0e0461..32e287c 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorResult.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthSimpleCalculatorResult.cs @@ -13,8 +13,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking public bool IsValid { get; set; } public string Description { get; set; } public RebarPrimitive RebarPrimitive { get; set; } - public double CrackWidth { get; set; } - public double RebarStrain { get; set; } - public double ConcreteStrain { get; set; } + public CrackWidthTupleResult LongTermResult { get; set; } + public CrackWidthTupleResult ShortTermResult { get; set; } } } diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthTupleResult.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthTupleResult.cs new file mode 100644 index 0000000..7928c9f --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthTupleResult.cs @@ -0,0 +1,17 @@ +using StructureHelperCommon.Models.Forces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Cracking +{ + public class CrackWidthTupleResult + { + public IForceTuple? ForceTuple { get; set; } + public double CrackWidth { get; set; } + public double RebarStrain { get; set; } + public double ConcreteStrain { get; set; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Cracking/Factories/CrackWidthLogicInputDataFactory.cs b/StructureHelperLogics/NdmCalculations/Cracking/Factories/CrackWidthLogicInputDataFactory.cs index 7fb69ea..6511928 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/Factories/CrackWidthLogicInputDataFactory.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/Factories/CrackWidthLogicInputDataFactory.cs @@ -41,7 +41,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking private static void ProcessBaseProps(ICrackWidthSimpleCalculatorInputData inputData, ICrackWidthLogicInputData data) { var strainMatrix = TupleConverter.ConvertToLoaderStrainMatrix(inputData.StrainTuple); - var triangulationOptions = new TriangulationOptions { LimiteState = inputData.LimitState, CalcTerm = inputData.CalcTerm }; + var triangulationOptions = new TriangulationOptions { LimiteState = LimitStates.SLS, CalcTerm = inputData.CalcTerm }; var ndms = inputData.RebarPrimitive.GetNdms(triangulationOptions).ToArray(); var concreteNdm = ndms[0]; var rebarNdm = ndms[1]; diff --git a/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthSimpleCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthSimpleCalculatorInputData.cs index 739e4a4..fdea856 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthSimpleCalculatorInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/ICrackWidthSimpleCalculatorInputData.cs @@ -11,7 +11,6 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { public interface ICrackWidthSimpleCalculatorInputData { - LimitStates LimitState { get; set; } CalcTerms CalcTerm { get; set; } StrainTuple StrainTuple { get; set; } double PsiSFactor { get; set; } diff --git a/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs index 5226e07..4c92067 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/ILengthBetweenCracksLogic.cs @@ -1,5 +1,6 @@ using LoaderCalculator.Data.Matrix; using LoaderCalculator.Data.Ndms; +using StructureHelperCommon.Infrastructures.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -8,7 +9,7 @@ using System.Threading.Tasks; namespace StructureHelperLogics.NdmCalculations.Cracking { - public interface ILengthBetweenCracksLogic + public interface ILengthBetweenCracksLogic : ILogic { IEnumerable NdmCollection { get; set; } IStrainMatrix StrainMatrix { get; set; } diff --git a/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs b/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs index 8e2811c..59376ef 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/LengthBetweenCracksLogicSP63.cs @@ -1,5 +1,6 @@ using LoaderCalculator.Data.Matrix; using LoaderCalculator.Data.Ndms; +using StructureHelperCommon.Models; using System; using System.Collections.Generic; using System.Linq; @@ -19,6 +20,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking readonly ITensileAreaLogic tensileAreaLogic; public IEnumerable NdmCollection { get; set; } public IStrainMatrix StrainMatrix { get; set; } + public IShiftTraceLogger? TraceLogger { get; set; } + public LengthBetweenCracksLogicSP63(IAverageDiameterLogic diameterLogic, ITensileAreaLogic tensileAreaLogic) { this.diameterLogic = diameterLogic;