Add stirrup update strategy

This commit is contained in:
Evgeny Redikultsev
2025-03-23 21:24:22 +05:00
parent aec85e37f5
commit 15bb7030cc
44 changed files with 524 additions and 107 deletions

View File

@@ -44,7 +44,7 @@ namespace StructureHelperLogics.Models.BeamShears
{
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
InitializeStrategies();
double supportShearForce = AxisAction.SupportShearForce;
double supportShearForce = AxisAction.SupportForce.ForceTuple.Qx;
TraceLogger?.AddMessage($"Shear force at support Qmax = {supportShearForce}(N)");
TraceLogger?.AddMessage($"Start of inclined section a,start = {InclinedSection.StartCoord}(m)");
TraceLogger?.AddMessage($"End of inclined section a,end = {InclinedSection.EndCoord}(m)");

View File

@@ -1,9 +1,7 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperLogics.Models.BeamShears
{

View File

@@ -20,6 +20,6 @@ namespace StructureHelperLogics.Models.BeamShears
/// <param name="startCoord">Coordinate of start point, m</param>
/// <param name="endCoord">Coordinate of end point, m</param>
/// <returns>Summary force, N</returns>
double GetSumShearForce(IBeamShearLoad beamShearLoad, double startCoord, double endCoord);
double GetSumShearForce(IBeamSpanLoad beamShearLoad, double startCoord, double endCoord);
}
}

View File

@@ -45,7 +45,7 @@ namespace StructureHelperLogics.Models.BeamShears
{
getFactorLogic ??= new GetFactorByFactoredCombinationProperty()
{
CombinationProperty = InputData.AxisAction.FactoredCombinationProperty,
CombinationProperty = InputData.AxisAction.SupportForce.CombinationProperty,
LimitState = InputData.LimitState,
CalcTerm = InputData.CalcTerm
};

View File

@@ -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 StructureHelperLogics.Models.BeamShears.Logics
{
public class StirrupBaseUpdateStrategy : IUpdateStrategy<IStirrup>
{
public void Update(IStirrup targetObject, IStirrup sourceObject)
{
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
targetObject.Name = sourceObject.Name;
targetObject.CompressedGap = sourceObject.CompressedGap;
}
}
}

View File

@@ -0,0 +1,22 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
//Copyright (c) 2026 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperLogics.Models.BeamShears.Logics
{
public class StirrupByDensityUpdateStrategy : IUpdateStrategy<IStirrupByDensity>
{
private IUpdateStrategy<IStirrup>? baseUpdateStrategy;
public void Update(IStirrupByDensity targetObject, IStirrupByDensity sourceObject)
{
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
baseUpdateStrategy ??= new StirrupBaseUpdateStrategy();
baseUpdateStrategy.Update(targetObject, sourceObject);
targetObject.StirrupDensity = sourceObject.StirrupDensity;
}
}
}

View File

@@ -0,0 +1,29 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using StructureHelperLogics.Models.Materials;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears.Logics
{
public class StirrupByUniformRebarUpdateStrategy : IUpdateStrategy<IStirrupByUniformRebar>
{
private IUpdateStrategy<IStirrup>? baseUpdateStrategy;
public void Update(IStirrupByUniformRebar targetObject, IStirrupByUniformRebar sourceObject)
{
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
baseUpdateStrategy ??= new StirrupBaseUpdateStrategy();
baseUpdateStrategy.Update(targetObject, sourceObject);
CheckObject.IsNull(sourceObject.Material);
targetObject.Material = sourceObject.Material.Clone() as IReinforcementLibMaterial;
targetObject.Diameter = sourceObject.Diameter;
targetObject.LegCount = sourceObject.LegCount;
targetObject.Step = sourceObject.Step;
}
}
}

View File

@@ -0,0 +1,61 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears.Logics
{
public class StirrupUpdateStrategy : IUpdateStrategy<IStirrup>
{
private IUpdateStrategy<IStirrupByDensity> densityUpdateStrategy;
private IUpdateStrategy<IStirrupByUniformRebar> uniformUpdateStrategy;
public void Update(IStirrup targetObject, IStirrup sourceObject)
{
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
if (sourceObject is IStirrupByDensity density)
{
UpdateByDensity(targetObject, density);
}
else if (sourceObject is IStirrupByUniformRebar stirrupByUniformRebar)
{
UpdateByUniformRebar(targetObject, stirrupByUniformRebar);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(sourceObject));
}
}
private void UpdateByUniformRebar(IStirrup targetObject, IStirrupByUniformRebar stirrupByUniformRebar)
{
uniformUpdateStrategy ??= new StirrupByUniformRebarUpdateStrategy();
if (targetObject is IStirrupByUniformRebar targetUniformRebar)
{
uniformUpdateStrategy.Update(targetUniformRebar, stirrupByUniformRebar);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(targetObject));
}
}
private void UpdateByDensity(IStirrup targetObject, IStirrupByDensity density)
{
densityUpdateStrategy ??= new StirrupByDensityUpdateStrategy();
if (targetObject is IStirrupByDensity targetDensity)
{
densityUpdateStrategy.Update(targetDensity, density);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(targetObject));
}
}
}
}

View File

@@ -22,7 +22,7 @@ namespace StructureHelperLogics.Models.BeamShears
TraceLogger = traceLogger;
}
public double GetSumShearForce(IBeamShearLoad beamShearLoad, double startCoord, double endCoord)
public double GetSumShearForce(IBeamSpanLoad beamShearLoad, double startCoord, double endCoord)
{
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
if (beamShearLoad is IConcentratedForce concentratedForce)

View File

@@ -21,7 +21,7 @@ namespace StructureHelperLogics.Models.BeamShears
TraceLogger = traceLogger;
}
public double GetSumShearForce(IBeamShearLoad beamShearLoad, double startCoord, double endCoord)
public double GetSumShearForce(IBeamSpanLoad beamShearLoad, double startCoord, double endCoord)
{
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
if (beamShearLoad is IDistributedLoad distributedLoad)

View File

@@ -2,7 +2,6 @@
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Loggers;
using StructureHelperLogics.Models.BeamShears.Logics;
namespace StructureHelperLogics.Models.BeamShears
{
@@ -27,7 +26,7 @@ namespace StructureHelperLogics.Models.BeamShears
TraceLogger = traceLogger;
}
public double GetSumShearForce(IBeamShearLoad beamShearLoad, double startCoord, double endCoord)
public double GetSumShearForce(IBeamSpanLoad beamShearLoad, double startCoord, double endCoord)
{
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
if (beamShearLoad is IDistributedLoad distributedLoad)