using StructureHelper.Models.Materials; using StructureHelperLogics.Models.Primitives; using StructureHelperLogics.NdmCalculations.Primitives; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Media3D; namespace StructureHelperLogics.Models.Templates.CrossSections.RCs { public class CircleGeometryLogic : IRCGeometryLogic { ICircleTemplate template; CirclePrimitive concreteBlock; public IEnumerable HeadMaterials { get; set; } public CircleGeometryLogic(ICircleTemplate template) { this.template = template; } public IEnumerable GetNdmPrimitives() { List primitives = new List(); primitives.AddRange(GetConcretePrimitives()); primitives.AddRange(GetReinfrocementPrimitives()); return primitives; } private IEnumerable GetConcretePrimitives() { var diameter = template.Shape.Diameter; var concreteMaterial = HeadMaterials.ToList()[0]; var primitives = new List(); concreteBlock = new CirclePrimitive() { Diameter = diameter, Name = "Concrete block", HeadMaterial = concreteMaterial }; primitives.Add(concreteBlock); return primitives; } private IEnumerable GetReinfrocementPrimitives() { var reinforcementMaterial = HeadMaterials.ToList()[1]; var radius = template.Shape.Diameter / 2 - template.CoverGap; var dAngle = 2d * Math.PI / template.BarCount; var barArea = Math.PI* template.BarDiameter* template.BarDiameter / 4d; var primitives = new List(); for (int i = 0; i < template.BarCount; i++) { var angle = i * dAngle; var x = radius * Math.Sin(angle); var y = radius * Math.Cos(angle); var point = new ReinforcementPrimitive() { CenterX = x, CenterY = y, Area = barArea, Name = "Left bottom point", HeadMaterial = reinforcementMaterial, SurroundingPrimitive=concreteBlock }; primitives.Add(point); } return primitives; } } }