diff --git a/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml b/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml index 846c628..00f291f 100644 --- a/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml +++ b/StructureHelper/Windows/MainWindow/CrossSections/CrossSectionView.xaml @@ -15,7 +15,7 @@ xmlns:sys="clr-namespace:System;assembly=mscorlib" mc:Ignorable="d" d:DataContext="{d:DesignInstance local:CrossSectionViewModel}" - Title="Cross-Section NDM Analysis" Height="700" Width="1000" MinHeight="400" MinWidth="600" WindowStartupLocation="CenterScreen"> + Title="Cross-Section NDM Analysis" Height="700" Width="1100" MinHeight="400" MinWidth="600" WindowStartupLocation="CenterScreen"> diff --git a/StructureHelperCommon/Models/Shapes/IPoint2DRange.cs b/StructureHelperCommon/Models/Shapes/IPoint2DRange.cs new file mode 100644 index 0000000..ac0deea --- /dev/null +++ b/StructureHelperCommon/Models/Shapes/IPoint2DRange.cs @@ -0,0 +1,15 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Shapes +{ + public interface IPoint2DRange : ISaveable + { + IPoint2D StartPoint { get; set; } + IPoint2D EndPoint { get; set; } + } +} diff --git a/StructureHelperCommon/Models/Shapes/Logics/Polyline2DToLinePoligonConvertLogic.cs b/StructureHelperCommon/Models/Shapes/Logics/Polyline2DToLinePoligonConvertLogic.cs index e17d50c..10c1bfc 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/Polyline2DToLinePoligonConvertLogic.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/Polyline2DToLinePoligonConvertLogic.cs @@ -74,7 +74,7 @@ namespace StructureHelperCommon.Models.Shapes // compute angle from each criterion double byAngle = options.AngleStepRadians; double byCount = arcAngle / options.SegmentCount; - double byLength = 2 * Math.Asin(options.MaxSegmentLength / (2 * radius)); + double byLength = 2 * Math.Asin(options.MaxSegmentLength * metresToMillimeters / (2 * radius)); return options.Mode switch { diff --git a/StructureHelperCommon/Models/Shapes/Point2DRange.cs b/StructureHelperCommon/Models/Shapes/Point2DRange.cs new file mode 100644 index 0000000..9cce473 --- /dev/null +++ b/StructureHelperCommon/Models/Shapes/Point2DRange.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Shapes +{ + public class Point2DRange : IPoint2DRange + { + public Guid Id { get; } + public IPoint2D StartPoint { get; set; } = new Point2D(); + public IPoint2D EndPoint { get; set; } = new Point2D(); + + public Point2DRange(Guid id) + { + Id = id; + } + } +} diff --git a/StructureHelperCommon/Models/States/IStateCalcTermPair.cs b/StructureHelperCommon/Models/States/IStateCalcTermPair.cs new file mode 100644 index 0000000..5bf6d37 --- /dev/null +++ b/StructureHelperCommon/Models/States/IStateCalcTermPair.cs @@ -0,0 +1,13 @@ +using StructureHelperCommon.Infrastructures.Enums; + +namespace StructureHelperCommon.Models.States +{ + /// + /// Implements pair of limit state and calculeation term + /// + public interface IStateCalcTermPair + { + LimitStates LimitState { get; set; } + CalcTerms CalcTerm { get; set; } + } +} diff --git a/StructureHelperCommon/Models/States/StateCalcTermPair.cs b/StructureHelperCommon/Models/States/StateCalcTermPair.cs new file mode 100644 index 0000000..e673643 --- /dev/null +++ b/StructureHelperCommon/Models/States/StateCalcTermPair.cs @@ -0,0 +1,13 @@ +using StructureHelperCommon.Infrastructures.Enums; + +namespace StructureHelperCommon.Models.States +{ + /// + public class StateCalcTermPair : IStateCalcTermPair + { + /// + public LimitStates LimitState { get; set; } + /// + public CalcTerms CalcTerm { get; set; } + } +} diff --git a/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs b/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs new file mode 100644 index 0000000..e3cca49 --- /dev/null +++ b/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs @@ -0,0 +1,22 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.States +{ + public class StateCalcTermPairUpdateStrategy : IUpdateStrategy + { + public void Update(IStateCalcTermPair targetObject, IStateCalcTermPair sourceObject) + { + CheckObject.IsNull(targetObject); + CheckObject.IsNull(sourceObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; } + targetObject.LimitState = sourceObject.LimitState; + targetObject.CalcTerm = sourceObject.CalcTerm; + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ExtendedForceTupleResult.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ExtendedForceTupleResult.cs new file mode 100644 index 0000000..c24a4ec --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ExtendedForceTupleResult.cs @@ -0,0 +1,10 @@ +using StructureHelperCommon.Models.States; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces +{ + public class ExtendedForceTupleResult : IExtendedForceTupleResult + { + public IStateCalcTermPair StateCalcTermPair { get; set; } = new StateCalcTermPair(); + public IForcesTupleResult ForcesTupleResut { get; set; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleCalculator.cs index b27cfe5..b43088d 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleCalculator.cs @@ -60,6 +60,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces { IsValid = true, Description = string.Empty, + InputData = InputData, }; } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleInputData.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleInputData.cs index 3e45ad1..5ea5753 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceTupleInputData.cs @@ -1,11 +1,6 @@ using LoaderCalculator.Data.Ndms; using StructureHelperCommon.Models.Calculators; using StructureHelperCommon.Models.Forces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces { diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForcesTupleResult.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForcesTupleResult.cs index 8c0fba2..6364792 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForcesTupleResult.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForcesTupleResult.cs @@ -22,6 +22,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces /// public ILoaderResults LoaderResults { get; set; } + public IForceTupleInputData InputData { get; set; } + public ForcesTupleResult() { DesignForceTuple = new DesignForceTuple(); diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IExtendedForceTupleResult.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IExtendedForceTupleResult.cs new file mode 100644 index 0000000..ea193fe --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IExtendedForceTupleResult.cs @@ -0,0 +1,10 @@ +using StructureHelperCommon.Models.States; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces +{ + public interface IExtendedForceTupleResult + { + IStateCalcTermPair StateCalcTermPair { get; set; } + IForcesTupleResult ForcesTupleResut { get; set; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IForcesTupleResult.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IForcesTupleResult.cs index ecac0e1..53ecd15 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IForcesTupleResult.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/IForcesTupleResult.cs @@ -6,6 +6,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces { public interface IForcesTupleResult : IResult { + IForceTupleInputData InputData { get; set; } IDesignForceTuple DesignForceTuple { get; set; } ILoaderResults LoaderResults { get; set; } } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceTupleCalcLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceTupleCalcLogic.cs index 3c375d2..df453b5 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceTupleCalcLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceTupleCalcLogic.cs @@ -44,6 +44,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces { IsValid = true, Description = string.Empty, + InputData = InputData, }; } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculator.cs new file mode 100644 index 0000000..0d6d258 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculator.cs @@ -0,0 +1,14 @@ +using StructureHelperCommon.Models.Calculators; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public interface IValueDiagramCalculator : ICalculator + { + + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs new file mode 100644 index 0000000..cdf2b79 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs @@ -0,0 +1,20 @@ +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.States; +using StructureHelperLogics.NdmCalculations.Primitives; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + /// + /// Implements input data for Value diagram calculator + /// + public interface IValueDiagramCalculatorInputData : ISaveable, IHasForceActions, IHasPrimitives + { + IStateCalcTermPair StateTermPair { get; set; } + /// + /// Collection of diagram for calculation + /// + List Digrams { get; } + bool CheckStrainLimit { get; set; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorResult.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorResult.cs new file mode 100644 index 0000000..b01a40d --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorResult.cs @@ -0,0 +1,13 @@ +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Analyses.ByForces; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public interface IValueDiagramCalculatorResult : IResult + { + IValueDiagramCalculatorInputData? InputData { get; set; } + List Points { get; set; } + List ForceTupleResults { get; set; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDigram.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDigram.cs new file mode 100644 index 0000000..c784fd9 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDigram.cs @@ -0,0 +1,15 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Shapes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public interface IValueDigram : ISaveable + { + IPoint2DRange Point2DRange { get; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/IValueDiagramCalculatorLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/IValueDiagramCalculatorLogic.cs new file mode 100644 index 0000000..6eb3b07 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/IValueDiagramCalculatorLogic.cs @@ -0,0 +1,16 @@ + +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public interface IValueDiagramCalculatorLogic : ILogic + { + IValueDiagramCalculatorInputData InputData { get; set; } + IValueDiagramCalculatorResult GetResult(); + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs new file mode 100644 index 0000000..3113b0c --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs @@ -0,0 +1,74 @@ +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Forces; +using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using StructureHelperLogics.Services.NdmPrimitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public class ValueDiagramCalculatorLogic : IValueDiagramCalculatorLogic + { + private ITriangulatePrimitiveLogic triangulateLogic; + + private IValueDiagramCalculatorResult result; + public IValueDiagramCalculatorInputData InputData { get; set; } + public IShiftTraceLogger? TraceLogger { get; set; } + + public IValueDiagramCalculatorResult GetResult() + { + PrepareResult(); + GetPoints(); + CalculateTupleResults(); + return result; + } + + private void CalculateTupleResults() + { + triangulateLogic = new TriangulatePrimitiveLogic() + { + Primitives = InputData.Primitives, + LimitState = InputData.StateTermPair.LimitState, + CalcTerm = InputData.StateTermPair.CalcTerm, + TraceLogger = TraceLogger + }; + var ndms = triangulateLogic.GetNdms(); + foreach (var forceAction in InputData.ForceActions) + { + var combination = forceAction.GetCombinations(); + List forceTuples = []; + foreach (var action in combination) + { + var actionCombination = action + .DesignForces + .Where(x => x.LimitState == InputData.StateTermPair.LimitState && x.CalcTerm == InputData.StateTermPair.CalcTerm); + } + ForceTupleInputData forceTupleInputData = new() + { + NdmCollection = ndms, + Accuracy = new Accuracy(), + CheckStrainLimit = true, + + }; + } + } + + private void GetPoints() + { + throw new NotImplementedException(); + } + + private void PrepareResult() + { + result = new ValueDiagramCalculatorResult() + { + InputData = InputData, + }; + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs new file mode 100644 index 0000000..c71ecfe --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs @@ -0,0 +1,38 @@ +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Calculators; +using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public class ValueDiagramCalculator : IValueDiagramCalculator + { + public string Name { get; set; } + public bool ShowTraceData { get; set; } + + public IResult Result => throw new NotImplementedException(); + + public IShiftTraceLogger? TraceLogger { get; set; } + + public Guid Id { get; } + + public ValueDiagramCalculator(Guid id) + { + Id = id; + } + + public object Clone() + { + throw new NotImplementedException(); + } + + public void Run() + { + throw new NotImplementedException(); + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs new file mode 100644 index 0000000..1abea78 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs @@ -0,0 +1,34 @@ +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.States; +using StructureHelperLogics.NdmCalculations.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + /// + public class ValueDiagramCalculatorInputData : IValueDiagramCalculatorInputData + { + /// + public Guid Id { get; } + + /// + public List Digrams { get; } = []; + /// + public List ForceActions { get; } = []; + /// + public List Primitives { get; } = []; + public IStateCalcTermPair StateTermPair { get; set; } = new StateCalcTermPair() { LimitState = LimitStates.ULS, CalcTerm = CalcTerms.ShortTerm}; + public bool CheckStrainLimit { get; set; } = true; + + public ValueDiagramCalculatorInputData(Guid id) + { + Id = id; + } + + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorResult.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorResult.cs new file mode 100644 index 0000000..4adaca9 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorResult.cs @@ -0,0 +1,17 @@ +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Analyses.ByForces; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public class ValueDiagramCalculatorResult : IValueDiagramCalculatorResult + { + public IValueDiagramCalculatorInputData? InputData { get; set; } + + public List Points { get; set; } = []; + + public List ForceTupleResults { get; set; } = []; + + public bool IsValid { get; set; } = true; + public string? Description { get; set; } = string.Empty; + } +} diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/GetPrimitivesByDxfEntities.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/GetPrimitivesByDxfEntities.cs index e913054..01f21f6 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/GetPrimitivesByDxfEntities.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/GetPrimitivesByDxfEntities.cs @@ -4,6 +4,7 @@ using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Services.Exports; +using System.Runtime.CompilerServices; namespace StructureHelperLogics.NdmCalculations.Primitives { @@ -35,7 +36,8 @@ namespace StructureHelperLogics.NdmCalculations.Primitives } else { - throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(dxfEntity)); + // just skip all types of primitives + // throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(dxfEntity)); } } }