【RevitAPIで学ぶC#】その4:UIで入力しよう【WPF】

はじめに

AMDlab BIMエンジニアの河野(twitter@tatsukikouno)です。

RevitAPIで学ぶC#シリーズ、第4弾です。
前回はRevitアドインで利用できるUIを作成しました。
UIと言っても、Revitドキュメント内のElementの個数を表示するだけでした。
今回は入力可能なUIを用意し、入力内容を利用したコマンドを実装してみましょう。

前回実装したコードを再利用します。
アドインの構築等も前回記事を参考にしてください。

Viewの変更

今回用意する入力可能なUIコントロールは、

  • 検索するファミリ名
  • 完全一致検索するかどうか
  • 検索を実行するボタン

の3点とします。
「検索するファミリ名」はTextBox、「完全一致検索するかどうか」はCheckbox、「検索を実行するボタン」はButtonで配置します。
それぞれ、Bindingキーワードで

  • TextBox.Text
  • Checkbox.IsChecked
  • Button.Command

をViewModelとバインドしています。

IDEのビューワーでは以下のようになりました。

ViewModelの変更

ViewModelを変更して、Viewに記述したプロパティTargetFamilyName、DoExactMatch、SearchCommandを追加します。
ElementsCountは前回のままで大丈夫です。

string型のTargetFamilyNameプロパティが「検索対象とするファミリ名」に、bool型のDoExactMatchプロパティが「完全一致検索するかどうか」に対応するのは前回のとおりですが、今回はICommand型のSearchCommandプロパティも用意しています。

ICommandは、ボタン等がクリックされた際の処理の実態を記述するためのインターフェイスです。

Button.CommandにバインドしたICommand型のSearchCommandプロパティに検索処理を持たせておくことで、UIでボタンをクリックしたときに検索を実行することができます。
コードでは、MainViewModelクラスのコンストラクタでSearchCommandプロパティに検索処理であるExecuteSearchメソッドを渡しています。

ここで、WPFにはICommandインターフェイスの標準的な実装が存在しないため、RelayCommandというICommandインターフェイスを実装したクラスを自前実装します。

Modelの変更

前回、Modelクラス(IExternalCommandインターフェイスを実装)は、要素の数をカウント、ViewModelのプロパティに渡し、Viewを立ち上げる役目でした。
今回は検索実行ボタン押下時にFamilyInstanceの数をカウントするため、ExecuteではViewを立ち上げるだけとし、ViewModelの

の行で利用するための静的メソッドを追加します。

実行

ビルドが通ったら、前回同様、%APPDATA%\Autodesk\Revit\Addins\2024等に

  • RevitAddinTemplate.dll
  • RevitAddinTemplate.addin

を配置してRevitを起動してみましょう。
今回もRUGの構造サンプルで試しました。


ファミリ名が『RC』と部分一致するファミリインスタンスは153個ありました。


ファミリ名が『RC』と完全一致するファミリインスタンスは0個でした。


ファミリ名が『RC_B』と完全一致するファミリインスタンスは25個でした。

 

おわりに

RevitAPIで学ぶC#シリーズ第4回は、前回に引き続きUIについて取り上げました。
個数を表示するだけだった前回に比べ、ずいぶん便利になったと思います。

弊社では随時BIMエンジニア、コンピュテーショナルデザイナーを募集しています。
ご興味のある方は、DMかContactからご連絡ください。

BIM
Revit アドイン
Tech
C#
ARTICLES