using CaeMesh; using System; using System.Collections.Generic; using System.Linq; using System.Text; #pragma warning disable IDE0130 namespace FileInOut.Output.Calculix { [Serializable] internal class CalElement : CalculixKeyword { // Variables protected string _elementType; // 单元类型 protected string _elementSetName; // 单元集合名称 protected List _elements; // 所有单元 protected ConvertPyramidsToEnum _convertPyramidsTo; // Properties // Constructor public CalElement(CalElement calElement) : this(calElement._elementType, calElement._elementSetName, calElement._elements, calElement._convertPyramidsTo) { } public CalElement(string elementType, string elementSetName, List elements) : this(elementType, elementSetName, elements, ConvertPyramidsToEnum.Wedges) { } public CalElement(string elementType, string elementSetName, List elements, ConvertPyramidsToEnum convertPyramidsTo) { _convertPyramidsTo = convertPyramidsTo; // Linear pyramids if (elementType == "C3D5") { _elementSetName = elementSetName; List collapsedElements = new List(); // if (_convertPyramidsTo == ConvertPyramidsToEnum.Wedges) { _elementType = "C3D6"; // foreach (var element in elements) { if (element is LinearPyramidElement lpe) { collapsedElements.Add(lpe.ConvertToWedge()); } } } else // Hexahedrons { _elementType = "C3D8"; // foreach (var element in elements) { if (element is LinearPyramidElement lpe) { collapsedElements.Add(lpe.ConvertToHex()); } } } _elements = collapsedElements; } // Parabolic pyramids else if (elementType == "C3D13") { _elementSetName = elementSetName; List collapsedElements = new List(); // if (_convertPyramidsTo == ConvertPyramidsToEnum.Wedges) { _elementType = "C3D15"; // foreach (var element in elements) { if (element is ParabolicPyramidElement ppe) { collapsedElements.Add(ppe.ConvertToWedge()); } } } else // Hexahedrons { _elementType = "C3D20"; // foreach (var element in elements) { if (element is ParabolicPyramidElement ppe) { collapsedElements.Add(ppe.ConvertToHex()); } } } _elements = collapsedElements; } else { _elementType = elementType; _elementSetName = elementSetName; _elements = elements; } } // Methods public override string GetKeywordString() { string elSet = ""; if (!string.IsNullOrEmpty(_elementSetName)) { elSet = ", Elset=" + _elementSetName; } // ReSharper disable once UseStringInterpolation return string.Format("*Element, Type={0}{1}{2}", _elementType, elSet, Environment.NewLine); } public override string GetDataString() { StringBuilder sb = new StringBuilder(); // Sort 按照ID对单元进行排序 List sortedElements = _elements.OrderBy(element => element.Id).ToList(); foreach (FeElement feElement in sortedElements) { sb.AppendFormat("{0}", feElement.Id); int count = 1; foreach (int nodeId in feElement.NodeIds) { count++; if (count == 17) // 16 entries per line; 17th entry goes in new line { sb.Append(","); sb.AppendLine(); sb.Append(nodeId); } else { sb.AppendFormat(", {0}", nodeId); } } sb.AppendLine(); } return sb.ToString(); } } }