選択
Revit は、非常に豊富なデータを扱う環境です。このため、選択機能が「ポイント アンド クリック」をはるかに超えた範囲にまで拡張されています。パラメトリックな操作の実行中に、Revit のデータベースにクエリーを行い、Revit の要素を Dynamo のジオメトリに動的にリンクすることができます。
[Revit]ライブラリの[選択]カテゴリから、さまざまな方法でジオメトリを選択することができます。
Revit の要素を選択するには、Revit の要素の階層構造について十分に理解しておくことが大切です。プロジェクト内のすべての壁を選択するには、カテゴリ単位で選択します。ミッドセンチュリー モダン スタイルのロビーに配置したイームズ チェアをすべて選択するには、ファミリ単位で選択します。演習に入る前に、Revit の階層について簡単におさらいしておきましょう。
Revit の階層
生物学ではあらゆる生物が体系的に分類されており、その分類法は、上位から下位にかけて、界、門、網、目、科、属、種という階層構造から成り立っています。Revit における要素の分類法はこれに似ています。基本的には、Revit の階層構造は、上位から下位にかけて、カテゴリ、ファミリ、タイプ、インスタンスに分かれています。インスタンスは(ユニークな ID を持つ)個別のモデル要素です。カテゴリは、「壁」や「床」などの一般的なグループのことです。このようにして構成されている Revit のデータベースを使用して、1 つの要素を選択したり、階層構造の中の指定したレベルに基づいて同種の要素をすべて選択することができます。
注: Revit における「タイプ」の定義は、プログラミングでいう「型」とは異なります。 Revit でいう「タイプ」は、いわゆる「データ タイプ」ではなく、分類階層における 1 つの枝を指します。
Dynamo のノードを使用したデータベース ナビゲーション
次の 3 つの画像では、Revit の要素を Dynamo で 選択するいくつかの主だった方法を紹介しています。これらのツールを組み合わせて使用すると便利です。その一部をこれ以降の演習で実際に使用してみましょう。
ポイント アンド クリックは、Revit の要素を直接選択する最も簡単な方法です。 モデル要素全体であれ、そのトポロジの一部 (たとえば 1 つの面や 1 つのエッジ)であれ、選択することができます。この方法では Revit オブジェクトへの動的なリンクが維持されるので、Revit ファイルの場所やパラメータが変更されると、グラフ内で参照されている Dynamo の要素が更新されます。
ドロップダウン メニューで、Revit プロジェクト内のアクセス可能なすべての要素のリストが作成されます。 ビューで確認できない Revit の要素も含めて、これで参照することができます。Revit プロジェクトやファミリ エディタで既存の要素をクエリーしたり、新しい要素を作成するには、このツールが役に立ちます。
Revit の要素の選択方法としては、他に Revit の階層構造から特定の階層を指定する方法もあります。 この方法は、設計図書作成、インスタンスの生成とカスタマイズなどのために準備されている大規模なデータ配列をカスタマイズするのにとても役立ちます。
上記の 3 点の画像に留意して、この章の続きで説明するパラメトリック アプリケーションの作成に備えて、基本的な Revit プロジェクトから要素を選択する演習を開始しましょう。
演習
この演習に付属しているサンプル ファイルをダウンロードしてください(右クリックして[名前を付けてリンク先を保存]を選択)。すべてのサンプル ファイルの一覧については、付録を参照してください。
この Revit ファイルのサンプルには、3 つの要素タイプから成る 1 つの単純な建物モデルが収録されています。それでは、このモデルを見本として使用して、次に挙げる Revit の階層構造の中で Revit の要素を選択してみましょう。
- 建物のマス(基本形状)
- トラス(アダプティブ コンポーネント)
- 梁(構造フレーム)
Revit のプロジェクト ビューに表示されている要素から、どのような結論を導き出すことができますか。また、適切な要素を選択するには、階層をいくつ降りていく必要があるでしょうか。言うまでもありませんが、大規模なプロジェクトで作業する際にはこの問題はもっと複雑になります。使用できるオプションはたくさんあり、カテゴリ別、レベル別、ファミリ別、インスタンス別に要素を選択することができます。
- ここでは基本的な構造を扱っているので、Categories ドロップダウン ノードで[Mass]を選択して、建物のマスを選択してみましょう。 これは、[Revit] > [選択]タブにあります。
- [Mass]カテゴリのノードでは、単純にカテゴリ自体が出力されるので、要素を選択する必要があります。これを実行するには、All Elements of Category ノードを使用します。
この時点では、Dynamo にジオメトリが表示されないことに注意してください。Revit の要素が既に選択されていますが、まだ Dynamo ジオメトリに変換されてはいません。この区別は重要です。多数の要素を選択する場合は、すべての動作が非常に遅くなるおそれがあるため、すべての要素を Dynamo でプレビューすることは好ましくありません。Dynamo は、ジオメトリ操作の実行を必要とせずに Revit のプロジェクトを管理することのできるツールです。そのことについては、この章の次のセクションで説明します。
ここでは単純なジオメトリを使用して演習を行っているので、Dynamo のプレビューでジオメトリを表示できるようにします。上記の Watch ノード中の「BldgMass」の隣に、緑の背景色付きで数値が表示されています。これは要素の ID を表しており、この ID からユーザが Dynamo ジオメトリではなく Revit 要素を扱っていることがわかります。次の手順で、この Revit 要素を Dynamo ジオメトリに変換してみましょう。
- Element.Faces ノードを使用して、Revit のマスの各面を表すサーフェスのリストを取得します。これで、Dynamo のビューポートでジオメトリを表示し、その面をパラメトリック操作の際に参照できるようになりました。
別の方法を紹介します。この場合は、(All Elements of Category ノードを使用して) Revit の階層構造から選択を行い、Revit のジオメトリを指定して明示的に選択するという方法を採りません。
- Select Model Element ノードを使用して、[選択] (または[変更])ボタンをクリックします。 Revit のビューポートで、目的の要素を選択します。この場合は、建物のマスを選択することにします。
- Element.Faces ノードではなく Element.Geometry ノードを使用すると、マス全体を 1 つのソリッド ジオメトリとして選択することができます。 このノードでは、そのマスの内部に含まれるすべてのジオメトリが選択されます。
- Geometry.Explode ノードを使用すると、やはりサーフェスのリストを取得することができます。 これら 2 つのノードは、Element.Faces と同様の機能に加えて、Revit 要素のジオメトリを掘り下げるのに役立つオプションを提供します。
- リストの基本的操作をいくつか行うことで、対象の面のクエリーを実行できます。
- まず List.Count ノードで、作業中のマスに 23 のサーフェスが含まれていることを確認します。
- この数値を基準として、Integer Slider ノードの最大値を「22」に変更します。
- List.GetItemAtIndex ノードを使用して、リストとindex に使用する Integer Slider ノードを入力します。 選択したスライダを index 9 まで動かして、トラスをホストしているメイン ファサードが選択表示された段階で停止します。
- 前の手順は少しばかり面倒でした。Select Face ノードを使用すると、同じことをもっとすばやく実行することができます。 これにより、Revit プロジェクト内ではそれ自体で 1 つの要素として扱われない面も選択できます。Select Model Element でも同様の操作を行うことができます。ただし、こちらでは要素全体ではなくサーフェスを選択します。
建物のメイン ファサードの壁を選択してみましょう。Select Faces ノードを使用してこれを行うことができます。 [選択]ボタンをクリックし、Revit の 4 つのメイン ファサードを選択します。
- 4 つの壁面を選択した後で、必ず Revit で[終了]ボタンをクリックしてください。
- これで、面が Dynamo にサーフェスとして読み込まれました。
- さて、アトリウムの上の梁を見てみましょう。Select Model Element ノードを使用して、梁のうち 1 つを選択します。
- 梁の要素を Element.Geometry ノードに接続すると、Dynamo のビューポートで梁が表示されるようになります。
- Watch3D ノードを使用してジオメトリを拡大表示することができます(Watch 3D で梁が表示されない場合は、右クリックしてから[全体表示]を選択します)。
Revit と Dynamo の使用中にしばしば生じる疑問として、1 つの要素を選択して、それに類似するすべての要素を取得するにはどうすればいいのか、というものがあります。選択した Revit 要素にはその要素の階層に関する情報がすべて含まれているので、そのファミリ タイプをクエリーして、同じタイプの要素をすべて選択することができます。
- 梁の要素を FamilyInstance.Symbol ノードに接続します。
- Watch ノードで、出力が Revit 要素ではなくファミリ記号になっていることが確認できます。
- FamilyInstance.Symbol は単純なクエリーですから、コード ブロック内で簡単に
x.Symbol
と入力して同様の結果を得ることができます。
注 - ファミリ記号は Revit API でファミリ タイプを指す用語です。 この用語は混乱を引き起こしかねないため、今後のリリースで変更される可能性があります。
- 残りの梁を選択するには、All Elements of Family Type ノードを使用します。
- Watch ノードで、5 つの Revit 要素が選択されていることを確認します。
- これら 5 つの要素すべてを Dynamo のジオメトリに変換することもできます。
しかし、500 本の梁を変換しなければならないとしたら、どうでしょうか。すべての要素を Dynamo ジオメトリに変換するにはたいへんな時間がかかるでしょう。Dynamo でノードの計算に膨大な時間がかかる場合は、ノードを「フリーズ」する機能を使用して、グラフの開発中に Revit 関連操作の実行を停止することができます。ノードをフリーズする操作の詳細については、「ソリッド」の章の「フリーズ」セクションを参照してください。
いずれにせよ、500 本の梁を読み込まなければならない場合、目的のパラメータ操作を実行するのにすべてのサーフェスは必要あるでしょうか。それとも、梁から基本情報を抽出して、基本的なジオメトリを使用して生成タスクを実行すればよいでしょうか。この問いを念頭に置きながら、この章での演習を進めていくことにしましょう。たとえば、トラス システムのことを考えてみてください。
同じノードのグラフを使用して、梁要素ではなくトラス要素を選択します。この操作を行う前に、ここまでの手順で使用した Element.Geometry を削除してください。
- Watch ノードで、Revit から選択されたアダプティブ コンポーネントのリストを取得していることを確認できます。 基本情報を抽出するために、まずはアダプティブ点からとりかかります。
- All Elements of Family Type ノードを AdaptiveComponent.Location ノードに接続します。 これによってリストのリストが 1 つ作成されます。各リストは、アダプティブ点の場所を表す 3 つの点から構成されています。
- Polygon.ByPoints ノードを接続すると、ポリカーブが返されます。 これは Dynamo のビューポートで確認できます。この方法により、1 つの要素のジオメトリを表示し、残りの要素配列のジオメトリを抽出しました(なお、ここで扱った例よりも多くの要素を抽出することが可能です)。
*ヒント: Dynamo で、Revit 要素の緑の背景色付きで表示されている数字をクリックすると、Revit のビューポートでその要素が拡大表示されます。