diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll index a3ad125..7006c8d 100644 Binary files a/StructureHelper/Libraries/LoaderCalculator.dll and b/StructureHelper/Libraries/LoaderCalculator.dll differ 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; + } } }