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;
+ }
}
}