// 连接器连接的连接器 [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)] public class cmdConnected : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIApplication app = commandData.Application; Document doc = app.ActiveUIDocument.Document; Selection sel = app.ActiveUIDocument.Selection; Transaction ts = new Transaction(doc, " revit "); ts.Start(); Reference refDuct = sel.PickObject(ObjectType.Element, " duct "); Duct duct = doc.GetElement(refDuct) as Duct; ConnectorSetIterator csi = duct.ConnectorManager.Connectors.ForwardIterator(); while (csi.MoveNext()) { Connector conn = csi.Current as Connector; if (conn.IsConnected == true) // 是否有连接 { ConnectorSet connectorSet = conn.AllRefs; // 找到所有连接器连接的连接器 ConnectorSetIterator csiChild = connectorSet.ForwardIterator(); while (csiChild.MoveNext()) { Connector connected = csiChild.Current as Connector; if ( null != connected && connected.Owner.UniqueId != conn.Owner.UniqueId) { // look for physical connections if (connected.ConnectorType == ConnectorType.End || connected.ConnectorType == ConnectorType.Curve || connected.ConnectorType == ConnectorType.Physical) { // 判断是不是管件 if (connected.Owner is FamilyInstance) { TaskDialog.Show( " fitting ", connected.Owner.Name); } } } } } } ts.Commit(); return Result.Succeeded; } }