ZeroTouch Nodeを使ってDynamoをカスタマイズしよう6_ノードUIカスタマイズ_ドロップダウン編

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

前回に引き続きZeroTouch Nodeの第6弾です。
今回は、ZeroTouch Nodeを使用して、ドロップダウン付きのノードを作成していきます。
実はDSDropDownBase クラスを継承することで、DynamoノードのUIをカスタマイズすることが可能になります。

今回作成するノードは
1.固定値をドロップダウンにするノード
2.ドアファミリタイプをドロップダウンにするノード
の2つになります。

1.固定値をドロップダウンにするノード


ドロップダウンリストに A, B, C, D という選択肢を表示し、選択された値に応じて整数(0, 1, 2, 3)を出力するノードを作成していきます。

上記のコードを簡単に解説していきます。

① クラスの宣言
ノードの名称はクラス名.メソッド名と説明してきましたが、下記の記述を行えば、クラス名、メソッド名によらずノード名を自由に設定できます。

NodeName(“DropDown”) : Dynamo の ノード名 を “DropDown” に設定
NodeDescription(“ドロップダウンノードの例”) : ノードの説明文
DSDropDownBaseクラスはDynamoでドロップダウンノードを作成するためにすでに用意されている基底クラスです。
このクラスを継承することで、ドロップダウンの機能(リストの作成・選択・出力)が自動的に使えるようになります。

② コンストラクタ
コンストラクタ は、クラス(ノード)の初期設定を行うための関数です。

base(“item”) は 親クラス(DSDropDownBase)のコンストラクタを呼び出します。呼び出すことで、Dynamoのドロップダウンリストのアウトプットを “item” と設定し、ノードがDynamoに読み込まれるときにitemとアウトプットに表示されるようになります。

[JsonConstructor]は、ドロップダウンの選択情報や設定が消えてしまうことがあるので、DynamoのJSON形式からノードを復元する際に使用されます。Dynamoでノードを作成し.dyn ファイルに保存をし、Dynamoを再起動してファイルを開くと、JSONデータからノードが復元されます。

 

③ PopulateItemsCore メソッド(ドロップダウンのリストを作成)

機能を実装するには、DSDropDownBaseクラスがもつメソッドを記述する必要があります。今回はドロップダウンのリストを作成するPopulateItemsCore()というメソッドを使用します。

Itemsはドロップダウンのリストになり、既存のリストをすべて削除し、新しいリストを作成できるようにします。

ドロップダウンのリストの中身を作成します。
“A” を選択すると 0、”B” を選択すると 1 というように、各項目に数値を割り当てます。
作成したリストをドロップダウンのリストに追加します。

SelectedIndex = 0; で 最初の項目(”A”)をデフォルトの選択肢にします。
SelectionState.Restore で Dynamo にリストを更新します。

④ BuildOutputAst メソッド(選択された値を Dynamo に出力)

このメソッドは、DSDropDownBaseクラスが持つメソッドで、選択した値をDynamoに出力するものです。
Items[SelectedIndex].Item で、現在選択されている項目の値(0, 1, 2, 3)を取得し、 AstFactory.BuildIntNode(…) でDynamo に数値を出力できる形式に変換します。AstFactory.BuildAssignment(…) で Dynamo に数値を出力するノードを作成し、returnでDynamoに値を渡します。
ユーザーが ドロップダウン上で”C” を選択→BuildOutputAst() が実行される→"C" に対応する 2 を Dynamo の出力にする。こんな流れになります。

コーディングが完了したら、Visual Studioでプロジェクトをビルドします。ビルドが成功すると、指定したプロジェクトフォルダ内の「bin\Debug」または「bin\Release」ディレクトリにDLLファイルが生成されます。

Dynamoを開き、[ファイル] タブから「ライブラリを読み込む」を選択し、生成したDLLファイルを選択してインポートします。
インポート後、新しいノード(カスタムノード)として「DropDown」が利用可能になりましたので、配置してみます。

ドロップダウンが作成されました。

2.ドアファミリタイプをドロップダウンにするノード


Revit にロードされているドアファミリとそのタイプ を取得し、ドロップダウンで選択できるようにします。
今回作成するノードになります。

上記のコードを簡単に解説していきます。

① クラスの宣言

② コンストラクタ

ドロップダウンリストのアウトプットを “Door Family Types” と設定します。

③ PopulateItemsCore メソッド(ドロップダウンのリストを作成)

Dynamoのドロップダウンリストを作成するためのメソッドです。

RevitAPIを使用して、Revitの現在のドキュメントを取得します。

プロジェクト内のドアのファミリシンボルを取得します。

ドロップダウンリストに “ファミリ名-タイプ名” を追加します。

④ BuildOutputAst メソッド(選択された値を Dynamo に出力)

このメソッドは、選択されたドアのファミリタイプをDynamoに出力します。

何も選択されていない場合は null を出力します。

選択されたFamilySymbolを取得します。

先ほど取得したFamilySymbolをDynamoに出力します。

Dynamo に値を出力します。

コーディングが完了したら、Visual Studioでプロジェクトをビルドします。ビルドが成功すると、指定したプロジェクトフォルダ内の「bin\Debug」または「bin\Release」ディレクトリにDLLファイルが生成されます。

Dynamoを開き、[ファイル] タブから「ライブラリを読み込む」を選択し、生成したDLLファイルを選択してインポートします。
インポート後、新しいノード(カスタムノード)として「DoorFamilyTypesDropdown」が利用可能になりましたので、配置してみます。

このコードを使うことで、Dynamo の “Family Types” ノードのような動作を、ドアファミリ専用 にカスタマイズすることができます。既存の”Family Types” ですとRevitのプロジェクト上にインポートされたファミリがすべてドロップダウン化されてしまうので、取得したいファミリを選択するにはスクロールをする必要が出てきます。ほしいものを探すのに時間がかかるのはストレスです。このノードを開発して、カテゴリごとにドロップダウン化しておくことで時間短縮を見込めますので、このコードをもとに違うカテゴリで皆さんも作成してみてください。

今回は、ZeroTouch Nodeを使用して、ドロップダウン付きのノード作成を説明してきました。
次回は、第7弾でスライダーやボタンを付けるといった、より複雑で便利なノードのUIをカスタマイズするお話をしていきます。

AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career

カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry

BIM
Dynamo Revit
Tech
C#
ARTICLES