ZeroTouch Nodeを使ってDynamoをカスタマイズしよう3_システムファミリ作成編

皆様こんにちは
AMDlabの秋山です。

前回に引き続きZeroTouch Nodeの第3弾です。
今回は、ZeroTouch Nodeを使用して、Revitエレメント(システムファミリ)を作成する方法をお話していきます。

今回作成するノードは
1.壁作成
2.床作成
の2つになります。

1.壁作成


以下が今回作成するコードになります。

上記のコードを簡単に解説していきます。
まず初めに名前空間をインポートします。ライブラリやフレームワークの特定部分を参照するために記述します。

クラスを定義します。

メソッドの定義をします。
このメソッドは、複数のDynamoジオメトリ(line)から壁を作成し、作成された壁のリストを返します。

次に、Revitエレメントを取得していきます。
注意点がひとつあります。
Dynamoで受け取ったWallTypeとLevelは、Dynamo専用のクラス(Revit.Elements.WallTypeとRevit.Elements.Level)として表されています。これらはDynamo内で操作しやすくするためのラッパーされたものです。
しかし、Revitの操作にはRevitAPIのオブジェクト(Autodesk.Revit.DB.WallTypeやAutodesk.Revit.DB.Level)が必要なので下記の内容を使い変換する必要があります。

https://x.com/tatsukikouno/status/1730628732573151406?s=46&t=Pk8diAgErdWbxoxtWxa64w

次に、Autodesk.Revit.DB.Wall.Create() メソッドを使用して壁を作成します。
このメソッドには、単位変換されたLine、指定されたWallType、Level、および単位変換された高さを引数として渡します。
単位変換については前回お話しした内容を参考にしてください。

今回新たに加わる内容として、ToDSType メソッドの使用があります。このメソッドは、Revit APIのオブジェクト(例えばAutodesk.Revit.DB.Wall)をDynamo専用のラッパークラス(例えばRevit.Elements.Wall)に変換します。
これにより、Revit APIオブジェクトをDynamoの環境内で操作しやすくするためのラッピングが行われます。


コーディングが完了したら、Visual Studioでプロジェクトをビルドします。ビルドが成功すると、指定したプロジェクトフォルダ内の「bin\Debug」または「bin\Release」ディレクトリにDLLファイルが生成されます。
Dynamoを開き、[ファイル] タブから「ライブラリを読み込む」を選択し、生成したDLLファイルを選択してインポートします。
インポート後、新しいノード(カスタムノード)として「WallCreation.CreateWalls」が利用可能になりましたので、配置してみます。

壁が作成されました。
続いてはこの壁の線分を使用して床を作成していきます。

2.床作成


以下が今回作成するコードになります。

上記のコードを今回も簡単に解説していきます。壁作成と内容が同じ箇所は省略します。
まず初めにメソッドの定義をします。
このメソッドは、複数のDynamoジオメトリ(line)から床の境界線を作成し、作成された床を返します。

次に床を作成していきます。使用するメソッドはAutodesk.Revit.DB.Floor.Create()です。
単位変換されたLine、指定されたFloorType、Level、床の傾斜、傾斜の方向、構造要素を引数に用いて、床を作成します。

コーディングが完了したら、先ほど同様ビルドをし「FloorCreation.CreateFloor」を配置してみます。

床が作成されました。

今回は、ZeroTouch Nodeを使用して、Revitエレメント(システムファミリ)を作成する方法を説明しました。
次回は、第4弾で、ZeroTouch Nodeを使用してRevitエレメント(コンポーネントファミリ)を作成するお話をしていきます。

BIM
Dynamo Revit
Tech
C#
ARTICLES