解析用リンク

解析用リンク

解析用リンクは 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;
}