Add Design range for shear

This commit is contained in:
RedikultsevEvg
2025-07-18 21:20:45 +05:00
parent efb0fa6e1e
commit ddf075bffd
48 changed files with 1066 additions and 163 deletions

View File

@@ -0,0 +1,42 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
namespace StructureHelperLogics.Models.BeamShears
{
public class BeamShearCalculatorInputDataUpdateStrategy : IParentUpdateStrategy<IBeamShearCalculatorInputData>
{
private IUpdateStrategy<IHasBeamShearActions>? hasActionUpdateStrategy;
private IUpdateStrategy<IHasStirrups>? hasStirrupsUpdateStrategy;
private IUpdateStrategy<IHasBeamShearSections> hasSectionsUpdateStrategy;
private IUpdateStrategy<IBeamShearDesignRangeProperty> designRangeUpdateStrategy;
public bool UpdateChildren { get; set; } = true;
public void Update(IBeamShearCalculatorInputData targetObject, IBeamShearCalculatorInputData sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
CheckObject.IsNull(targetObject, ErrorStrings.TargetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; };
if (UpdateChildren)
{
InitializeStrategies();
hasActionUpdateStrategy?.Update(targetObject, sourceObject);
hasSectionsUpdateStrategy?.Update(targetObject, sourceObject);
hasStirrupsUpdateStrategy?.Update(targetObject, sourceObject);
CheckObject.IsNull(sourceObject.DesignRangeProperty);
CheckObject.IsNull(targetObject.DesignRangeProperty);
designRangeUpdateStrategy.Update(targetObject.DesignRangeProperty, sourceObject.DesignRangeProperty);
}
}
private void InitializeStrategies()
{
hasActionUpdateStrategy ??= new HasBeamShearActionUpdateStrategy();
hasStirrupsUpdateStrategy ??= new HasStirrupsUpdateStrategy();
hasSectionsUpdateStrategy ??= new HasBeamShearSectionUpdateStrategy();
designRangeUpdateStrategy ??= new BeamShearDesignRangePropertyUpdateStrategy();
}
}
}

View File

@@ -0,0 +1,19 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
namespace StructureHelperLogics.Models.BeamShears
{
public class BeamShearDesignRangePropertyUpdateStrategy : IUpdateStrategy<IBeamShearDesignRangeProperty>
{
public void Update(IBeamShearDesignRangeProperty targetObject, IBeamShearDesignRangeProperty sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
CheckObject.IsNull(targetObject, ErrorStrings.TargetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
targetObject.AbsoluteRangeValue = sourceObject.AbsoluteRangeValue;
targetObject.RelativeEffectiveDepthRangeValue = sourceObject.RelativeEffectiveDepthRangeValue;
targetObject.StepCount = sourceObject.StepCount;
}
}
}

View File

@@ -6,9 +6,12 @@ using StructureHelperLogics.NdmCalculations.Primitives;
namespace StructureHelperLogics.Models.BeamShears
{
public class StirrupByInclinedRebarUpdateStrategy : IUpdateStrategy<IStirrupByInclinedRebar>
public class StirrupByInclinedRebarUpdateStrategy : IParentUpdateStrategy<IStirrupByInclinedRebar>
{
private IUpdateStrategy<IStirrup>? baseUpdateStrategy;
public bool UpdateChildren { get; set; } = true;
public void Update(IStirrupByInclinedRebar targetObject, IStirrupByInclinedRebar sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
@@ -20,8 +23,11 @@ namespace StructureHelperLogics.Models.BeamShears
targetObject.TransferLength = sourceObject.TransferLength;
targetObject.AngleOfInclination = sourceObject.AngleOfInclination;
targetObject.LegCount = sourceObject.LegCount;
CheckObject.IsNull(sourceObject.RebarSection, "Rebar section");
targetObject.RebarSection = sourceObject.RebarSection.Clone() as IRebarSection;
if (UpdateChildren)
{
CheckObject.IsNull(sourceObject.RebarSection, "Rebar section");
targetObject.RebarSection = sourceObject.RebarSection.Clone() as IRebarSection;
}
}
}
}

View File

@@ -5,10 +5,12 @@ using StructureHelperLogics.NdmCalculations.Primitives;
namespace StructureHelperLogics.Models.BeamShears
{
public class StirrupGroupUpdateStrategy : IUpdateStrategy<IStirrupGroup>
public class StirrupGroupUpdateStrategy : IParentUpdateStrategy<IStirrupGroup>
{
private StirrupBaseUpdateStrategy baseUpdateStrategy;
public bool UpdateChildren { get; set; } = true;
public void Update(IStirrupGroup targetObject, IStirrupGroup sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
@@ -16,6 +18,14 @@ namespace StructureHelperLogics.Models.BeamShears
if (ReferenceEquals(targetObject, sourceObject)) { return; }
baseUpdateStrategy ??= new StirrupBaseUpdateStrategy();
baseUpdateStrategy.Update(targetObject, sourceObject);
if (UpdateChildren == true)
{
UpdateTargetChildren(targetObject, sourceObject);
}
}
private static void UpdateTargetChildren(IStirrupGroup targetObject, IStirrupGroup sourceObject)
{
CheckObject.IsNull(sourceObject.Stirrups);
CheckObject.IsNull(targetObject.Stirrups);
targetObject.Stirrups.Clear();