From ad4075f6012584ccc5b555655627feff026e4450 Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Tue, 12 Nov 2024 22:24:49 +0500 Subject: [PATCH] Add some text parameters --- .../Libraries/LoaderCalculator.dll | Bin 93184 -> 93184 bytes .../MainWindow/AnalysesManagerView.xaml | 8 +- .../NdmPrimitives/TextParametersLogic.cs | 219 ++++++++++++++++++ 3 files changed, 223 insertions(+), 4 deletions(-) diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll index a3ad125695807d6f008295ad1193c309b4868d37..7006c8d723d748d66af5c61fd6d195a5d582e6a3 100644 GIT binary patch delta 20881 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 G;Qs>IAHmcB diff --git a/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml b/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml index 8f3953e..ca5a57e 100644 --- a/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml +++ b/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml @@ -45,18 +45,18 @@ - + - + - + - + diff --git a/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs b/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs index 30bfb78..821ef1e 100644 --- a/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs +++ b/StructureHelperLogics/Services/NdmPrimitives/TextParametersLogic.cs @@ -40,6 +40,9 @@ namespace StructureHelperLogics.Services.NdmPrimitives parameters.AddRange(GetAreaRatio(ndms, strainMatrix)); parameters.AddRange(GetMomentOfInertiaRatio(ndms, strainMatrix)); parameters.AddRange(GetSummaryForces(ndms, strainMatrix)); + parameters.AddRange(GetSummaryMoments(ndms, strainMatrix)); + parameters.AddRange(GetForcesDistance(ndms, strainMatrix)); + parameters.AddRange(GetLiverArms(ndms, strainMatrix)); return parameters; } private IEnumerable> GetSimpleArea(IEnumerable ndms) @@ -315,5 +318,221 @@ namespace StructureHelperLogics.Services.NdmPrimitives forceSum.Description += $": {ex}"; } } + + private List> GetSummaryMoments(IEnumerable locNdms, IStrainMatrix? locStrainMatrix) + { + var parameters = new List>(); + var unitType = UnitTypes.Moment; + var unit = unitLogic.GetUnit(unitType, "kNm"); + var unitName = unit.Name; + var unitMultiPlayer = unit.Multiplyer; + var momentSumValue = GeometryOperations.GetSummaryMoment(locNdms, locStrainMatrix, PosNegFlag.Both); + var momentSumX = new ValueParameter() + { + IsValid = true, + Name = $"Summary moment", + ShortName = $"M{firstAxisName.ToLower()},sum", + Text = unitName, + Value = (momentSumValue.dX * unitMultiPlayer).ToString(), + Description = $"Summary moment arbitrary {firstAxisName.ToUpper()}-axis" + }; + var momentSumY = new ValueParameter() + { + IsValid = true, + Name = $"Summary moment", + ShortName = $"M{secondAxisName.ToLower()},sum", + Text = unitName, + Value = (momentSumValue.dY * unitMultiPlayer).ToString(), + Description = $"Summary moment arbitrary {secondAxisName.ToUpper()}-axis" + }; + parameters.Add(momentSumX); + parameters.Add(momentSumY); + momentSumValue = GeometryOperations.GetSummaryMoment(locNdms, locStrainMatrix, PosNegFlag.Positive); + momentSumX = new ValueParameter() + { + IsValid = true, + Name = $"Summary positive moment", + ShortName = $"M{firstAxisName.ToLower()},sum", + Text = unitName, + Value = (momentSumValue.dX * unitMultiPlayer).ToString(), + Description = $"Summary moment of positive forces arbitrary {firstAxisName.ToUpper()}-axis" + }; + momentSumY = new ValueParameter() + { + IsValid = true, + Name = $"Summary positive moment", + ShortName = $"M{secondAxisName.ToLower()},sum", + Text = unitName, + Value = (momentSumValue.dY * unitMultiPlayer).ToString(), + Description = $"Summary moment of positive forces arbitrary {secondAxisName.ToUpper()}-axis" + }; + parameters.Add(momentSumX); + parameters.Add(momentSumY); + momentSumValue = GeometryOperations.GetSummaryMoment(locNdms, locStrainMatrix, PosNegFlag.Negative); + momentSumX = new ValueParameter() + { + IsValid = true, + Name = $"Summary negative moment", + ShortName = $"M{firstAxisName.ToLower()},sum", + Text = unitName, + Value = (momentSumValue.dX * unitMultiPlayer).ToString(), + Description = $"Summary moment of negative forces arbitrary {firstAxisName.ToUpper()}-axis" + }; + momentSumY = new ValueParameter() + { + IsValid = true, + Name = $"Summary negative moment", + ShortName = $"M{secondAxisName.ToLower()},sum", + Text = unitName, + Value = (momentSumValue.dY * unitMultiPlayer).ToString(), + Description = $"Summary moment of negative forces arbitrary {secondAxisName.ToUpper()}-axis" + }; + parameters.Add(momentSumX); + parameters.Add(momentSumY); + return parameters; + } + private List> GetForcesDistance(IEnumerable locNdms, IStrainMatrix? locStrainMatrix) + { + PosNegFlag flag = PosNegFlag.Both; + string excentricityName = "Summary"; + Func, IStrainMatrix, PosNegFlag, (double dX, double dY, double dSum)> func = GeometryOperations.GetCenterOfForces; + var parameters = new List>(); + parameters.AddRange(GetDistance(locNdms, locStrainMatrix, flag, excentricityName, func)); + flag = PosNegFlag.Positive; + excentricityName = "Summary positive"; + parameters.AddRange(GetDistance(locNdms, locStrainMatrix, flag, excentricityName, func)); + flag = PosNegFlag.Negative; + excentricityName = "Summary negative"; + parameters.AddRange(GetDistance(locNdms, locStrainMatrix, flag, excentricityName, func)); + return parameters; + } + + private List> GetDistance(IEnumerable locNdms, IStrainMatrix? locStrainMatrix, PosNegFlag flag, string excentricityName, Func, IStrainMatrix, PosNegFlag, (double dX, double dY, double dSum)> func) + { + var parameters = new List>(); + var unitType = UnitTypes.Length; + var unit = unitLogic.GetUnit(unitType, "mm"); + var unitName = unit.Name; + var unitMultiPlayer = unit.Multiplyer; + var sumExcenticityX = new ValueParameter() + { + IsValid = true, + Name = $"{excentricityName} excentricity", + ShortName = $"e{firstAxisName.ToLower()},sum", + Text = unitName, + Description = $"{excentricityName} force excentricity along {firstAxisName.ToUpper()}-axis" + }; + var sumExcenticityY = new ValueParameter() + { + IsValid = true, + Name = $"{excentricityName} excentricity", + ShortName = $"e{secondAxisName.ToLower()},sum", + Text = unitName, + Description = $"{excentricityName} force excentricity along {secondAxisName.ToUpper()}-axis" + }; + var sumExcenticity = new ValueParameter() + { + IsValid = true, + Name = $"{excentricityName} excentricity", + ShortName = $"e,sum", + Text = unitName, + Description = $"{excentricityName} force excentricity" + }; + try + { + var sumExcentricityValue = func.Invoke(locNdms, locStrainMatrix, flag); + sumExcenticityX.Value = (sumExcentricityValue.dX * unitMultiPlayer).ToString(); + sumExcenticityY.Value = (sumExcentricityValue.dY * unitMultiPlayer).ToString(); + sumExcenticity.Value = (sumExcentricityValue.dSum * unitMultiPlayer).ToString(); + } + catch (Exception ex) + { + sumExcenticityX.IsValid = false; + sumExcenticityX.Value = (double.NaN).ToString(); + sumExcenticityX.Description += $": {ex}"; + + sumExcenticityY.IsValid = false; + sumExcenticityY.Value = (double.NaN).ToString(); + sumExcenticityY.Description += $": {ex}"; + + sumExcenticity.IsValid = false; + sumExcenticity.Value = (double.NaN).ToString(); + sumExcenticity.Description += $": {ex}"; + } + + parameters.Add(sumExcenticityX); + parameters.Add(sumExcenticityY); + parameters.Add(sumExcenticity); + return parameters; + } + + private List> GetLiverArms(IEnumerable locNdms, IStrainMatrix? locStrainMatrix) + { + string excentricityName = "Summary"; + Func, IStrainMatrix, (double dX, double dY, double dSum)> func = GeometryOperations.GetDistanceBetweenPosNegForces; + var parameters = new List>(); + parameters.AddRange(GetLiverArms(locNdms, locStrainMatrix, excentricityName, func)); + return parameters; + } + + private IEnumerable> GetLiverArms(IEnumerable locNdms, IStrainMatrix? locStrainMatrix, string excentricityName, Func, IStrainMatrix, (double dX, double dY, double dSum)> func) + { + const string liverArm = "liver arm"; + var parameters = new List>(); + var unitType = UnitTypes.Length; + var unit = unitLogic.GetUnit(unitType, "mm"); + var unitName = unit.Name; + var unitMultiPlayer = unit.Multiplyer; + var sumLiverArmX = new ValueParameter() + { + IsValid = true, + Name = $"{excentricityName} {liverArm}", + ShortName = $"z,{firstAxisName.ToLower()}", + Text = unitName, + Description = $"{excentricityName} {liverArm} along {firstAxisName.ToUpper()}-axis" + }; + var sumLiverArmY = new ValueParameter() + { + IsValid = true, + Name = $"{excentricityName} {liverArm}", + ShortName = $"z,{secondAxisName.ToLower()},sum", + Text = unitName, + Description = $"{excentricityName} {liverArm} along {secondAxisName.ToUpper()}-axis" + }; + var sumLiverArm = new ValueParameter() + { + IsValid = true, + Name = $"{excentricityName} {liverArm}", + ShortName = $"z,sum", + Text = unitName, + Description = $"{excentricityName} {liverArm}" + }; + try + { + var sumLiverArmValue = func.Invoke(locNdms, locStrainMatrix); + sumLiverArmX.Value = (sumLiverArmValue.dX * unitMultiPlayer).ToString(); + sumLiverArmY.Value = (sumLiverArmValue.dY * unitMultiPlayer).ToString(); + sumLiverArm.Value = (sumLiverArmValue.dSum * unitMultiPlayer).ToString(); + } + catch (Exception ex) + { + sumLiverArmX.IsValid = false; + sumLiverArmX.Value = (double.NaN).ToString(); + sumLiverArmX.Description += $": {ex}"; + + sumLiverArmY.IsValid = false; + sumLiverArmY.Value = (double.NaN).ToString(); + sumLiverArmY.Description += $": {ex}"; + + sumLiverArm.IsValid = false; + sumLiverArm.Value = (double.NaN).ToString(); + sumLiverArm.Description += $": {ex}"; + } + + parameters.Add(sumLiverArmX); + parameters.Add(sumLiverArmY); + parameters.Add(sumLiverArm); + return parameters; + } } }