解析用リンクは 2 つの個別の解析用節点を接続する要素で、固定状態などのプロパティがあります。解析用リンクは、モデリング中に、解析用梁から解析用柱に、特定のルールに基づいて自動的に作成することができます。また、Revit UI で手動で作成することができる他、Revit API を使用して作成できます。
Revit API では、解析用リンクは AnalyticalLink クラスによって表されます。固定値は、関連付けられた AnalyticalLinkType Fixity 値から使用できます。
下の例では、ドキュメント内のすべての AnalyticalLink の読み込み方法を説明し、自動生成や手動で作成された AnalyticalLink の数をまとめる TaskDialog を表示しています。
コード領域: AnalyticalLink を読み込む |
public void ReadAnalyticalLinks(Document document) { FilteredElementCollector collectorAnalyticalLinks = new FilteredElementCollector(document); collectorAnalyticalLinks.OfClass(typeof(AnalyticalLink)); IEnumerable<AnalyticalLink> alinks = collectorAnalyticalLinks.ToElements().Cast<AnalyticalLink>(); int nAutoGeneratedLinks = 0; int nManualLinks = 0; foreach (AnalyticalLink alink in alinks) { if (alink.IsAutoGenerated() == true) nAutoGeneratedLinks++; else nManualLinks++; } string msg = "Auto-generated AnalyticalLinks: " + nAutoGeneratedLinks; msg += "\nManually created AnalyticalLinks: " + nManualLinks; TaskDialog.Show("AnalyticalLinks", msg); } |
静的メソッド AnalyticalLink.Create()は新しい解析用リンクを作成します。2 つの要素を直接接続するのではなく、2 つのハブの間に接続を作成します。Hub クラスは複数の Autodesk Revit 要素の接続を表します。
次の例では、選択した 2 つの FamilyInstance オブジェクト間の新しい解析用リンクを作成します。フィルタを使用してモデル内のすべてのハブを検索した後、GetHub()メソッドはハブを調べて、各 FamilyInstance の AnalyticalModel の ID を参照するハブを見つけます。
コード領域: 新しい AnalyticalLink を作成 |
public void CreateLink(Document doc, FamilyInstance fi1, FamilyInstance 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.GetAnalyticalModel().Id, allHubs); ElementId endHubId = GetHub(fi2.GetAnalyticalModel().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; } |