diff --git a/DataAccess/DTOs/Converters/CalculatorToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CalculatorToDTOConvertStrategy.cs index 15b6b82..dd9dba2 100644 --- a/DataAccess/DTOs/Converters/CalculatorToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CalculatorToDTOConvertStrategy.cs @@ -4,12 +4,8 @@ using StructureHelperCommon.Models; using StructureHelperCommon.Models.Calculators; using StructureHelperCommon.Models.Loggers; using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Cracking; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace DataAccess.DTOs { @@ -65,11 +61,26 @@ namespace DataAccess.DTOs { TraceLogger?.AddMessage($"Current version of StructureHelper does not suppurt saving interaction diagram calculator, {limitCalculator.Name} was ignored"); } + if (source is IValueDiagramCalculator valueDiagramCalculator) + { + return ProcessValueDiagramCalcualtor(valueDiagramCalculator); + } string errorString = ErrorStrings.ObjectTypeIsUnknownObj(source); TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error); throw new StructureHelperException(errorString); } + private ValueDiagramCalculatorDTO ProcessValueDiagramCalcualtor(IValueDiagramCalculator valueDiagramCalculator) + { + var convertStrategy = new ValueDiagramCalculatorToDTOConvertStrategy() + { + ReferenceDictionary = ReferenceDictionary, + TraceLogger = TraceLogger + }; + var dictionaryConvertStrategy = new DictionaryConvertStrategy(this, convertStrategy); + return convertStrategy.Convert(valueDiagramCalculator); + } + private CrackCalculatorDTO ProcessCrackCalculator(ICrackCalculator crackCalculator) { crackCalculatorStrategy.ReferenceDictionary = ReferenceDictionary; diff --git a/DataAccess/DTOs/Converters/CalculatorsFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CalculatorsFromDTOConvertStrategy.cs index be7344b..f562505 100644 --- a/DataAccess/DTOs/Converters/CalculatorsFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CalculatorsFromDTOConvertStrategy.cs @@ -3,6 +3,7 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Calculators; using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Cracking; using System; using System.Collections.Generic; @@ -39,11 +40,26 @@ namespace DataAccess.DTOs ICrackCalculator calculator = GetCrackCalculator(crackCalculator); return calculator; } + if (source is ValueDiagramCalculatorDTO valueDiagramCalculator) + { + TraceLogger?.AddMessage($"{CalculatorIs} value digram calculator"); + return GetValueDiagramCalculator(valueDiagramCalculator); + } string errorString = ErrorStrings.ObjectTypeIsUnknownObj(source); TraceLogger.AddMessage(errorString, TraceLogStatuses.Error); throw new StructureHelperException(errorString); } + private ValueDiagramCalculator GetValueDiagramCalculator(ValueDiagramCalculatorDTO valueDiagramCalculator) + { + var convertStrategy = new ValueDiagramCalcualtorFromDTOConvertStrategy() + { + ReferenceDictionary = ReferenceDictionary, + TraceLogger = TraceLogger, + }; + return convertStrategy.Convert(valueDiagramCalculator); + } + private ICrackCalculator GetCrackCalculator(ICrackCalculator crackCalculator) { crackConvertStrategy.ReferenceDictionary = ReferenceDictionary; diff --git a/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs new file mode 100644 index 0000000..774ca7e --- /dev/null +++ b/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs @@ -0,0 +1,47 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperCommon.Services; + +namespace DataAccess.DTOs +{ + public class Point2DRangeFromDTOConvertStrategy : ConvertStrategy + { + private IConvertStrategy pointConvertStrategy; + + public Point2DRangeFromDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override Point2DRange GetNewItem(Point2DRangeDTO source) + { + ChildClass = this; + CheckSourceObject(source); + NewItem = new(source.Id); + InitializeStrategies(); + if (source.StartPoint is not Point2DDTO startPoint) + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(source.StartPoint) + ": start point"); + } + if (source.EndPoint is not Point2DDTO endPoint) + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(source.StartPoint) + ": end point"); + } + NewItem.StartPoint = pointConvertStrategy.Convert(startPoint); + NewItem.EndPoint = pointConvertStrategy.Convert(endPoint); + return NewItem; + } + + private static void CheckSourceObject(Point2DRangeDTO source) + { + CheckObject.IsNull(source, ": point range source object"); + CheckObject.IsNull(source.StartPoint + ": point range start point"); + CheckObject.IsNull(source.EndPoint + ": point range end point"); + } + + private void InitializeStrategies() + { + pointConvertStrategy ??= new Point2DFromDTOConvertStrategy(this); + } + } +} diff --git a/DataAccess/DTOs/Converters/Shapes/Point2DRangeToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/Shapes/Point2DRangeToDTOConvertStrategy.cs new file mode 100644 index 0000000..bc17769 --- /dev/null +++ b/DataAccess/DTOs/Converters/Shapes/Point2DRangeToDTOConvertStrategy.cs @@ -0,0 +1,25 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Shapes; + +namespace DataAccess.DTOs +{ + public class Point2DRangeToDTOConvertStrategy : ConvertStrategy + { + private IConvertStrategy pointConvertStrategy = new Point2DToDTOConvertStrategy(); + + public Point2DRangeToDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override Point2DRangeDTO GetNewItem(IPoint2DRange source) + { + ChildClass = this; + NewItem = new(source.Id) + { + StartPoint = pointConvertStrategy.Convert(source.StartPoint), + EndPoint = pointConvertStrategy.Convert(source.EndPoint) + }; + return NewItem; + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalcualtorFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalcualtorFromDTOConvertStrategy.cs new file mode 100644 index 0000000..7bb3eca --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalcualtorFromDTOConvertStrategy.cs @@ -0,0 +1,30 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using System; +using System.Collections.Generic; +using System.Text; + +namespace DataAccess.DTOs +{ + public class ValueDiagramCalcualtorFromDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy inputDataConvertStrategy; + + public override ValueDiagramCalculator GetNewItem(ValueDiagramCalculatorDTO source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + NewItem.InputData = inputDataConvertStrategy.Convert(source.InputData as ValueDiagramCalculatorInputDataDTO); + return NewItem; + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramCalculatorUpdateStrategy() { UpdateChildren = false }; + inputDataConvertStrategy ??= new ValueDiagramCalculatorInputDataFromDTOConvertStrategy(this); + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs new file mode 100644 index 0000000..b0380f7 --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs @@ -0,0 +1,68 @@ +using DataAccess.DTOs.Converters; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Calculators; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using StructureHelperLogics.NdmCalculations.Primitives; + +namespace DataAccess.DTOs +{ + public class ValueDiagramCalculatorInputDataFromDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy diagramConvertStrategy; + private IHasPrimitivesProcessLogic primitivesProcessLogic; + private IHasForceActionsProcessLogic actionsProcessLogic; + private IConvertStrategy accuracyConvertStrategy; + + public ValueDiagramCalculatorInputDataFromDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override ValueDiagramCalculatorInputData GetNewItem(ValueDiagramCalculatorInputDataDTO source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + ProcessPrimitives(source); + ProcessActions(source); + NewItem.Digrams.Clear(); + foreach (var diagram in source.Digrams) + { + if (diagram is not ValueDiagramEntityDTO diagramDTO) + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(diagram)); + } + NewItem.Digrams.Add(diagramConvertStrategy.Convert(diagramDTO)); + } + return NewItem; + } + + private void ProcessPrimitives(IHasPrimitives source) + { + primitivesProcessLogic.Source = source; + primitivesProcessLogic.Target = NewItem; + primitivesProcessLogic.ReferenceDictionary = ReferenceDictionary; + primitivesProcessLogic.TraceLogger = TraceLogger; + primitivesProcessLogic.Process(); + } + private void ProcessActions(IHasForceActions source) + { + actionsProcessLogic.Source = source; + actionsProcessLogic.Target = NewItem; + actionsProcessLogic.ReferenceDictionary = ReferenceDictionary; + actionsProcessLogic.TraceLogger = TraceLogger; + actionsProcessLogic.Process(); + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramCalculatorInputDataUpdateStrategy() { UpdateChildren = false }; + diagramConvertStrategy ??= new ValueDiagramEntityFromDTOConvertStrategy(this); + primitivesProcessLogic ??= new HasPrimitivesProcessLogic(ConvertDirection.FromDTO) { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger }; + actionsProcessLogic ??= new HasForceActionsProcessLogic(ConvertDirection.FromDTO) { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger }; + accuracyConvertStrategy ??= new AccuracyFromDTOConvertStrategy() { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger }; + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs new file mode 100644 index 0000000..7a64b83 --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs @@ -0,0 +1,64 @@ +using DataAccess.DTOs.Converters; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using StructureHelperLogics.NdmCalculations.Primitives; + +namespace DataAccess.DTOs +{ + public class ValueDiagramCalculatorInputDataToDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy diagramConvertStrategy; + private IHasPrimitivesProcessLogic primitivesProcessLogic; + private IHasForceActionsProcessLogic actionsProcessLogic; + + public ValueDiagramCalculatorInputDataToDTOConvertStrategy() : base() + { + } + + public ValueDiagramCalculatorInputDataToDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override ValueDiagramCalculatorInputDataDTO GetNewItem(IValueDiagramCalculatorInputData source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + ProcessPrimitives(source); + ProcessActions(source); + NewItem.Digrams.Clear(); + foreach (var diagram in source.Digrams) + { + NewItem.Digrams.Add(diagramConvertStrategy.Convert(diagram)); + } + return NewItem; + } + + private void ProcessPrimitives(IHasPrimitives source) + { + primitivesProcessLogic.Source = source; + primitivesProcessLogic.Target = NewItem; + primitivesProcessLogic.ReferenceDictionary = ReferenceDictionary; + primitivesProcessLogic.TraceLogger = TraceLogger; + primitivesProcessLogic.Process(); + } + private void ProcessActions(IHasForceActions source) + { + actionsProcessLogic.Source = source; + actionsProcessLogic.Target = NewItem; + actionsProcessLogic.ReferenceDictionary = ReferenceDictionary; + actionsProcessLogic.TraceLogger = TraceLogger; + actionsProcessLogic.Process(); + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramCalculatorInputDataUpdateStrategy() { UpdateChildren = false}; + diagramConvertStrategy ??= new ValueDiagramEntityToDTOConvertStrategy(this); + primitivesProcessLogic ??= new HasPrimitivesProcessLogic(ConvertDirection.ToDTO) { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger }; + actionsProcessLogic ??= new HasForceActionsProcessLogic(ConvertDirection.ToDTO) { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger }; + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorToDTOConvertStrategy.cs new file mode 100644 index 0000000..5c8b6d2 --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorToDTOConvertStrategy.cs @@ -0,0 +1,31 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + internal class ValueDiagramCalculatorToDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy inputDataConvertStrategy; + public override ValueDiagramCalculatorDTO GetNewItem(IValueDiagramCalculator source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + NewItem.InputData = inputDataConvertStrategy.Convert(source.InputData); + return NewItem; + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramCalculatorUpdateStrategy() + { + UpdateChildren = false + }; + inputDataConvertStrategy ??= new DictionaryConvertStrategy( + this, + new ValueDiagramCalculatorInputDataToDTOConvertStrategy(this)); + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs new file mode 100644 index 0000000..9474ac3 --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs @@ -0,0 +1,36 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramEntityFromDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy diagramConvertStrategy; + + public ValueDiagramEntityFromDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override ValueDiagramEntity GetNewItem(ValueDiagramEntityDTO source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + if (source.ValueDigram is not ValueDiagramDTO diagramDTO) + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(source.ValueDigram)); + } + NewItem.ValueDigram = diagramConvertStrategy.Convert(diagramDTO); + return NewItem; + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramEntityUpdateStrategy() { UpdateChildren = false}; + diagramConvertStrategy ??= new ValueDiagramFromDTOConvertStrategy(this); + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs new file mode 100644 index 0000000..193aee0 --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs @@ -0,0 +1,31 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramEntityToDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy diagramConvertStrategy; + + public ValueDiagramEntityToDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override ValueDiagramEntityDTO GetNewItem(IValueDiagramEntity source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + NewItem.ValueDigram = diagramConvertStrategy.Convert(source.ValueDigram); + return NewItem; + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramEntityUpdateStrategy() { UpdateChildren = false }; + diagramConvertStrategy ??= new ValueDiagramToDTOConvertStrategy(this); + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramFromDTOConvertStrategy.cs new file mode 100644 index 0000000..08d1b9f --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramFromDTOConvertStrategy.cs @@ -0,0 +1,37 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramFromDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy pointConvertStrategy; + + public ValueDiagramFromDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override ValueDiagram GetNewItem(ValueDiagramDTO source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + if (source.Point2DRange is not Point2DRangeDTO point2DRangeDTO) + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(source.Point2DRange)); + } + NewItem.Point2DRange = pointConvertStrategy.Convert(point2DRangeDTO); + return NewItem; + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramUpdateStrategy() { UpdateChildren = false }; + pointConvertStrategy ??= new Point2DRangeFromDTOConvertStrategy(this); + } + } +} diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramToDTOConvertStrategy.cs new file mode 100644 index 0000000..ff39da8 --- /dev/null +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramToDTOConvertStrategy.cs @@ -0,0 +1,32 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramToDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + private IConvertStrategy pointConvertStrategy; + + public ValueDiagramToDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) + { + } + + public override ValueDiagramDTO GetNewItem(IValueDiagram source) + { + ChildClass = this; + NewItem = new(source.Id); + InitializeStrategies(); + updateStrategy.Update(NewItem, source); + NewItem.Point2DRange = pointConvertStrategy.Convert(source.Point2DRange); + return NewItem; + } + + private void InitializeStrategies() + { + updateStrategy ??= new ValueDiagramUpdateStrategy() { UpdateChildren = false }; + pointConvertStrategy ??= new Point2DRangeToDTOConvertStrategy(this); + } + } +} diff --git a/DataAccess/DTOs/DTOEntities/Shapes/Point2DRangeDTO.cs b/DataAccess/DTOs/DTOEntities/Shapes/Point2DRangeDTO.cs new file mode 100644 index 0000000..7b378bf --- /dev/null +++ b/DataAccess/DTOs/DTOEntities/Shapes/Point2DRangeDTO.cs @@ -0,0 +1,26 @@ +using Newtonsoft.Json; +using StructureHelperCommon.Models.Shapes; + +namespace DataAccess.DTOs +{ + public class Point2DRangeDTO : IPoint2DRange + { + [JsonProperty("Id")] + public Guid Id { get; } + [JsonProperty("StartPoint")] + public IPoint2D StartPoint { get; set; } + [JsonProperty("EndPoint")] + public IPoint2D EndPoint { get; set; } + + + public Point2DRangeDTO(Guid id) + { + Id = id; + } + + public object Clone() + { + return this; + } + } +} diff --git a/DataAccess/DTOs/DTOEntities/StateCalcTermPairDTO.cs b/DataAccess/DTOs/DTOEntities/StateCalcTermPairDTO.cs new file mode 100644 index 0000000..ec5dd67 --- /dev/null +++ b/DataAccess/DTOs/DTOEntities/StateCalcTermPairDTO.cs @@ -0,0 +1,11 @@ +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models.States; + +namespace DataAccess.DTOs +{ + public class StateCalcTermPairDTO : IStateCalcTermPair + { + public LimitStates LimitState { get; set; } + public CalcTerms CalcTerm { get; set; } + } +} diff --git a/DataAccess/DTOs/DTOEntities/TypeBinderListFactory.cs b/DataAccess/DTOs/DTOEntities/TypeBinderListFactory.cs index 0612a3a..eca6c79 100644 --- a/DataAccess/DTOs/DTOEntities/TypeBinderListFactory.cs +++ b/DataAccess/DTOs/DTOEntities/TypeBinderListFactory.cs @@ -7,6 +7,7 @@ using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Materials.Libraries; using StructureHelperCommon.Models.Shapes; using StructureHelperLogics.Models.BeamShears; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Primitives; namespace DataAccess.DTOs @@ -45,6 +46,7 @@ namespace DataAccess.DTOs { (typeof(List), "ListOfLimitState") }, { (typeof(List), "ListOfPartialFactor") }, { (typeof(RebarSectionDTO), "RebarSection") }, + { (typeof(StateCalcTermPairDTO), "StateCalcTermPair") }, { (typeof(VisualPropertyDTO), "VisualProperty") }, { (typeof(WorkPlanePropertyDTO), "WorkPlanePropertyDTO") }, }; @@ -55,6 +57,20 @@ namespace DataAccess.DTOs newList.AddRange(GetCalculatorList()); newList.AddRange(GetNdmPrimitiveList()); newList.AddRange(GetBeamShearList()); + newList.AddRange(GetValueDiagramList()); + return newList; + } + + private static IEnumerable<(Type type, string name)> GetValueDiagramList() + { + List<(Type type, string name)> newList = new() + { + { (typeof(List), "ListOfValueDiagramEntity") }, + { (typeof(ValueDiagramCalculatorDTO), "ValueDiagramCalculator") }, + { (typeof(ValueDiagramCalculatorInputDataDTO), "ValueDiagramCalculatorInputData") }, + { (typeof(ValueDiagramEntityDTO), "ValueDiagramEntity") }, + { (typeof(ValueDiagramDTO), "ValueDiagram") }, + }; return newList; } @@ -131,6 +147,7 @@ namespace DataAccess.DTOs { { (typeof(List), "ListOfVertex2D") }, { (typeof(Point2DDTO), "Point2D") }, + { (typeof(Point2DRangeDTO), "Point2DRange") }, { (typeof(VertexDTO), "Vertex2D") }, { (typeof(RectangleShapeDTO), "RectangleShape") }, { (typeof(CircleShapeDTO), "CircleShape") }, diff --git a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorDTO.cs b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorDTO.cs new file mode 100644 index 0000000..8932938 --- /dev/null +++ b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorDTO.cs @@ -0,0 +1,39 @@ +using Newtonsoft.Json; +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Calculators; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramCalculatorDTO : IValueDiagramCalculator + { + [JsonProperty("Id")] + public Guid Id { get; } + [JsonProperty("Name")] + public string Name { get; set; } + [JsonProperty("InputData")] + public IValueDiagramCalculatorInputData InputData { get; set; } + [JsonProperty("ShowTraceData")] + public bool ShowTraceData { get; set; } + [JsonIgnore] + public IResult Result => throw new NotImplementedException(); + [JsonIgnore] + public IShiftTraceLogger? TraceLogger { get; set; } + + + public ValueDiagramCalculatorDTO(Guid id) + { + Id = id; + } + + public object Clone() + { + return this; + } + + public void Run() + { + throw new NotImplementedException(); + } + } +} diff --git a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs new file mode 100644 index 0000000..98dbd75 --- /dev/null +++ b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs @@ -0,0 +1,32 @@ +using Newtonsoft.Json; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.States; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using StructureHelperLogics.NdmCalculations.Primitives; + +namespace DataAccess.DTOs +{ + public class ValueDiagramCalculatorInputDataDTO : IValueDiagramCalculatorInputData + { + [JsonProperty("Id")] + public Guid Id { get; } + [JsonProperty("StateTermPair")] + public IStateCalcTermPair StateTermPair { get; set; } = new StateCalcTermPairDTO(); + [JsonProperty("Diagrams")] + public List Digrams { get; } = []; + [JsonProperty("CheckStrainLimits")] + public bool CheckStrainLimit { get; set; } = true; + [JsonProperty("ForceActions")] + public List ForceActions { get; } = []; + [JsonProperty("Primitives")] + public List Primitives { get; } = []; + + + public ValueDiagramCalculatorInputDataDTO(Guid id) + { + Id = id; + } + + + } +} diff --git a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramDTO.cs b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramDTO.cs new file mode 100644 index 0000000..4974c5b --- /dev/null +++ b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramDTO.cs @@ -0,0 +1,26 @@ +using Newtonsoft.Json; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramDTO : IValueDiagram + { + [JsonProperty("Id")] + public Guid Id { get; } + [JsonProperty("Point2DRange")] + public IPoint2DRange Point2DRange { get; set; } + [JsonProperty("StepNumber")] + public int StepNumber { get; set; } + + public ValueDiagramDTO(Guid id) + { + Id = id; + } + + public object Clone() + { + return this; + } + } +} diff --git a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs new file mode 100644 index 0000000..9cf627b --- /dev/null +++ b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs @@ -0,0 +1,28 @@ +using Newtonsoft.Json; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace DataAccess.DTOs +{ + public class ValueDiagramEntityDTO : IValueDiagramEntity + { + [JsonProperty("Id")] + public Guid Id { get; } + [JsonProperty("Name")] + public string Name { get; set; } + [JsonProperty("IsTaken")] + public bool IsTaken { get; set; } + [JsonProperty("ValueDiagram")] + public IValueDiagram ValueDigram { get; set; } + + + public ValueDiagramEntityDTO(Guid id) + { + Id = id; + } + + public object Clone() + { + return this; + } + } +} diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityView.xaml index 51984fc..1487803 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityView.xaml @@ -21,6 +21,7 @@ + @@ -29,6 +30,8 @@ + + diff --git a/StructureHelper/Windows/Graphs/GraphView.xaml b/StructureHelper/Windows/Graphs/GraphView.xaml index 30d6b78..66475e5 100644 --- a/StructureHelper/Windows/Graphs/GraphView.xaml +++ b/StructureHelper/Windows/Graphs/GraphView.xaml @@ -61,61 +61,69 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs b/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs index 560c492..88a3f66 100644 --- a/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs +++ b/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs @@ -1,6 +1,4 @@ using LoaderCalculator.Data.Matrix; -using LoaderCalculator.Data.Ndms; -using LoaderCalculator.Logics; using StructureHelper.Services.ResultViewers; using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews; using StructureHelper.Windows.Graphs; @@ -18,7 +16,6 @@ namespace StructureHelper.Windows.MainWindow.CrossSections { internal class ValueDiagramLogic { - private IStressLogic stressLogic = new StressLogic(); private IValueDiagramCalculatorResult valueDiagramResult; private List resultFuncs = []; private List labels; @@ -49,6 +46,10 @@ namespace StructureHelper.Windows.MainWindow.CrossSections var primitives = valueDiagramResult.InputData.Primitives .Where(x => x is IHasDivisionSize); Series series = GetSeries(forceTupleResult, valueDiagramResult.InputData.Primitives, entityResult.PointList); + if (valueDiagramResult.EntityResults.Count > 1) + { + series.Name = $"${entityResult.ValueDiagramEntity.Name} ({series.Name})"; + } seriesList.Add(series); } } @@ -60,10 +61,15 @@ namespace StructureHelper.Windows.MainWindow.CrossSections private Series GetSeries(IForceTupleCalculatorResult tupleResult, List ndmPrimitives, List points) { List<(INdmPrimitive ndmPrimitive, IPoint2D point)> pointPrimitives = GetPrimitivePoints(ndmPrimitives, points); + if (pointPrimitives.Count == 0) + { + throw new StructureHelperException("There are not points for drawings"); + } ArrayParameter arrayParameter = new(pointPrimitives.Count + 3, labels); var data = arrayParameter.Data; IPoint2D startPoint = pointPrimitives[0].point; IPoint2D endPoint = pointPrimitives[^1].point; + IStrainMatrix strainMatrix = tupleResult.LoaderResults.StrainMatrix; for (int i = 0; i < pointPrimitives.Count; i++) { IPoint2D currentPoint = pointPrimitives[i].point; @@ -73,7 +79,7 @@ namespace StructureHelper.Windows.MainWindow.CrossSections data[i, 2] = currentPoint.Y; for (int j = 0; j < resultFuncs.Count; j++) { - data[i, j + 3] = GetValueByPoint(tupleResult.LoaderResults.StrainMatrix, pointPrimitives[i].ndmPrimitive, pointPrimitives[i].point, resultFuncs[j]); + data[i, j + 3] = GetValueByPoint(strainMatrix, pointPrimitives[i].ndmPrimitive, pointPrimitives[i].point, resultFuncs[j]); } } @@ -92,7 +98,7 @@ namespace StructureHelper.Windows.MainWindow.CrossSections { data[pointPrimitives.Count, j+3] = 0.0; data[pointPrimitives.Count + 1, j+3] = 0.0; - data[pointPrimitives.Count + 2, j + 3] = GetValueByPoint(tupleResult.LoaderResults.StrainMatrix, pointPrimitives[0].ndmPrimitive, pointPrimitives[0].point, resultFuncs[j]); + data[pointPrimitives.Count + 2, j + 3] = GetValueByPoint(strainMatrix, pointPrimitives[0].ndmPrimitive, pointPrimitives[0].point, resultFuncs[j]); } StructureHelperCommon.Models.Forces.IForceTuple inputForceTuple = tupleResult.InputData.ForceTuple; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CalculatorCloningStrategyContainer.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CalculatorCloningStrategyContainer.cs new file mode 100644 index 0000000..8efd992 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CalculatorCloningStrategyContainer.cs @@ -0,0 +1,28 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using StructureHelperLogics.NdmCalculations.Cracking; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics +{ + public class CalculatorCloningStrategyContainer : ICalculatorCloningStrategyContainer + { + private ICloningStrategy cloningStrategy; + + + public IUpdateStrategy ForceCalculatorStrategy => new ForceCalculatorUpdateCloningStrategy(cloningStrategy); + + public IUpdateStrategy CrackCalculatorStrategy => new CrackCalculatorUpdateCloningStrategy(cloningStrategy); + + public IUpdateStrategy LimitCurvesCalculatorStrategy => new LimitCurvesCalculatorUpdateCloningStrategy(cloningStrategy); + + public IUpdateStrategy ValueDiagramCalculatorStrategy => new ValueDiagramCalculatorUpdateCloningStrategy(cloningStrategy); + public CalculatorCloningStrategyContainer(ICloningStrategy cloningStrategy) + { + this.cloningStrategy = cloningStrategy; + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs index 914df8c..442e1c2 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs @@ -1,5 +1,4 @@ using StructureHelperCommon.Infrastructures.Interfaces; -using StructureHelperCommon.Infrastructures.Settings; using StructureHelperCommon.Services; using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives.Logics; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs index 6dd253d..e6ec42c 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs @@ -6,6 +6,7 @@ using StructureHelperCommon.Models.Parameters; using StructureHelperCommon.Services; using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve; using StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Cracking; using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives.Logics; @@ -18,28 +19,20 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces public class HasCalculatorsUpdateCloningStrategy : IUpdateStrategy { private ICloningStrategy cloningStrategy; - private IUpdateStrategy forceCalculatorUpdateStrategy; - private IUpdateStrategy crackCalculatorUpdateStrategy; - private IUpdateStrategy limitCurvesCalculatorUpdateStrategy; + private ICalculatorCloningStrategyContainer cloningStrategyContainer; public HasCalculatorsUpdateCloningStrategy( ICloningStrategy cloningStrategy, - IUpdateStrategy forceCalculatorUpdateStrategy, - IUpdateStrategy crackCalculatorUpdateStrategy, - IUpdateStrategy limitCurvesCalculatorUpdateStrategy) + ICalculatorCloningStrategyContainer cloningStrategyContainer) { this.cloningStrategy = cloningStrategy; - this.forceCalculatorUpdateStrategy = forceCalculatorUpdateStrategy; - this.crackCalculatorUpdateStrategy = crackCalculatorUpdateStrategy; - this.limitCurvesCalculatorUpdateStrategy = limitCurvesCalculatorUpdateStrategy; + this.cloningStrategyContainer = cloningStrategyContainer; } public HasCalculatorsUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this( cloningStrategy, - new ForceCalculatorUpdateCloningStrategy(cloningStrategy), - new CrackCalculatorUpdateCloningStrategy(cloningStrategy), - new LimitCurvesCalculatorUpdateCloningStrategy(cloningStrategy) + new CalculatorCloningStrategyContainer(cloningStrategy) ) { } @@ -58,15 +51,19 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces //var newCalculator = calculator.Clone() as ICalculator; if (calculator is IForceCalculator forceCalculator) { - forceCalculatorUpdateStrategy.Update(newCalculator as IForceCalculator, forceCalculator); + cloningStrategyContainer.ForceCalculatorStrategy.Update(newCalculator as IForceCalculator, forceCalculator); } else if (calculator is ICrackCalculator crackCalculator) { - crackCalculatorUpdateStrategy.Update(newCalculator as ICrackCalculator, crackCalculator); + cloningStrategyContainer.CrackCalculatorStrategy.Update(newCalculator as ICrackCalculator, crackCalculator); } else if (calculator is ILimitCurvesCalculator limitCalculator) { - limitCurvesCalculatorUpdateStrategy.Update(newCalculator as ILimitCurvesCalculator, limitCalculator); + cloningStrategyContainer.LimitCurvesCalculatorStrategy.Update(newCalculator as ILimitCurvesCalculator, limitCalculator); + } + else if (calculator is IValueDiagramCalculator valueDiagramCalculator) + { + cloningStrategyContainer.ValueDiagramCalculatorStrategy.Update(newCalculator as IValueDiagramCalculator, valueDiagramCalculator); } else { diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ICalculatorCloningStrategyContainer.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ICalculatorCloningStrategyContainer.cs new file mode 100644 index 0000000..17f56d3 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ICalculatorCloningStrategyContainer.cs @@ -0,0 +1,14 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using StructureHelperLogics.NdmCalculations.Cracking; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces +{ + public interface ICalculatorCloningStrategyContainer + { + IUpdateStrategy ForceCalculatorStrategy { get; } + IUpdateStrategy CrackCalculatorStrategy { get; } + IUpdateStrategy LimitCurvesCalculatorStrategy { get; } + IUpdateStrategy ValueDiagramCalculatorStrategy { get; } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagram.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagram.cs index 66c5ef3..e992c4e 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagram.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagram.cs @@ -5,7 +5,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { public interface IValueDiagram : ISaveable, ICloneable { - IPoint2DRange Point2DRange { get; } + IPoint2DRange Point2DRange { get; set; } public int StepNumber { get; set; } } } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs new file mode 100644 index 0000000..b456928 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs @@ -0,0 +1,44 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Services; +using StructureHelperLogics.NdmCalculations.Primitives; +using StructureHelperLogics.NdmCalculations.Primitives.Logics; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public class ValueDiagramCalculatorUpdateCloningStrategy : IUpdateStrategy + { + private readonly ICloningStrategy cloningStrategy; + private readonly IUpdateStrategy forcesUpdateStrategy; + private readonly IUpdateStrategy primitivesUpdateStrategy; + + public ValueDiagramCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this( + cloningStrategy, + new HasForceActionUpdateCloningStrategy(cloningStrategy), + new HasPrimitivesUpdateCloningStrategy(cloningStrategy)) + { + this.cloningStrategy = cloningStrategy; + } + + + public ValueDiagramCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy, + IUpdateStrategy forcesUpdateStrategy, + IUpdateStrategy primitivesUpdateStrategy) + { + this.cloningStrategy = cloningStrategy; + this.forcesUpdateStrategy = forcesUpdateStrategy; + this.primitivesUpdateStrategy = primitivesUpdateStrategy; + } + + public void Update(IValueDiagramCalculator targetObject, IValueDiagramCalculator sourceObject) + { + CheckObject.IsNull(cloningStrategy); + CheckObject.IsNull(sourceObject); + CheckObject.IsNull(targetObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; } + var sourceData = sourceObject.InputData; + var targetData = targetObject.InputData; + primitivesUpdateStrategy.Update(targetData, sourceData); + forcesUpdateStrategy.Update(targetData, sourceData); + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs index 8534d78..f90a890 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs @@ -4,7 +4,7 @@ using StructureHelperCommon.Services; namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { - internal class ValueDiagramUpdateStrategy : IParentUpdateStrategy + public class ValueDiagramUpdateStrategy : IParentUpdateStrategy { private IUpdateStrategy rangeUpdateStrategy; public bool UpdateChildren { get; set; } = true; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs index 7f3ed6d..674182d 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs @@ -6,7 +6,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { public Guid Id { get; } public int StepNumber { get; set; } = 50; - public IPoint2DRange Point2DRange { get; } = new Point2DRange(Guid.NewGuid()); + public IPoint2DRange Point2DRange { get; set; } = new Point2DRange(Guid.NewGuid()); public ValueDiagram(Guid id)