Add value diagram calculator saving

This commit is contained in:
Evgeny Redikultsev
2025-11-16 13:56:09 +05:00
parent 43f46b83af
commit f7e60e0bb3
30 changed files with 786 additions and 80 deletions

View File

@@ -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<IForceCalculator> ForceCalculatorStrategy => new ForceCalculatorUpdateCloningStrategy(cloningStrategy);
public IUpdateStrategy<ICrackCalculator> CrackCalculatorStrategy => new CrackCalculatorUpdateCloningStrategy(cloningStrategy);
public IUpdateStrategy<ILimitCurvesCalculator> LimitCurvesCalculatorStrategy => new LimitCurvesCalculatorUpdateCloningStrategy(cloningStrategy);
public IUpdateStrategy<IValueDiagramCalculator> ValueDiagramCalculatorStrategy => new ValueDiagramCalculatorUpdateCloningStrategy(cloningStrategy);
public CalculatorCloningStrategyContainer(ICloningStrategy cloningStrategy)
{
this.cloningStrategy = cloningStrategy;
}
}
}

View File

@@ -1,5 +1,4 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Services;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.NdmCalculations.Primitives.Logics;

View File

@@ -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<IHasCalculators>
{
private ICloningStrategy cloningStrategy;
private IUpdateStrategy<IForceCalculator> forceCalculatorUpdateStrategy;
private IUpdateStrategy<ICrackCalculator> crackCalculatorUpdateStrategy;
private IUpdateStrategy<ILimitCurvesCalculator> limitCurvesCalculatorUpdateStrategy;
private ICalculatorCloningStrategyContainer cloningStrategyContainer;
public HasCalculatorsUpdateCloningStrategy(
ICloningStrategy cloningStrategy,
IUpdateStrategy<IForceCalculator> forceCalculatorUpdateStrategy,
IUpdateStrategy<ICrackCalculator> crackCalculatorUpdateStrategy,
IUpdateStrategy<ILimitCurvesCalculator> 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
{

View File

@@ -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<IForceCalculator> ForceCalculatorStrategy { get; }
IUpdateStrategy<ICrackCalculator> CrackCalculatorStrategy { get; }
IUpdateStrategy<ILimitCurvesCalculator> LimitCurvesCalculatorStrategy { get; }
IUpdateStrategy<IValueDiagramCalculator> ValueDiagramCalculatorStrategy { get; }
}
}

View File

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

View File

@@ -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<IValueDiagramCalculator>
{
private readonly ICloningStrategy cloningStrategy;
private readonly IUpdateStrategy<IHasForceActions> forcesUpdateStrategy;
private readonly IUpdateStrategy<IHasPrimitives> primitivesUpdateStrategy;
public ValueDiagramCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this(
cloningStrategy,
new HasForceActionUpdateCloningStrategy(cloningStrategy),
new HasPrimitivesUpdateCloningStrategy(cloningStrategy))
{
this.cloningStrategy = cloningStrategy;
}
public ValueDiagramCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy,
IUpdateStrategy<IHasForceActions> forcesUpdateStrategy,
IUpdateStrategy<IHasPrimitives> 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);
}
}
}

View File

@@ -4,7 +4,7 @@ using StructureHelperCommon.Services;
namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams
{
internal class ValueDiagramUpdateStrategy : IParentUpdateStrategy<IValueDiagram>
public class ValueDiagramUpdateStrategy : IParentUpdateStrategy<IValueDiagram>
{
private IUpdateStrategy<IPoint2DRange> rangeUpdateStrategy;
public bool UpdateChildren { get; set; } = true;

View File

@@ -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)