diff --git a/StructureHelper.csproj b/StructureHelper.csproj index d20e7d0..97c4f4d 100644 --- a/StructureHelper.csproj +++ b/StructureHelper.csproj @@ -116,6 +116,9 @@ App.xaml Code + + CalculationPropertyView.xaml + ColorPickerView.xaml @@ -143,6 +146,7 @@ RectangleTemplate.xaml + @@ -172,6 +176,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs new file mode 100644 index 0000000..dc18378 --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/CalculationProperty.cs @@ -0,0 +1,27 @@ +using LoaderCalculator.Data.Matrix; +using StructureHelperLogics.Infrastructures.CommonEnums; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationProperties +{ + public class CalculationProperty : ICalculationProperty + { + public List ForceCombinations { get; set; } + public LimitStates LimitState { get; set; } + public CalcTerms CalcTerm { get; set; } + public IIterationProperty IterationProperty { get; } + + public CalculationProperty() + { + ForceCombinations = new List + { + new ForceCombination() + }; + LimitState = LimitStates.Collapse; + CalcTerm = CalcTerms.ShortTerm; + IterationProperty = new IterationProperty() { Accuracy = 0.001d, MaxIterationCount = 100}; + } + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/ForceCombination.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/ForceCombination.cs new file mode 100644 index 0000000..731ddca --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/ForceCombination.cs @@ -0,0 +1,19 @@ +using LoaderCalculator.Data.Matrix; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationProperties +{ + public class ForceCombination : IForceCombination + { + public IForceMatrix ForceMatrix { get; private set; } + public bool TakeInCalculate { get; set; } + + public ForceCombination() + { + ForceMatrix = new ForceMatrix() { Mx = 0d, My = 0d, Nz = 0d}; + TakeInCalculate = true; + } + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs new file mode 100644 index 0000000..15ef710 --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/ICalculationProperty.cs @@ -0,0 +1,16 @@ +using LoaderCalculator.Data.Matrix; +using StructureHelperLogics.Infrastructures.CommonEnums; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationProperties +{ + public interface ICalculationProperty + { + List ForceCombinations { get; set; } + LimitStates LimitState { get; set; } + CalcTerms CalcTerm { get; set; } + IIterationProperty IterationProperty {get;} + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/IForceCombination.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/IForceCombination.cs new file mode 100644 index 0000000..edbbc6b --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/IForceCombination.cs @@ -0,0 +1,13 @@ +using LoaderCalculator.Data.Matrix; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationProperties +{ + public interface IForceCombination + { + IForceMatrix ForceMatrix { get; } + bool TakeInCalculate { get; set; } + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/IIterationProperty.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/IIterationProperty.cs new file mode 100644 index 0000000..05a3023 --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/IIterationProperty.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationProperties +{ + public interface IIterationProperty + { + double Accuracy { get; set; } + int MaxIterationCount { get; set; } + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationProperties/IterationProperty.cs b/StructureHelperLogics/Models/Calculations/CalculationProperties/IterationProperty.cs new file mode 100644 index 0000000..51a99fe --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationProperties/IterationProperty.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationProperties +{ + public class IterationProperty : IIterationProperty + { + public double Accuracy { get; set; } + public int MaxIterationCount { get; set; } + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationsResults/CalculationResult.cs b/StructureHelperLogics/Models/Calculations/CalculationsResults/CalculationResult.cs new file mode 100644 index 0000000..1c0eb99 --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationsResults/CalculationResult.cs @@ -0,0 +1,18 @@ +using LoaderCalculator.Data.ResultData; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationsResults +{ + /// + class CalculationResult : ICalculationResult + { + /// + public bool IsValid { get; set; } + /// + public string Desctription { get; set; } + /// + public ILoaderResults LoaderResults { get; set; } + } +} diff --git a/StructureHelperLogics/Models/Calculations/CalculationsResults/ICalculationResult.cs b/StructureHelperLogics/Models/Calculations/CalculationsResults/ICalculationResult.cs new file mode 100644 index 0000000..5ab8105 --- /dev/null +++ b/StructureHelperLogics/Models/Calculations/CalculationsResults/ICalculationResult.cs @@ -0,0 +1,26 @@ +using LoaderCalculator.Data.ResultData; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.Models.Calculations.CalculationsResults +{ + /// + /// Represent result of calculation of ndm analisys + /// + public interface ICalculationResult + { + /// + /// True if result of calculation is valid + /// + bool IsValid { get; } + /// + /// Text of result of calculations + /// + string Desctription { get; } + /// + /// Keep result of calculations from ndm-library + /// + ILoaderResults LoaderResults { get; } + } +} diff --git a/StructureHelperLogics/Services/CalculationService.cs b/StructureHelperLogics/Services/CalculationService.cs index 3558321..2bac1bd 100644 --- a/StructureHelperLogics/Services/CalculationService.cs +++ b/StructureHelperLogics/Services/CalculationService.cs @@ -7,6 +7,9 @@ using LoaderCalculator.Data.SourceData; using StructureHelperCommon.Models.Entities; using StructureHelperLogics.NdmCalculations.Triangulations; using StructureHelperLogics.Infrastructures.CommonEnums; +using StructureHelperLogics.Models.Calculations.CalculationsResults; +using StructureHelperLogics.Models.Calculations.CalculationProperties; +using System; namespace StructureHelperLogics.Services { @@ -35,5 +38,42 @@ namespace StructureHelperLogics.Services calculator.Run(loaderData, new CancellationToken()); return calculator.Result.StrainMatrix; } + + public List GetCalculationResults(ICalculationProperty calculationProperty, IEnumerable ndms) + { + List results = new List(); + foreach (var forceCombinations in calculationProperty.ForceCombinations) + { + var forceMatrix = forceCombinations.ForceMatrix; + results.Add(GetCalculationResult(forceMatrix, ndms, calculationProperty.IterationProperty.Accuracy, calculationProperty.IterationProperty.MaxIterationCount)); + } + return results; + } + + public ICalculationResult GetCalculationResult(IForceMatrix forceMatrix, IEnumerable ndmCollection, double accuracyRate, int maxIterationCount) + { + try + { + var loaderData = new LoaderOptions + { + Preconditions = new Preconditions + { + ConditionRate = accuracyRate, + MaxIterationCount = maxIterationCount, + StartForceMatrix = forceMatrix + }, + NdmCollection = ndmCollection + }; + var calculator = new Calculator(); + calculator.Run(loaderData, new CancellationToken()); + var result = calculator.Result; + if (result.AccuracyRate <= accuracyRate) { return new CalculationResult() { IsValid = true, Desctription = "Analisys is done succsefully", LoaderResults=result };} + else { return new CalculationResult() { IsValid = false, Desctription = "Required accuracy rate has not achived", LoaderResults = result }; } + } + catch (Exception ex) + { + return new CalculationResult() { IsValid = false, Desctription = $"Error is appeared due to analysis. Error: {ex}" }; + } + } } } diff --git a/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml b/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml new file mode 100644 index 0000000..bffb544 --- /dev/null +++ b/Windows/CalculationWindows/CalculationPropertyWindow/CalculationPropertyView.xaml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +