通过conn.AllRefs;可以找到与之连接的连接器。


通过conn.AllRefs;可以找到与之连接的连接器。

//连接器连接的连接器

[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;

    }

}