using Autodesk.Revit.DB; using Autodesk.Revit.DB.Plumbing; using Glodon.Revit.Utility; using HStation.RevitDev.RevitDataExport.Common; using HStation.RevitDev.RevitDataExport.Utility; using HStation.RevitDev.RevitDataExport.Utils; using System; using System.Collections.Generic; namespace HStation.RevitDev.RevitDataExport.Parser { /// /// 管道 /// public class PipeParser : BaseParser { public override List FilterCategories { get { return new List { BuiltInCategory.OST_PipeCurves }; } } public override List FilterRegexes { get { return new List { "" }; } } public override string GetParserName() { return "管道"; } public override List> PropertyParse(Element elem) { var result = new List>(); var pipe = elem as Pipe; if (pipe == null) { return result; } var connectInfos = MEPHelper.GetConnecters(pipe); result.AddRange(CommonPropertyParse(elem)); for (int i = 1; i <= 2; i++) { if (connectInfos.Count >= i) { result.Add(new Tuple($"连接点{i}", connectInfos[i - 1]?.ElementId.ToString())); } else { result.Add(new Tuple($"连接点{i}", string.Empty)); } } //端点 var location = pipe.Location as LocationCurve; if (location != null) { var start = location.Curve.GetEndPoint(0); var end = location.Curve.GetEndPoint(1); var standardStart = new XYZ(start.X * 304.8, start.Y * 304.8, start.Z * 304.8); var standardEnd = new XYZ(end.X * 304.8, end.Y * 304.8, end.Z * 304.8); result.Add(new Tuple("端点", JsonHelper.ToJson(new { standardStart, standardEnd }))); } // 直径 result.Add(new Tuple($"直径", pipe.Diameter.FeetToMM().ToString())); // 长度 var length = ParameterOperator.GetParameterValueAsString(pipe, "长度"); //(pipe.Location as LocationCurve).Curve.Length.FeetToMM(); result.Add(new Tuple($"长度", (decimal.Parse(length.ToString()) / 1000).ToString())); // 流量 var flow = ParameterOperator.GetParameterValueAsDouble(pipe, "流量"); result.Add(new Tuple($"流量", flow.ToString())); // 流速 var flowSpeed = ParameterOperator.GetParameterValueAsDouble(pipe, "流速"); result.Add(new Tuple($"流速", flowSpeed.ToString())); // 压力损失 var pressureLoss = ParameterOperator.GetParameterValueAsDouble(pipe, "压力损失"); result.Add(new Tuple($"压力损失", pressureLoss.ToString())); // 比摩阻 var specificFriction = ParameterOperator.GetParameterValueAsDouble(pipe, "比摩阻"); result.Add(new Tuple($"比摩阻", specificFriction.ToString())); return result; } } }