Dynamoで「ビュー テンプレート」パラメータ値を「なし」にする方法

Autodesk Revitのビューカテゴリ要素には「ビュー テンプレート」というインスタンスパラメータがありますが、Dynamo Revitでこの「ビュー テンプレート」パラメータ値を「なし」に変更する場合、少し工夫が必要です。

初心者がつまづきやすいポイントだと思いましたので、ご紹介します。

記事を書いている人とこのサイトで大切にしていることは下記ページをご覧ください。
BIM Manager's Garage | このサイトについて
Pythonの概要や基本的使用方法、クラスやインスタンスといったオブジェクト指向プログラミングの重要概念についてはWeb上に多数の記事が存在しますので、本稿では割愛します。代表的なPythonの解説記事として、下記の公式ドキュメントをご紹介します。
Python 3.10.0b2 ドキュメント

TL;DR

  • 「Element.SetParameterByName」ではビュー要素の「ビュー テンプレート」を「なし」にする方法が見当たらない。
  • Python Script経由でRevit API「Autodesk.Revit.DB.View」と「Autodesk.Revit.DB.ElementId」のクラスライブラリを使用することで可能。

「Element.SetParameterByName」では「なし」にできない?

問題の所在を説明するために、次の例を使用します。

上の例はビューカテゴリ要素が持つプロパティの抜粋ですが、「平面図 1階」という名称のビューに「10_平面_標準」という名称のビューテンプレートが割り当てられています。

ビューテンプレートが割り当てられている場合、ビューカテゴリ要素のパラメータ値がビューテンプレートの値に上書きされ、ビューテンプレート項目として指定されているパラメータはビューごとの編集が制限されます。

このため、例えばビューカテゴリ要素に加える一定の編集作業を自動化したい場合、ビューテンプレートが割り当てられている状態が邪魔となり、ビューテンプレートの割り当てを解除するスクリプトをDynamoで作成したいことがあります。

ビューテンプレートが割り当てられていない場合は、「ビュー テンプレート」インスタンスパラメータ値が下のように「<なし>」と表示されます。

要素のパラメータ値を変更する場合、Dynamo標準ノードの「Element.SetParameterByName」を使用するのが普通です。

しかしながら、「Element.SetParameterByName」ノードの「value」引数に「なし」(又は「<なし>」)という値を渡すと下の警告が発生します。

「パラメータのストレージ タイプは文字列ではありません。」

つまり、「value」引数に渡すデータのデータ型が違うという警告が表示されます。「ビュー テンプレート」インスタンスパラメータは値としてビューテンプレートIDを取りますので、渡すデータ型がマッチしないと受け取ってくれません。

次に、下のように「value」引数の値を渡してみます。

「パラメータのストレージ タイプは数字ではありません。」

前述のように「ビュー テンプレート」インスタンスパラメータは値としてビューテンプレートIDを取りますので、単なる数字(Int型)データを「value」引数に渡しても文字列の場合と同じように受け取ってくれません。

ではなぜ「-1」を「value」引数に渡そうとしてみたかというと、理由は次の2つです。

  1. 「なし」という要素は存在しないので、ビューテンプレートIDを渡すことができない。
  2. 「なし」には便宜上「-1」という要素IDが割り当てられているが、これをビューテンプレート要素IDに変換する方法がDynamo標準ノードの組合せには見当たらない。

つまり、「なし」というビューテンプレートIDを「value」引数に渡したいができないので、便宜上割り当てられている要素IDである「-1」をそのまま「value」引数に渡そうとした、ということです。

Python Scriptを使う!

Dynamoで「ビュー テンプレート」パラメータ値を「なし」にする方法として、本稿ではPython Scriptを使う方法をご紹介します。

下のPython Scriptを実行することで「ビュー テンプレート」の値を「なし」にすることができます。

「ビュー テンプレート」インスタンスパラメータ値を「なし」に変更しているのは31行目です。

ビューカテゴリ要素のオブジェクト(25行目の「view」)は「Autodesk.Revit.DB.View」クラスのプロパティを持ち、「ビュー テンプレート」インスタンスパラメータは「ViewTemplateId」プロパティが対応します[1]

「ViewTemplateId」プロパティはElementId型データを値として持つため、「Autodesk.Revit.DB.ElementId」クラスのコンストラクターを使用して生成したElementId型データを代入できます。

ElementId型データを生成する際に引数として「-1」を渡すことで「なし」に対応する「None」のElementIdを生成することが、Python Script上は可能というのがポイントです。


Revitがアップグレードされる度にDynamo Revitのバージョンもアップグレードされ、搭載されているDynamo標準ノードの種類も増えています。

それでもRevit APIが提供するクラスメソッドやプロパティの数には現状遠く及ばないため、Python Scriptを使用したDynamoのミッシングリンク解消を併用しないと、Dynamoは真価を発揮することが難しい状況です。

本サイトではPython Scriptを使用したTips & Tricksを引き続き紹介する予定です。

脚注

  1. Revit API Docs | View Class

関連記事

コメント