Files
StructureHelper/StructureHelperLogics/Models/Templates/CrossSections/RCs/SectionTemplate.cs
2023-05-06 21:10:02 +05:00

79 lines
2.8 KiB
C#

using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Forces;
using StructureHelperLogics.Models.CrossSections;
using StructureHelperLogics.Models.Templates.RCs;
using StructureHelperLogics.NdmCalculations.Analyses;
using StructureHelperLogics.NdmCalculations.Primitives;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.Models.Templates.CrossSections.RCs
{
public class SectionTemplate : ICrossSectionTemplate
{
IForceLogic forceLogic;
IMaterialLogic materialLogic;
IRCGeometryLogic geometryLogic;
ICalculatorLogic calculatorLogic;
IEnumerable<INdmPrimitive> primitives;
IEnumerable<IForceAction> combinations;
IEnumerable<INdmCalculator> calculators;
public SectionTemplate(IRCGeometryLogic geometryLogic)
{
this.geometryLogic = geometryLogic;
materialLogic = new MaterialLogic();
forceLogic = new ForceLogic();
calculatorLogic = new CalculatorLogic();
}
public ICrossSection GetCrossSection()
{
ICrossSection section = new CrossSection();
var repository = section.SectionRepository;
var materials = materialLogic.GetHeadMaterials();
geometryLogic.HeadMaterials = materials;
primitives = geometryLogic.GetNdmPrimitives();
foreach (var primitive in primitives)
{
primitive.CrossSection = section;
}
repository.HeadMaterials.AddRange(materials);
repository.Primitives.AddRange(primitives);
combinations = forceLogic.GetCombinationList();
repository.ForceActions.AddRange(combinations);
calculators = calculatorLogic.GetNdmCalculators();
AddAllForcesToCalculators();
AddAllPrimitivesToCalculator();
repository.CalculatorsList.AddRange(calculators);
return section;
}
private void AddAllForcesToCalculators()
{
foreach (var calculator in calculators)
{
if (calculator is IHasForceCombinations)
{
var forceCalculator = calculator as IHasForceCombinations;
forceCalculator.ForceActions.AddRange(combinations);
}
}
}
private void AddAllPrimitivesToCalculator()
{
foreach (var calculator in calculators)
{
if (calculator is IHasPrimitives)
{
var primitiveCalculator = calculator as IHasPrimitives;
primitiveCalculator.Primitives.AddRange(primitives);
}
}
}
}
}