using LoaderCalculator.Data.Materials; using LoaderCalculator.Data.Ndms; using StructureHelper.Models.Materials; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperLogics.NdmCalculations.Primitives; namespace StructureHelperLogics.NdmCalculations.Triangulations { public static class Triangulation1 { //public static IEnumerable GetNdms(IEnumerable ndmPrimitives, ITriangulationOptions options) //{ // return ndmPrimitives.SelectMany(x => x.GetNdms(options)); // var headMaterials = GetPrimitiveMaterials(ndmPrimitives); // Dictionary materials = GetMaterials(headMaterials, options); // foreach (var ndmPrimitive in ndmPrimitives) // { // IHeadMaterial headMaterial = ndmPrimitive.HeadMaterial; // IMaterial material; // if (materials.TryGetValue(headMaterial.Id, out material) == false) { throw new Exception("Material dictionary is not valid"); } // IEnumerable localNdms = GetNdmsByPrimitive(ndmPrimitive, options); // ndms.AddRange(localNdms); // } //} /// /// Returns dictionary of unique materials by collection of primitives /// /// /// private static Dictionary GetPrimitiveMaterials(IEnumerable ndmPrimitives) { Dictionary headMaterials = new Dictionary(); foreach (var ndmPrimitive in ndmPrimitives) { IHeadMaterial material = ndmPrimitive.HeadMaterial; if (!headMaterials.ContainsKey(material.Id)) { headMaterials.Add(material.Id, material); } } return headMaterials; } /// /// Return dictionary of ndm-materials by dictionary of primirive materials /// /// /// /// /// private static Dictionary GetMaterials(Dictionary PrimitiveMaterials, ITriangulationOptions options) { Dictionary materials = new Dictionary(); IEnumerable keyCollection = PrimitiveMaterials.Keys; IMaterial material; foreach (var id in keyCollection) { IHeadMaterial headMaterial; if (PrimitiveMaterials.TryGetValue(id, out headMaterial) == false) { throw new StructureHelperException("Material dictionary is not valid"); } material = headMaterial.GetLoaderMaterial(options.LimiteState, options.CalcTerm); materials.Add(id, material); } return materials; } private static IEnumerable GetNdmsByPrimitive(INdmPrimitive primitive, ITriangulationOptions options) { List ndms = new (); ndms.AddRange(primitive.GetNdms(options)); return ndms; } } }