Revit API でFamilyのTypeの情報を取りたいときは、FamilySymbolのクラスを使うことになります。
そこでは、少しPython特有の書き方が必要になります。
何度かハマって忘れてを繰り返しているので忘備録として残しておくことにします。
まず、Furnitureのカテゴリーのタイプだけをとります。ここでis_not_type=True
にすると逆にインスタンスだけがとれます。
from rpw import db
symbols = db.Collector(of_category="OST_Furniture", is_type=True)
この集めたコレクターのFamilyName、FamilyTypeName,Parameter(value), Parameter(string)の取り方を紹介します。
from rpw import db
symbols = db.Collector(of_category="OST_Furniture", is_type=True)
for symbol in symbols:
famName = symbol.FamilyName
typeName = Element.Name.GetValue(symbol)
parameter_value = Element.GetParameters(symbol, "Height")[0].AsValueString()
parameter = Element.GetParameters(symbol, "Manufacturer")[0].AsString()
FamilyNameはシンプルにとれますが、タイプ名は、Element.Name.GetValue(symbol)
という特殊な方法で取ります。同様にParameterの値もとれるのですが注意しないといけないのが、StringとValueを区別しているため、パラメータによって最後のAs~を変えないといけないところです。
またインスタンスを選択して、情報を得る場合の例も載せておきます。
まず、revit.pick_rectangle()
でインスタンスを取得した後にその選択したId
をrevit.get_selection()
にappendします。こうすることで、selection_rpw = ui.Selection()
が使用できるようになります。
from rpw import ui
from pyrevit import revit
selection = revit.get_selection()
selection_list = revit.pick_rectangle()
for sel in selection_list:
sel_id = sel.Id
selection.append(sel_id)
if(selection_list):
selection_rpw = ui.Selection()
for sel in selection_rpw:
symbol = sel .get_symbol()
family = sel .get_family()
params = symbol.parameters.all
param = symbol.parameters["SeatCount"].value
print(symbol)
print(family)
print(param)
print(params)
Revit Python Wrapperで取得したエレメントは、簡単にシンボルやファミリ、パラメータ情報を取得できます。