using System.Collections.Generic; using System.Linq; using System.Security.Cryptography.X509Certificates; using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Services.Forces; namespace StructureHelperCommon.Models.Forces { /// public class ForceCombinationList : IForceCombinationList { /// public string Name { get; set; } /// public bool SetInGravityCenter { get; set; } /// public IPoint2D ForcePoint { get; private set; } /// public List DesignForces { get; private set; } public ForceCombinationList() { SetInGravityCenter = true; ForcePoint = new Point2D() { X = 0, Y = 0 }; DesignForces = new List { new DesignForceTuple(LimitStates.ULS, CalcTerms.ShortTerm), new DesignForceTuple(LimitStates.ULS, CalcTerms.LongTerm), new DesignForceTuple(LimitStates.SLS, CalcTerms.ShortTerm), new DesignForceTuple(LimitStates.SLS, CalcTerms.LongTerm) }; } /// public object Clone() { var newItem = new ForceCombinationList(); newItem.Name = Name + " copy"; newItem.SetInGravityCenter = SetInGravityCenter; newItem.ForcePoint.X = ForcePoint.X; newItem.ForcePoint.Y = ForcePoint.Y; newItem.DesignForces.Clear(); foreach (var item in DesignForces) { var newForce = item.Clone() as IDesignForceTuple; newItem.DesignForces.Add(newForce); } return newItem; } /// public List GetCombination() { var result = new List(); var limitStates = new List() { LimitStates.ULS, LimitStates.SLS }; var calcTerms = new List() { CalcTerms.ShortTerm, CalcTerms.LongTerm }; foreach (var limitState in limitStates) { foreach (var calcTerm in calcTerms) { var designForceTuple = new DesignForceTuple() { LimitState = limitState, CalcTerm = calcTerm }; var forceTupleList = DesignForces.Where(x => x.LimitState == limitState & x.CalcTerm == calcTerm); foreach (var item in forceTupleList) { designForceTuple.ForceTuple = ForceTupleService.SumTuples(designForceTuple.ForceTuple, item.ForceTuple); } result.Add(designForceTuple); } } return result; } } }