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

@@ -13,7 +13,7 @@ namespace StructureHelperLogics.Models.BeamShears
private string checkResult;
private ICheckEntityLogic<IBeamShearAction> checkActionsLogic;
private ICheckEntityLogic<IBeamShearSection> checkSectionLogic;
private ICheckEntityLogic<IStirrup> checkStirrupLogic;
private ICheckEntityLogic<IHasStirrups> StirrupCheckLogic;
public string CheckResult => checkResult;
public IBeamShearCalculatorInputData InputData { get; set; }
@@ -65,23 +65,12 @@ namespace StructureHelperLogics.Models.BeamShears
private void CheckStirrups()
{
if (InputData.Stirrups is null)
StirrupCheckLogic ??= new HasStirrupsCheckLogic(TraceLogger);
StirrupCheckLogic.Entity = InputData;
if (StirrupCheckLogic.Check() == false)
{
result = false;
TraceMessage("\nCollection of stirrups is null");
}
else
{
checkStirrupLogic ??= new CheckStirrupsLogic(TraceLogger);
foreach (var stirrup in InputData.Stirrups)
{
checkStirrupLogic.Entity = stirrup;
if (checkStirrupLogic.Check() == false)
{
result = false;
checkResult += checkStirrupLogic.CheckResult;
}
}
checkResult += StirrupCheckLogic.CheckResult;
}
}

View File

@@ -1,80 +0,0 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
namespace StructureHelperLogics.Models.BeamShears
{
public class CheckStirrupsLogic : ICheckEntityLogic<IStirrup>
{
private bool result;
private string checkResult;
private ICheckEntityLogic<IStirrupByDensity> checkDensityLogic;
private ICheckEntityLogic<IStirrupByRebar> checkRebarLogic;
public CheckStirrupsLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}
public IStirrup Entity { get; set; }
public string CheckResult => checkResult;
public IShiftTraceLogger? TraceLogger { get; set; }
public bool Check()
{
checkResult = string.Empty;
result = true;
if (Entity is null)
{
result = false;
string errorString = "\nStirrup is not assigned";
TraceMessage(errorString);
}
else
{
if (Entity is IStirrupByDensity density)
{
checkDensityLogic ??= new CheckStirrupsByDensityLogic(TraceLogger);
checkDensityLogic.Entity = density;
if (checkDensityLogic.Check() == false)
{
result = false;
checkResult += checkDensityLogic.CheckResult;
}
}
else if (Entity is IStirrupByRebar rebar)
{
checkRebarLogic ??= new CheckStirrupsByRebarLogic(TraceLogger);
checkRebarLogic.Entity = rebar;
if (checkRebarLogic.Check() == false)
{
result = false;
checkResult += checkRebarLogic.CheckResult;
}
}
else if (Entity is IStirrupGroup stirrupGroup)
{
}
else if (Entity is IStirrupByInclinedRebar inclinedRebar)
{
}
else
{
result = false;
string errorString = ErrorStrings.ObjectTypeIsUnknownObj(Entity) + $": name = {Entity.Name}, id = {Entity.Id}";
TraceMessage(errorString);
}
}
return result;
}
private void TraceMessage(string errorString)
{
checkResult += errorString;
TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error);
}
}
}

View File

@@ -0,0 +1,61 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Calculators;
namespace StructureHelperLogics.Models.BeamShears
{
public class HasStirrupsCheckLogic : ICheckEntityLogic<IHasStirrups>
{
private bool result;
private string checkResult;
private ICheckEntityLogic<IStirrup> checkStirrupLogic;
public IHasStirrups Entity { get; set; }
public string CheckResult => checkResult;
public IShiftTraceLogger? TraceLogger { get; set; }
public HasStirrupsCheckLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}
public bool Check()
{
checkResult = string.Empty;
result = true;
if (Entity is null)
{
result = false;
string errorString = "\nHasSturrup element is not assigned";
TraceMessage(errorString);
}
else
{
if (Entity.Stirrups is null)
{
result = false;
TraceMessage("\nCollection of stirrups is null");
}
checkStirrupLogic ??= new StirrupsCheckLogic(TraceLogger);
foreach (var stirrup in Entity.Stirrups)
{
checkStirrupLogic.Entity = stirrup;
if (checkStirrupLogic.Check() == false)
{
result = false;
checkResult += checkStirrupLogic.CheckResult;
}
}
}
return result;
}
private void TraceMessage(string errorString)
{
checkResult += errorString;
TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error);
}
}
}

View File

@@ -8,13 +8,13 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears
{
internal class CheckStirrupsByDensityLogic : ICheckEntityLogic<IStirrupByDensity>
internal class StirrupByDensityCheckLogic : ICheckEntityLogic<IStirrupByDensity>
{
private const int minDensity = 0;
private bool result;
private string checkResult;
public CheckStirrupsByDensityLogic(IShiftTraceLogger? traceLogger)
public StirrupByDensityCheckLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}

View File

@@ -0,0 +1,105 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
using StructureHelperLogics.Models.Materials;
namespace StructureHelperLogics.Models.BeamShears
{
public class StirrupByInclinedRebarCheckLogic : ICheckEntityLogic<IStirrupByInclinedRebar>
{
private const int minLegCount = 0;
private const double minTransferLength = 0.010;
private const double minStartCoordinate = 0.0;
private const int minAngleOfInclination = 30;
private const int maxAngleOfInclination = 60;
private bool result;
private string checkResult;
private ICheckEntityLogic<IRebarSection> checkRebarSectionLogic;
public IStirrupByInclinedRebar Entity { get; set; }
public string CheckResult => checkResult;
public IShiftTraceLogger? TraceLogger { get; set; }
public StirrupByInclinedRebarCheckLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}
public bool Check()
{
result = true;
checkResult = string.Empty;
if (Entity is null)
{
result = false;
string errorString = "\nInclined rebar is not assigned";
TraceMessage(errorString);
}
else
{
CheckRebarSection();
CheckEntityProperties();
}
return result;
}
private void CheckEntityProperties()
{
if (Entity.StartCoordinate < minStartCoordinate)
{
result = false;
checkResult += $"\nInclined rebar Name = {Entity.Name} start coordinate must be greater than {minStartCoordinate}, but was {Entity.StartCoordinate}";
}
if (Entity.AngleOfInclination < minAngleOfInclination)
{
result = false;
checkResult += $"\nInclined rebar Name = {Entity.Name} angle of inclination must be greater than {minAngleOfInclination}, but was {Entity.AngleOfInclination}";
}
if (Entity.AngleOfInclination > maxAngleOfInclination)
{
result = false;
checkResult += $"\nInclined rebar Name = {Entity.Name} angle of inclination must be less than {maxAngleOfInclination}, but was {Entity.AngleOfInclination}";
}
if (Entity.LegCount < minLegCount)
{
result = false;
checkResult += $"\nInclined rebar Name = {Entity.Name} leg count n = {Entity.LegCount} is less than minimum leg count nmin = {minLegCount}";
}
if (Entity.TransferLength < minTransferLength)
{
result = false;
checkResult += $"\nInclined rebar Name = {Entity.Name} transfer length Ltr = {Entity.TransferLength} is less than minimum trancfer length Ltr,min = {minTransferLength}";
}
}
private void CheckRebarSection()
{
if (Entity.RebarSection is null)
{
result = false;
TraceMessage($"Inclined rebar Name = {Entity.Name} does not have rebar section");
}
else
{
checkRebarSectionLogic ??= new CheckRebarSectionLogic(TraceLogger)
{
Entity = Entity.RebarSection,
MinDiameter = 0.003,
MaxDiameter = 0.036
};
if (checkRebarSectionLogic.Check() == false)
{
result = false;
checkResult += checkRebarSectionLogic.CheckResult;
}
}
}
private void TraceMessage(string errorString)
{
checkResult += errorString;
TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error);
}
}
}

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears
{
internal class CheckStirrupsByRebarLogic : ICheckEntityLogic<IStirrupByRebar>
internal class StirrupByRebarCheckLogic : ICheckEntityLogic<IStirrupByRebar>
{
private const double minDiameter = 0.003;
private const double maxDiameter = 0.025;
@@ -18,7 +18,7 @@ namespace StructureHelperLogics.Models.BeamShears
private bool result;
private string checkResult;
public CheckStirrupsByRebarLogic(IShiftTraceLogger? traceLogger)
public StirrupByRebarCheckLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}

View File

@@ -0,0 +1,52 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
namespace StructureHelperLogics.Models.BeamShears
{
public class StirrupGroupCheckLogic : ICheckEntityLogic<IStirrupGroup>
{
private bool result;
private string checkResult;
private ICheckEntityLogic<IHasStirrups> hasStirrupsCheckLogic;
public IStirrupGroup Entity { get; set; }
public string CheckResult => checkResult;
public IShiftTraceLogger? TraceLogger { get; set; }
public StirrupGroupCheckLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}
public bool Check()
{
checkResult = string.Empty;
result = true;
if (Entity is null)
{
result = false;
string errorString = "\nStirrup group is not assigned";
TraceMessage(errorString);
}
else
{
hasStirrupsCheckLogic ??= new HasStirrupsCheckLogic(TraceLogger);
hasStirrupsCheckLogic.Entity = Entity;
if (hasStirrupsCheckLogic.Check() == false)
{
result = false;
checkResult += "\nStirrup group has some errors";
checkResult += hasStirrupsCheckLogic.CheckResult;
}
}
return result;
}
private void TraceMessage(string errorString)
{
checkResult += errorString;
TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error);
}
}
}

View File

@@ -0,0 +1,120 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
namespace StructureHelperLogics.Models.BeamShears
{
public class StirrupsCheckLogic : ICheckEntityLogic<IStirrup>
{
private bool result;
private string checkResult;
private ICheckEntityLogic<IStirrupByDensity> densityCheckLogic;
private ICheckEntityLogic<IStirrupByRebar> rebarCheckLogic;
private ICheckEntityLogic<IStirrupGroup> stirrupGroupCheckLogic;
private ICheckEntityLogic<IStirrupByInclinedRebar> inclinedRebarCheckLogic;
public StirrupsCheckLogic(IShiftTraceLogger? traceLogger)
{
TraceLogger = traceLogger;
}
public IStirrup Entity { get; set; }
public string CheckResult => checkResult;
public IShiftTraceLogger? TraceLogger { get; set; }
public bool Check()
{
checkResult = string.Empty;
result = true;
if (Entity is null)
{
result = false;
string errorString = "\nStirrup is not assigned";
TraceMessage(errorString);
}
else
{
CheckStirrups();
}
return result;
}
private void CheckStirrups()
{
if (Entity is IStirrupByDensity density)
{
CheckStirrupByDensity(density);
}
else if (Entity is IStirrupByRebar rebar)
{
CheckStirrupByRebar(rebar);
}
else if (Entity is IStirrupGroup stirrupGroup)
{
CheckStirrupGroup(stirrupGroup);
}
else if (Entity is IStirrupByInclinedRebar inclinedRebar)
{
CheckInclinedRebar(inclinedRebar);
}
else
{
result = false;
string errorString = ErrorStrings.ObjectTypeIsUnknownObj(Entity) + $": name = {Entity.Name}, id = {Entity.Id}";
TraceMessage(errorString);
}
}
private void CheckInclinedRebar(IStirrupByInclinedRebar inclinedRebar)
{
inclinedRebarCheckLogic ??= new StirrupByInclinedRebarCheckLogic(TraceLogger);
inclinedRebarCheckLogic.Entity = inclinedRebar;
if (inclinedRebarCheckLogic.Check() == false)
{
result = false;
checkResult += inclinedRebarCheckLogic.CheckResult;
}
}
private void CheckStirrupGroup(IStirrupGroup stirrupGroup)
{
stirrupGroupCheckLogic ??= new StirrupGroupCheckLogic(TraceLogger);
stirrupGroupCheckLogic.Entity = stirrupGroup;
if (stirrupGroupCheckLogic.Check() == false)
{
result = false;
checkResult += stirrupGroupCheckLogic.CheckResult;
}
}
private void CheckStirrupByRebar(IStirrupByRebar rebar)
{
rebarCheckLogic ??= new StirrupByRebarCheckLogic(TraceLogger);
rebarCheckLogic.Entity = rebar;
if (rebarCheckLogic.Check() == false)
{
result = false;
checkResult += rebarCheckLogic.CheckResult;
}
}
private void CheckStirrupByDensity(IStirrupByDensity density)
{
densityCheckLogic ??= new StirrupByDensityCheckLogic(TraceLogger);
densityCheckLogic.Entity = density;
if (densityCheckLogic.Check() == false)
{
result = false;
checkResult += densityCheckLogic.CheckResult;
}
}
private void TraceMessage(string errorString)
{
checkResult += errorString;
TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error);
}
}
}