Creates a new instance of a AnalyticalLink element between two Hubs.
Namespace: Autodesk.Revit.DB.Structure
Assembly: RevitAPI (in RevitAPI.dll) Version: 26.1.0.0 (26.1.0.34)
Syntax
C#
public static AnalyticalLink Create( Document doc, ElementId type, ElementId startHubId, ElementId endHubId )
Parameters
- doc Document
- Document to which new AnalyticalLink should be added.
- type ElementId
- AnalyticalLinkType for the new AnalyticalLink.
- startHubId ElementId
- Hub at start of AnalyticalLink.
- endHubId ElementId
- Hub at end of AnalyticalLink.
Return Value
AnalyticalLinkThe newly created AnalyticalLink instance.
Exceptions
Exception | Condition |
---|---|
ArgumentException | startHubId is not a valid Hub ID for an AnalyticalLink element. -or- endHubId is not a valid Hub ID for an AnalyticalLink element. -or- Thrown if startHubId or endHubId do not represent ids of Hubs. -or- Thrown if startHubId == endHubId. -or- Thrown if type does not represent an id of an AnalyticalLinkType. |
ArgumentNullException | A non-optional argument was null |
Example
C#
public void CreateLink(Document doc, AnalyticalElement fi1, AnalyticalElement fi2) { FilteredElementCollector hubCollector = new FilteredElementCollector(doc); hubCollector.OfClass(typeof(Hub)); //Get all hubs ICollection<Element> allHubs = hubCollector.ToElements(); FilteredElementCollector linktypeCollector = new FilteredElementCollector(doc); linktypeCollector.OfClass(typeof(AnalyticalLinkType)); ElementId firstLinkType = linktypeCollector.ToElementIds().First(); //Get the first analytical link type. // Get hub Ids from two selected family instance items ElementId startHubId = GetHub(fi1.Id, allHubs); ElementId endHubId = GetHub(fi2.Id, allHubs); Transaction tran = new Transaction(doc, "Create Link"); tran.Start(); //Create a link between these two hubs. AnalyticalLink createdLink = AnalyticalLink.Create(doc, firstLinkType, startHubId, endHubId); tran.Commit(); } //Get the first Hub on a given AnalyticalModel element private ElementId GetHub(ElementId hostId, ICollection<Element> allHubs) { foreach (Element ehub in allHubs) { Hub hub = ehub as Hub; ConnectorManager manager = hub.GetHubConnectorManager(); ConnectorSet connectors = manager.Connectors; foreach (Connector connector in connectors) { ConnectorSet refConnectors = connector.AllRefs; foreach (Connector refConnector in refConnectors) { if (refConnector.Owner.Id == hostId) { return hub.Id; } } } } return ElementId.InvalidElementId; }
VB
Public Sub CreateLink(doc As Document, fi1 As AnalyticalElement, fi2 As AnalyticalElement) Dim hubCollector As New FilteredElementCollector(doc) hubCollector.OfClass(GetType(Hub)) 'Get all hubs Dim allHubs As ICollection(Of Element) = hubCollector.ToElements() Dim linktypeCollector As New FilteredElementCollector(doc) linktypeCollector.OfClass(GetType(AnalyticalLinkType)) Dim firstLinkType As ElementId = linktypeCollector.ToElementIds().First() 'Get the first analytical link type. ' Get hub Ids from two selected family instance items Dim startHubId As ElementId = GetHub(fi1.Id, allHubs) Dim endHubId As ElementId = GetHub(fi2.Id, allHubs) Dim tran As New Transaction(doc, "Create Link") tran.Start() 'Create a link between these two hubs. Dim createdLink As AnalyticalLink = AnalyticalLink.Create(doc, firstLinkType, startHubId, endHubId) tran.Commit() End Sub 'Get the first Hub on a given AnalyticalModel element Private Function GetHub(hostId As ElementId, allHubs As ICollection(Of Element)) As ElementId For Each ehub As Element In allHubs Dim hub As Hub = TryCast(ehub, Hub) Dim manager As ConnectorManager = hub.GetHubConnectorManager() Dim connectors As ConnectorSet = manager.Connectors For Each connector As Connector In connectors Dim refConnectors As ConnectorSet = connector.AllRefs For Each refConnector As Connector In refConnectors If refConnector.Owner.Id = hostId Then Return hub.Id End If Next Next Next Return ElementId.InvalidElementId End Function