Dynamo内でCategoryからBuiltInCategoryを取得する

Dynamo内でPythonを利用する目的の一つにRevitAPIへのアクセスがあります。

Dynamo内で利用できるPythonは現在はIronPythonのみになります。今後、Cpythonも利用できるようになるというアナウンスはされていて、試用版としてDynamoCoreは公開されています。

されこれまでも紹介してきたRevitAPIですが、今回は、CategoryからBuiltInCategoryを取得するPythonを紹介しようと思います。

画像1

Dynamo内でBuiltInCategoryが欲しい場面はそんなに存在しませんが(笑)


画像2

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の一覧が取得できました。

画像3

次に名前の取得を行いました。

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を紐付けたら最初の画像に挙げたようなものが完成します。


この記事が気に入ったらサポートをしてみませんか?