using Autodesk.Revit.DB; using Autodesk.Revit.DB.Plumbing; using Autodesk.Revit.UI; using HStation.RevitDev.RevitDataExport.Common; using System.Collections.Generic; using System.Linq; namespace HStation.RevitDev.RevitDataExport.Utility { public class SystemCheckUtils { public static void SystemCheck(ExternalCommandData data) { UIDocument uidoc = data.Application.ActiveUIDocument; Document doc = uidoc.Document; List ids = new List(); foreach (var id in GlobalResource.RevitModels.GetIds()) { var element = doc.GetElement(new ElementId(int.Parse(id))); if (element == null) { continue; } bool checkResult = CheckElement(element); if (!checkResult) { ids.Add(new ElementId(int.Parse(id))); } } uidoc.Selection.SetElementIds(ids); } private static bool CheckElement(Element element) { //管道两端都必须有节点构件连接 if (element is Pipe pipe) { var connectors = pipe.ConnectorManager.Connectors; foreach (Connector connector in connectors) { var connectElems = connector.GetConnectorElements(); if (connectElems.Count < 1) { return false; } var fi = connectElems[0] as FamilyInstance; if (fi == null) { return false; } foreach (var elem in connectElems) { var id = elem.Id.IntegerValue.ToString(); if (!GlobalResource.RevitModels.Contains(id)) { return false; } } } return true; } //节点不能连接节点 else if (element is FamilyInstance fi) { var mepModel = fi.MEPModel; if (mepModel == null) { return true; } ConnectorSet connectors = mepModel.ConnectorManager?.Connectors; if (connectors == null) { return true; } foreach(Connector connector in connectors) { var connectElems = connector.GetConnectorElements(); foreach (var connectElem in connectElems) { if (connectElem is FamilyInstance) { return false; } } } return true; } else { return false; } } } }