通过连接器找到所属元素。
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Automatic)]
public class GetElementByConnector : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
Reference refelem = sel.PickObject(ObjectType.Element, " 请选择一个风管 " );
Duct duct = refelem.Element as Duct; // 这里也可以是风道末端之类MEPSystem
ConnectorSetIterator csi = duct.ConnectorManager.Connectors.ForwardIterator();
Connector conn = null ;
while (csi.MoveNext())
{
conn = csi.Current as Connector;
}
GetElementAtConnector(conn);
return Result.Succeeded;
}
public void GetElementAtConnector(Connector connector)
{
MEPSystem mepSystem = connector.MEPSystem;
// if (null != mepSystem) // 加上这个判断风管不属于
if ( true )
{
string message = " Connector is owned by: " + connector.Owner.Name;
if (connector.IsConnected == true ) // 是否连接其他,比如弯头
{
ConnectorSet connectorSet = connector.AllRefs;
ConnectorSetIterator csi = connectorSet.ForwardIterator();
while (csi.MoveNext())
{
Connector connected = csi.Current as Connector;
if ( null != connected)
{
if (connected.ConnectorType == ConnectorType.EndConn ||
connected.ConnectorType == ConnectorType.CurveConn ||
connected.ConnectorType == ConnectorType.PhysicalConn)
{
message += " \nConnecotr is connected to: " + connected.Owner.Name;
message += " \nConnection type is: " + connected.ConnectorType;
}
}
}
}
else
{
message += " \nConnector is not connected to anything. " ;
}
MessageBox.Show(message, " Revit " );
}
}
}
[Regeneration(RegenerationOption.Automatic)]
public class GetElementByConnector : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
Reference refelem = sel.PickObject(ObjectType.Element, " 请选择一个风管 " );
Duct duct = refelem.Element as Duct; // 这里也可以是风道末端之类MEPSystem
ConnectorSetIterator csi = duct.ConnectorManager.Connectors.ForwardIterator();
Connector conn = null ;
while (csi.MoveNext())
{
conn = csi.Current as Connector;
}
GetElementAtConnector(conn);
return Result.Succeeded;
}
public void GetElementAtConnector(Connector connector)
{
MEPSystem mepSystem = connector.MEPSystem;
// if (null != mepSystem) // 加上这个判断风管不属于
if ( true )
{
string message = " Connector is owned by: " + connector.Owner.Name;
if (connector.IsConnected == true ) // 是否连接其他,比如弯头
{
ConnectorSet connectorSet = connector.AllRefs;
ConnectorSetIterator csi = connectorSet.ForwardIterator();
while (csi.MoveNext())
{
Connector connected = csi.Current as Connector;
if ( null != connected)
{
if (connected.ConnectorType == ConnectorType.EndConn ||
connected.ConnectorType == ConnectorType.CurveConn ||
connected.ConnectorType == ConnectorType.PhysicalConn)
{
message += " \nConnecotr is connected to: " + connected.Owner.Name;
message += " \nConnection type is: " + connected.ConnectorType;
}
}
}
}
else
{
message += " \nConnector is not connected to anything. " ;
}
MessageBox.Show(message, " Revit " );
}
}
}
end