Creates a new duct that connects to two connectors.
Namespace: Autodesk.Revit.DB.Mechanical
Assembly: RevitAPI (in RevitAPI.dll) Version: 21.0.0.0 (21.0.0.0)
Since:
2017
Syntax
Return Value
The created duct.
Remarks
Examples
CopyC#
public Duct CreateDuctBetweenConnectors(UIDocument uiDocument)
{
ElementId levelId = ElementId.InvalidElementId;
Connector connector1 = null, connector2 = null;
ConnectorSetIterator csi = null;
ICollection<ElementId> selectedIds = uiDocument.Selection.GetElementIds();
Document document = uiDocument.Document;
foreach (ElementId id in selectedIds)
{
Element e = document.GetElement(id);
if (e is FamilyInstance)
{
FamilyInstance fi = e as FamilyInstance;
Family family = fi.Symbol.Family;
if (family.FamilyCategory.Name == "Mechanical Equipment")
{
csi = fi.MEPModel.ConnectorManager.Connectors.ForwardIterator();
while (csi.MoveNext())
{
Connector conn = csi.Current as Connector;
if (conn.Direction == FlowDirectionType.Out &&
conn.DuctSystemType == DuctSystemType.SupplyAir)
{
connector1 = conn;
levelId = family.LevelId;
break;
}
}
}
}
}
foreach (ElementId id in selectedIds)
{
Element e = document.GetElement(id);
if (e is FamilyInstance)
{
FamilyInstance fi = e as FamilyInstance;
Family family = fi.Symbol.Family;
if (family.FamilyCategory.Name != "Mechanical Equipment")
{
csi = fi.MEPModel.ConnectorManager.Connectors.ForwardIterator();
while (csi.MoveNext())
{
if (null == connector2)
{
Connector conn = csi.Current as Connector;
if (Math.Abs(conn.Origin.Y - connector1.Origin.Y) < 0.001)
{
connector2 = conn;
break;
}
}
}
}
}
}
Duct duct = null;
if (null != connector1 && null != connector2 && levelId != ElementId.InvalidElementId)
{
FilteredElementCollector collector = new FilteredElementCollector(uiDocument.Document);
collector.OfClass(typeof(DuctType));
var query = from element in collector
where element.Name.Contains("Mitered Elbows") == true
select element;
DuctType ductType = collector.Cast<DuctType>().First<DuctType>();
if (null != ductType)
{
duct = Duct.Create(document, ductType.Id, levelId, connector1, connector2);
}
}
return duct;
}
CopyVB.NET
Public Function CreateDuctBetweenConnectors(uiDocument As UIDocument) As Duct
Dim levelId As ElementId = ElementId.InvalidElementId
Dim connector1 As Connector = Nothing, connector2 As Connector = Nothing
Dim csi As ConnectorSetIterator = Nothing
Dim selectedIds As ICollection(Of ElementId) = uiDocument.Selection.GetElementIds()
Dim document As Document = uiDocument.Document
For Each id As ElementId In selectedIds
Dim e As Element = document.GetElement(id)
If TypeOf e Is FamilyInstance Then
Dim fi As FamilyInstance = TryCast(e, FamilyInstance)
Dim family As Family = fi.Symbol.Family
If family.FamilyCategory.Name = "Mechanical Equipment" Then
csi = fi.MEPModel.ConnectorManager.Connectors.ForwardIterator()
While csi.MoveNext()
Dim conn As Connector = TryCast(csi.Current, Connector)
If conn.Direction = FlowDirectionType.Out AndAlso conn.DuctSystemType = DuctSystemType.SupplyAir Then
levelId = fi.LevelId
connector1 = conn
Exit While
End If
End While
End If
End If
Next
For Each id As ElementId In selectedIds
Dim e As Element = document.GetElement(id)
If TypeOf e Is FamilyInstance Then
Dim fi As FamilyInstance = TryCast(e, FamilyInstance)
Dim family As Family = fi.Symbol.Family
If family.FamilyCategory.Name <> "Mechanical Equipment" Then
csi = fi.MEPModel.ConnectorManager.Connectors.ForwardIterator()
While csi.MoveNext()
If connector2 Is Nothing Then
Dim conn As Connector = TryCast(csi.Current, Connector)
If Math.Abs(conn.Origin.Y - connector1.Origin.Y) < 0.001 Then
connector2 = conn
Exit While
End If
End If
End While
End If
End If
Next
Dim duct As Duct = Nothing
If connector1 IsNot Nothing AndAlso connector2 IsNot Nothing AndAlso levelId IsNot ElementId.InvalidElementId Then
Dim collector As New FilteredElementCollector(uiDocument.Document)
collector.OfClass(GetType(DuctType))
Dim query As System.Collections.Generic.IEnumerable(Of Autodesk.Revit.DB.Element)
query = From element In collector _
Where element.Name.Contains("Mitered Elbows") = True _
Select element
Dim ductType As DuctType = collector.Cast(Of DuctType)().First()
If ductType IsNot Nothing Then
duct = duct.Create(document, ductType.Id, levelId, connector1, connector2)
End If
End If
Return duct
End Function
Exceptions
See Also