using Autodesk.Revit.DB; using Autodesk.Revit.DB.Electrical; using FWindSoft.SystemExtensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FWindSoft.Revit { /// /// 线管相关类型扩展 /// public static class ConduitExtension { /// /// 获取项目中所有线管类型 /// /// /// public static List GetConduitTypes(this Document doc) { List list = doc.GetElements(); return list; } /// /// 获取线管类型 /// /// /// public static ConduitType GetConduitType(this Document doc, string typeName) { var list = doc.GetConduitTypes(); if (list == null) return default(ConduitType); ConduitType wireTye = list.FirstOrDefault(t => t.Name.Equals(typeName)); return wireTye ?? list[0].DuplicateT(typeName); } /// /// 获取较较大直径的线管 /// /// /// /// public static Conduit GetLargerDiameter(this Conduit first, Conduit second) { return first.Diameter.MoreEqual(second.Diameter) ? first : second; } /// /// 获取较较小直径的线管 /// /// /// /// public static Conduit GetSmallerDiameter(this Conduit first, Conduit second) { return first.Diameter.LessEqual(second.Diameter) ? first : second; } /// /// 获取线管类型可使用的直径尺寸 /// /// 线管类型 /// public static List GetConduitSizes(this ConduitType conduitType) { var document = conduitType.Document; var standard = document.GetElement(conduitType.GetParameterElementId(BuiltInParameter.CONDUIT_STANDARD_TYPE_PARAM)); var standardName = standard.Name.Trim(); ConduitSizeSettings sizeSettings = ConduitSizeSettings.GetConduitSizeSettings(document); ConduitSizes useConduitSizes = null; foreach (var sizeItem in sizeSettings) { if (sizeItem.Key.Trim() == standardName) { useConduitSizes = sizeItem.Value; break; } } List conduitSizes = new List(); if (useConduitSizes == null) { return conduitSizes; } foreach (var size in useConduitSizes) { conduitSizes.Add(size); } return conduitSizes; } } }