using Autodesk.Revit.DB; using System; using System.Collections.Generic; namespace HStation.RevitDev.RevitRelationMap.Common { public class MEPHelper { /// /// 获取MEP构件连接关系 /// public static List GetConnecters(Element elem) { var MEPConnecter = new List(); if (elem is MEPCurve mepCurve) { return GetMEPConnecters(mepCurve); } else if (elem is FamilyInstance fi) { return GetMEPConnecters(fi); } return MEPConnecter; } /// /// 获取MEP构件连接关系 /// /// /// private static List GetMEPConnecters(MEPCurve elem) { var MEPConnecter = new List(); try { ConnectorSet connectors = elem.ConnectorManager?.Connectors; if (connectors == null) { return MEPConnecter; } int connectIndex = -1; foreach (Connector conn in connectors) { connectIndex++; if (conn.IsConnected == false || conn.MEPSystem == null) { continue; } ConnectorSet connectorSet = conn.AllRefs; var systemId = conn.MEPSystem.UniqueId; foreach (Connector currentConnector in connectorSet) { if (currentConnector == null) { continue; } if (currentConnector.Owner.UniqueId == elem.UniqueId || currentConnector.Owner.UniqueId == systemId) { continue; } ConnectorInfo data = new ConnectorInfo { Index = connectIndex, ElementId = currentConnector.Owner.Id.IntegerValue, Position = $"{currentConnector.Origin.X.InnerToMM():f6},{currentConnector.Origin.Y.InnerToMM():f6},{currentConnector.Origin.Z.InnerToMM():f6}" }; MEPConnecter.Add(data); } } return MEPConnecter; } catch (Exception ex) { return MEPConnecter; } } /// /// 获取MEP构件连接关系 /// /// /// private static List GetMEPConnecters(FamilyInstance elem) { var MEPConnecter = new List(); try { var mepModel = elem.MEPModel; ConnectorSet connectors = mepModel.ConnectorManager?.Connectors; if (connectors == null) { return MEPConnecter; } int connectIndex = -1; foreach (Connector conn in connectors) { connectIndex++; if (conn.IsConnected == false || conn.MEPSystem==null) { continue; } ConnectorSet connectorSet = conn.AllRefs; var systemId = conn.MEPSystem.UniqueId; foreach (Connector currentConnector in connectorSet) { if (currentConnector == null) { continue; } if (currentConnector.Owner.UniqueId == elem.UniqueId || currentConnector.Owner.UniqueId == systemId) { continue; } ConnectorInfo data = new ConnectorInfo { Index = connectIndex, ElementId = currentConnector.Owner.Id.IntegerValue, Position = $"{currentConnector.Origin.X.InnerToMM():f6},{currentConnector.Origin.Y.InnerToMM():f6},{currentConnector.Origin.Z.InnerToMM():f6}" }; MEPConnecter.Add(data); } } return MEPConnecter; } catch (Exception ex) { return MEPConnecter; } } } public static class StaticUtils { /// /// 长度:Revit内置单位转毫米 /// /// /// public static double? InnerToMM(this object obj) { if (obj == null) return null; try { return UnitUtils.ConvertFromInternalUnits(Convert.ToDouble(obj), /*DisplayUnitType.DUT_MILLIMETERS*/ UnitTypeId.Millimeters); } catch (Exception ex) { return null; } } /// /// 英尺转毫米 /// /// /// public static double FeetToMM(this object obj, int prec = -1) { try { return Convert.ToDouble(obj) * 304.8; } catch (Exception ex) { return double.MinValue; } } } public class ConnectorInfo { public int Index { get; set; } public int ElementId { get; set; } public string Position { get; set; } } }