using Autodesk.Revit.DB; using Autodesk.Revit.DB.Electrical; using Autodesk.Revit.DB.Mechanical; using Autodesk.Revit.DB.Plumbing; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FWindSoft.Revit.Utils { /// /// 管件类型枚举 /// public enum FittingType { /// /// 未定 /// Undefined = -1, /// /// 弯头 /// Elbows = 1, /// /// 三通 /// Junctions = 2, /// /// 四通 /// Crosses = 3, /// /// 变径 /// Transitions = 4, /// /// 活接头 /// Unions = 5, /// /// 方形到原型变径 /// TransitionsRectangularToRound = 7, /// /// 方形到椭圆变径 /// TransitionsRectangularToOval = 8, /// /// 椭圆到原型变径 /// TransitionsOvalToRound = 9, /// /// 堵头 /// Caps = 10 } /// /// 管件工具 /// public static class FittingUtils { #region 私有方法 /// /// 判断传入类型的的分类 /// /// /// -1 无效;0 线管桥架;1水管风管 private static int JudgeType(MEPCurveType mepCurveType) { int flag = -1; if (mepCurveType is ConduitType || mepCurveType is CableTrayType) { return 0; } if (mepCurveType is PipeType || mepCurveType is DuctType) { return 1; } return flag; } /// /// FittingType转换成布线规则 /// /// /// private static RoutingPreferenceRuleGroupType ConvertToRuleType(FittingType fittingType) { return (RoutingPreferenceRuleGroupType)fittingType; } /// /// FittingType转换成对应参数 /// /// /// private static BuiltInParameter ConvertToBitParameter(FittingType fittingType) { BuiltInParameter use = BuiltInParameter.INVALID; switch (fittingType) { case FittingType.Elbows: use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_BEND_PARAM; break; case FittingType.Junctions: use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_TEE_PARAM; break; case FittingType.Crosses: use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_CROSS_PARAM; break; case FittingType.Transitions: use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_TRANSITION_PARAM; break; case FittingType.Unions: use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_UNION_PARAM; break; case FittingType.Caps: use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_CAP_PARAM; break; default: break; } return use; } #endregion /// /// MepCurveType增加指定类型的管件 /// /// /// 管件类型 /// public static void AddFitting(MEPCurveType mepCurveType, FittingType fittingType, ElementId elementId) { var flag = JudgeType(mepCurveType); elementId = elementId??ElementId.InvalidElementId; if (flag==0) { mepCurveType.AddFitting(ConvertToBitParameter(fittingType), elementId); } else if(flag==1) { mepCurveType.AddRoutingRule(ConvertToRuleType(fittingType), elementId); } } /// /// MepCurveType移除指定管件 /// /// /// public static void RemoveFitting(MEPCurveType mepCurveType, FittingType fittingType) { var flag = JudgeType(mepCurveType); if (flag == 0) { mepCurveType.RemoveFitting(ConvertToBitParameter(fittingType)); } else if (flag == 1) { mepCurveType.RemoveRoutingRule(ConvertToRuleType(fittingType)); } } /// /// MepCurveType获取指定管件 /// /// /// /// public static ElementId GetFitting(MEPCurveType mepCurveType, FittingType fittingType) { ElementId elmentId = null; var flag = JudgeType(mepCurveType); if (flag == 0) { elmentId=mepCurveType.GetFitting(ConvertToBitParameter(fittingType)); } else if (flag == 1) { var rule = mepCurveType.GetRoutingRule(ConvertToRuleType(fittingType)); if(rule!=null) { elmentId = rule.MEPPartId; } } return elmentId; } } }