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