この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:T
更新日時:2020-05-07 08:43:02

タイトル: FamilySymbol(タイプ)の取得とパラメータの変更
SEOタイトル: 【Revit API】FamilySymbol(タイプ)の取得とパラメータの変更

この記事の要点
  • Revit API (C#) でFamilySymbol(タイプ)の取得とパラメータ変更
  • 取得: FamilyInstance.Symbol から FamilySymbol を取得
  • パラメータ変更: Parameter param = symbol.LookupParameter("名"); param.Set(値);
  • Transaction で囲む必要(Revit API はトランザクション必須)

 

前提

C#

 

実装

選択した要素のFamilySymbol(タイプ)のパラメータを変更する。

Document document = commandData.Application.ActiveUIDocument.Document;
UIDocument uidocument = commandData.Application.ActiveUIDocument;

// 要素の取得処理の詳細は省略

ElementUtil elementUtil = new ElementUtil();
IList<Element> elements = elementUtil.GetSelectedElementsByCategoryId(document, uidocument, BuiltInCategory.OST_Doors);

Transaction transaction = new Transaction(m_data.CommandData.Application.ActiveUIDocument.Document, Guid.NewGuid().GetHashCode().ToString());
transaction.Start();

foreach (Element element in elements)
{

    //肝心のFamilySymbolの取得処理は後述
    FamilyService familyService = new FamilyService();
    FamilySymbol symbol = familyService.GetFamilySymbol(document, element);

    IList<Parameter> symbolParams = symbol.GetOrderedParameters();

    foreach (Parameter symbolParam in symbolParams)
    {
       
symbolParam.Set("value"); //とりあえず適当に変更
    }
}

transaction.Commit();

 

 

以下、FamilySymbolの取得処理。

対象の要素のFamilySymbolを取得する。

public FamilySymbol GetFamilySymbol(Document document, Element element)
{

    FilteredElementCollector familyCollector = new FilteredElementCollector(document);
    familyCollector.OfClass(typeof(FamilySymbol));

    FamilySymbol familySymbolToFind = null;
    foreach (FamilySymbol familySymbol in familyCollector)
    {
        if (familySymbol.Id == element.GetTypeId())
        {
            familySymbolToFind = familySymbol;
            break;
        }
    }
    return familySymbolToFind;
}