ZeroTouch Nodeを使ってDynamoをカスタマイズしよう5_パラメータ取得・変更方法

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

前回に引き続きZeroTouch Nodeの第5弾です。
今回は、ZeroTouch Nodeを使用して、Revitのパラメータを取得、設定の方法をお話していきます。

今回作成するノードは
1.壁のインスタンスパラメータを変更
2.窓のタイプパラメータを変更
3.プロジェクト情報のパラメータ一覧を取得
の3つになります。

1.壁のインスタンスパラメータを変更


Revitの壁要素に対して「上部レベルオフセット」のインスタンスパラメータを変更します。以下が今回作成するコードになります。

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

クラスを定義します。

メソッドの定義をします。
このメソッドは、壁の「上部レベルオフセット」を設定するためのメソッドです。

次に、トランザクションを開始するコードです。
Revit APIでは要素の変更時にトランザクションが必要です。

次に壁要素の取得と上部レベルオフセットの設定をします。
Dynamoの壁要素をRevit APIの壁要素に変更する必要があるので、Revit.Elements.ElementをAutodesk.Revit.DB.Element型に変換して直接アクセスできるようにします。詳しくは前々回の記事で確認ください。次に壁の「上部レベルオフセット」パラメータを取得します。ここでは、上部レベルオフセットを特定するための定数 BuiltInParameter.WALL_TOP_OFFSET を使用します。取得した上部レベルオフセットパラメータに、新しいオフセット値をフィート単位で設定します。IsReadOnlyでないかを確認し、読み取り専用でない場合にのみ設定します。

最後にトランザクションの終了をします。


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

壁のインスタンスパラメータを変更することができました。

2.窓のタイプパラメータを変更


Revitの窓ファミリタイプのタイプパラメータ「幅」を設定するものです。以下が今回作成するコードになります。

上記のコードを今回も簡単に解説していきます。1の項目と内容が同じ箇所は省略します。
まず初めにクラスとメソッドの定義をします。
このメソッドは、窓のファミリタイプと窓のタイプパラメータである幅の値を受け取り変更します。引数はDynamoのインプットになります。

次にファミリタイプの「幅」パラメータを取得します。英語環境であれば「Width」、日本語環境であれば「幅」など言語に応じた正確なパラメータ名を使用します。今回は日本語環境なので幅と入力しています。


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

窓のタイプパラメータを変更することができました。

3.プロジェクト情報のパラメータ一覧を取得


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

クラスとメソッドの定義をします。
このメソッドは、プロジェクト情報のすべてのパラメータを取得します。戻り値として、パラメータの名前と値のペアを辞書型で返します。

次にProjectInformationを使用して、プロジェクトに関連する情報を取得します。プロジェクト情報が取得できない場合にInvalidOperationExceptionをスローし、エラーを通知します。

すべてのパラメータ名とその値を格納するためのディクショナリを作成します。キーにはパラメータ名、値にはパラメータ値が入ります。

最後にプロジェクト情報パラメータの取得と追加をします。
param.HasValueでパラメータに値が存在するかを確認し、ある場合はパラメータの値を文字列として取得します。値が存在しない場合には”値がありません”と取得します。

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

プロジェクト情報が取得されました。

今回は、ZeroTouch Nodeを使用して、Revitのパラメータを取得、設定する方法を説明しました。
次回は、第6弾で、ZeroTouch Nodeを使用してDynamoのノードを少しリッチなUIにしていく話をしていきます。

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

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

BIM
Dynamo Revit
Tech
C#
ARTICLES