Dynamo内でCategoryからBuiltInCategoryを取得する
Dynamo内でPythonを利用する目的の一つにRevitAPIへのアクセスがあります。
Dynamo内で利用できるPythonは現在はIronPythonのみになります。今後、Cpythonも利用できるようになるというアナウンスはされていて、試用版としてDynamoCoreは公開されています。
されこれまでも紹介してきたRevitAPIですが、今回は、CategoryからBuiltInCategoryを取得するPythonを紹介しようと思います。
Dynamo内でBuiltInCategoryが欲しい場面はそんなに存在しませんが(笑)
import System
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
biclist = System.Enum.GetValues(BuiltInCategory)
まずは、参照の追加を行います。
System.Enum.GetValuesは.Netに用意されているもので、リストに含まれてる要素の値をForeachで処理するもののようです。
私は.Netに詳しく無いため、誰かご存知でしたら知りたいです。
列挙する内容は、以下のURLにある、
Autodesk.Revit.DB.BuiltInCategoryを指しています。
https://www.revitapidocs.com/2019/ba1c5b30-242f-5fdc-8ea9-ec3b61e6e722.htm
これでBuiltInCategoryの一覧が取得できました。
次に名前の取得を行いました。
BuiltInCategoryにはNameがあるものと無いものが存在するため、場合分けして無いものにはnullがはいるようにしました。
また、参照にRevitNodesを追加しています。
Dynamo内では、Dynamo独自のデータかRevitのデータかを区別する必要があります。
cdata = []
for bic in biclist:
try:
cdata.append(Revit.Elements.Category.ById(ElementId(bic).IntegerValue).Name)
except:
cdata.append(None)
このあと、Categoryから取得した名前とBuiltInCategoryの持つ名前を比較し、Category名とBuiltInCategoryを紐付けたら最初の画像に挙げたようなものが完成します。
この記事が気に入ったらサポートをしてみませんか?