1. ParaView の紹介
1.1. はじめに
ParaView は、オープンソースのマルチプラットフォーム科学データ分析および可視化ツールで、非常に大規模なデータセットの分析と可視化を可能にします。ParaView は、デスクトップやその他のアプリケーションでシームレスに利用できる分散アーキテクチャを備えた、汎用的なエンドユーザーアプリケーションです。 スクリプト作成(Pythonの使用)、Web表示( trame とParaViewWeb経由)、またはin-situ解析(Catalystを使用)など、さまざまなアプリケーション用のツールとライブラリのコレクションを備えた、拡張可能なフレームワークです。
ParaView は、並列データ処理とレンダリングを活用して、非常に大規模なデータセットのインタラクティブな可視化を可能にします。また、タイル型ディスプレイやヘッドトラッキング機能とワンドコントロール機能を備えた没入型3Dディスプレイなどの大型ディスプレイもサポートしています。
ParaView は、Pythonを使用したスクリプトとバッチ処理もサポートしています。付属のPythonモジュールを使用すると、インタラクティブアプリケーションによって公開されているほぼすべての機能やその他多くの機能を実行できるスクリプトを作成できます。
ParaView はオープンソースです(BSDライセンス、商用ソフトウェアに対応)。成功したオープンソースプロジェクトと同様に、ParaView はアクティブなユーザーおよび開発者コミュニティによってサポートされています。ツールとドキュメントの改善に役立つコードとこのユーザー・マニュアルの両方への貢献をいつでも歓迎します。
Did you know?
ParaViewプロジェクトは、Kitware Inc.とLANLの共同プロジェクトとして2000年に開始され、当初の資金は米国エネルギー省のASCIビューズ・プログラムとの3年間の契約により提供されました。最初のパブリックリリースである ParaView 0.6は、2002年10月に発表されました。
ParaView とは独立して、Kitwareは2001年12月にWebベースの可視化システムの開発を開始しました。このプロジェクトは、 US ARL から PVEE になりました。 PVEE は、ParaView のクライアント/サーバアーキテクチャの開発に大きく貢献しました。PVEE は、ParaView をベースにした最新のWeb可視化ソリューションであるParaViewWebの前身です。
Kitwareはプロジェクト開始以来、Sandia国立研究所、LANL、ARL、その他さまざまな学術機関や政府機関と協力して開発を続けてきました。今日もプロジェクトは順調に進んでいます!
2005年9月、Kitware、Sandia National Labs、CSimSoftの3社は、ユーザー・インターフェースをより使いやすいものに書き直し、定量分析フレームワークを開発することに重点を置いた、ParaView 3.0の開発を開始しました。「ParaView 3.0」 は2007年5月に発売されました。
1.1.1. 本ガイドについて
このユーザーズマニュアルは、ParaView アプリケーションを使用するためのガイドとして設計されています。これは、一般的なデータ可視化技術を一般的に理解しているユーザーを対象としています。スクリプトを書くためには、Python言語の知識が必要です。Pythonに慣れていない場合は、インターネット上にいくつかのチュートリアルやガイドがあります。
Did You Know?
本ガイドでは、これらの Did you know? ボックスを定期的に使用して、手元の話題に関連する追加情報を提供します。
Common Errors
Common Errors ブロックは、議論のトピックを扱う際に遭遇する可能性のある一般的な問題や複雑さを強調するために使用されます。
本ガイドは複数の巻に分かれています。
1.1.2. ヘルプの入手
This guide tries to cover most of the commonly used functionality in ParaView. ParaView's flexible, pipeline-based architecture opens up numerous possibilities. If you find yourself looking for some feature not covered in this guide, refer to the ParaView Discourse forum, specially the FAQ and the Tips and Tricks categories. Also feel free to ask about it under the relevant Support category.
1.1.3. ソフトウェアの入手
ParaView をインストールする最も簡単な方法は、Linux、macOS、Windows 向けのバイナリ版をダウンロードすることです。すべてのバイナリリリースおよびナイトリービルドは以下から入手できます: http://www.paraview.org/download
これらのバイナリ版はリロケータブルであり、システムへの依存を最小限に抑えていますが、場合によってはいくつかをインストールする必要があります。
Windows では、MPI バージョンをダウンロードした場合、https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi から MS-MPI をインストールする必要があります。
Linux では、システムに xcb、x11、glu、xrender、xi、xkbcommon、xkbcommon-x11 などのライブラリをインストールする必要があります。debian/ubuntu では、次のコマンドでインストールできます:
sudo apt install '^libxcb.*' libx11-xcb libglu1-mesa libxrender libxi libxkbcommon libxkbcommon-x11
ParaView はオープンソースです。完全なソースコードは以下の場所からダウンロードできます: http://www.paraview.org/download または GitLab: https://gitlab.kitware/com/paraview/paraview。ソースファイルを使って ParaView をビルドする方法の詳細は本ガイドの範囲外です。詳細については ParaView の GitLab (https://gitlab.kitware.com/paraview/paraview/-/blob/master/Documentation/dev/build.md) を参照してください。
1.2. ParaView による可視化の基礎
図 1.1 可視化モデル:プロセスオブジェクトA、B、Cは、1つまたは複数のデータオブジェクトを入力および/または出力する。データオブジェクトはデータを表し、データへのアクセスを提供し、プロセスオブジェクトはデータに対して操作を行います。オブジェクトA、B、Cはそれぞれソース、フィルタ、マッパーオブジェクトです。 [SML96]
可視化とは、生データを画像やレンダリングに変換して、データのより良い認知的理解を得るプロセスです。ParaView は、可視化とデータ処理のためのバックボーンを提供するために、VTK、Visualization Toolkitを使用しています。
VTKモデルは、データフローパラダイムに基づいています。 このパラダイムでは、データはアルゴリズムとして知られるモジュールによって各ステップで変換されるシステムを通して進みます。 アルゴリズムは、データからのクリッピング、スライシング、またはコンターの生成などの一般的な操作や、または導出された物理量の計算などが可能です。 アルゴリズムには、データを取り込むための入力ポートと、出力を生成するための出力ポートがあります。 システムにデータを取り込むプロデューサーが必要です。 これらは、入力ポートを持ちませんが、1つ以上の出力ポートを持つ単純なアルゴリズムです。 これらは ソース (sources) と呼ばれます。 ファイルからデータを読み取るリーダーは、このようなソースの例です。さらに、データをグラフィックスプリミティブに変換して、コンピュータ画面上でレンダリングしたり、別のファイルのディスクに保存したりできるようにするアルゴリズムもあります。これらのアルゴリズムは シンク(sinks) と呼ばれ、1つ以上の入力ポートを持ちますが、出力ポートは持ちません。入力ポートと出力ポートを持つ中間アルゴリズムは、フィルタ(filters) と呼ばれます。ソース、フィルタ、シンクを組み合わせることで柔軟なインフラストラクチャを実現し、アルゴリズムを接続して任意の複雑なタスクを実行するだけで、複雑な処理パイプラインを作成できます。
VTKのプログラミングモデルについての詳細は [SML96] を参照してください。
このように可視化パイプラインを見る方法は、ParaView のワークフローの中核にあります。リーダー(ソース)を作成することで、データをシステムに取り込みます。次に、フィルタを適用して、情報(等値線)を抽出して結果をビューに表示するか、ライター、つまりシンクを使用してデータをディスクに保存します。
ParaView includes readers for a multitude of file formats typically used in the computational science world. To efficiently represent data from various fields with varying characteristics, VTK provides a rich data model that ParaView uses. The data model can be thought of simply as ways of representing data in memory. We will cover the different data types in more detail in 4.1 章. Readers produce a data type suitable for representing the information the files contain. Based on the data type, ParaView allows you to create and apply filters to transform the data. You can also show the data in a view to produce images or renderings. Just as there are several types of filters, each performing different operations and types of processing, there are several kinds of views for generating various types of renderings including 3D surface views, 2D bar and line views, parallel coordinate views, etc.
Did You Know?
Visualization Toolkit (VTK) は、3Dコンピューターグラフィックス、モデリング、画像処理、ボリュームレンダリング、科学的可視化、情報可視化用のオープンソースの無償ソフトウェアシステムです。VTKには、3Dインタラクションウィジェット、2次元および3次元アノテーション、並列コンピューティングの補助サポートも含まれます。
VTK の中核は C++ ツールキットとして実装されており、ユーザーはさまざまなオブジェクトを組み合わせてアプリケーションを構築する必要があります。このシステムは、C++ コアを Python や Java に自動ラッピングすることもサポートしているため、VTK アプリケーションをこれらのプログラミング言語で記述することも可能です。VTK は商用アプリケーション、研究開発、そして ParaView、VisIt、VisTrails、Slicer、MayaVi、OsiriX といった多くの高度な可視化アプリケーションの基盤として、世界中で利用されています。
1.3. ParaView 実行ファイル
ParaView には、さまざまな目的に応じた複数の実行ファイルが含まれています。プログラムのコマンドラインインターフェースに関する詳細は 2 章 で説明されています。
1.3.1. paraview
これは ParaView のメインのグラフィカルユーザーインターフェース(GUI)です。ほとんどの場合、ParaView と言うと、このアプリケーションを指しています。これは Qt ベースのクロスプラットフォーム UI であり、ParaView の計算機能にアクセスできます。本ガイドの大部分は、このアプリケーションを理解し活用することに充てられています。
1.3.2. pvpython
pvpython は、Pythonスクリプトを実行するPythonインタプリタです。これはスクリプトを実行するための paraview に相当するものと考えることができます。
1.3.3. pvbatch
pvpython と同様に、pvbatch は ParaView のPythonスクリプトを実行するPythonインタプリタでもあります。1つの違いは、pvpython は対話型スクリプトを実行するためのものですが、pvbatch はバッチ処理用に設計されていることです。また、MPI機能を使用してコンピュータリソース上で実行する場合は、pvbatch を並列で実行できます。これについては、8.12 章 で詳しく説明します。
1.3.4. pvserver
リモート可視化では、この実行可能ファイルはすべてのデータ処理を実行するサーバを表し、場合によってはレンダリングも実行します。 paraview を、HPCリソース上でリモートで実行されている pvserver に接続できます。これにより、あたかもデスクトップ上でローカルに処理しているかのように、デスクトップからHPCリソースの可視化と分析を構築および制御できます。
1.3.5. pvdataserver と pvrenderserver
これらは、pvserver が2つの実行可能ファイルに分割されたものと考えることができます。1つはデータ処理部 pvdataserver 用、もう1つはレンダリング部 pvrenderserver 用です。これらを別々のプロセスに分割すると、データ処理とレンダリングを、2つのタスクに適した適切な計算機能を持つ別々のノード・セットで実行できます。pvserver と同様に、paraview は pvdataserver -pvrenderserver ペアに接続してリモート表示できます。特に明記されていない限り、このガイドのリモート表示またはクライアント/サーバー表示の説明は、pvserver と pvdataserver -pvrenderserver の両方の構成に適用されます。
1.4. paraview 入門
1.4.1. paraview グラフィカルユーザーインターフェース
paraview は、ParaView アプリケーションのグラフィカルなフロントエンドです。UIは、任意の複雑さでデータ処理のパイプラインを簡単に作成できるように設計されています。UIには、パイプラインを検査および修正したり、処理パイプラインに影響するパラメータを変更したり、さまざまなデータ選択および検査アクションを実行してデータを検査したり、レンダリングを生成したりするためのパネルが用意されています。このガイドの後半では、UIのさまざまな側面について説明します。
まず、UIのさまざまなコンポーネントを見てみましょう。paraview を初めて実行すると、 図 1.2 のようなものが表示されます。UIは、メニュー、ドッキング可能なパネル、ツールバー、ビューポート -- アプリケーションウィンドウの中央部分で構成されています。
図 1.2 paraview アプリケーションウインドウ
メニューには、ファイルを開いたり保存したりするためのオプション(File メニュー)、元に戻す/やり直しのためのオプション(Edit メニュー)、トグルパネルのためのオプション、およびツールバーを表示するためのオプション(View メニュー)など、デスクトップアプリケーションで一般的なオプションの標準セットが用意されています。さらに、メニューを使用して、さまざまなタイプのテストデータセットを生成するソース(Sources メニュー)や、データを処理するための新しいフィルタ(Filters メニュー)を作成できます。Tools メニューでは、プラグインやお気に入りの管理など、paraview の一部の高度な機能にアクセスできます。
パネルを使用すると、アプリケーションの状態を確認できます。たとえば、設定済みの可視化パイプライン( Pipeline Browser )、使用中のメモリ( Memory Inspector )、処理モジュールのパラメータまたはプロパティ( Properties パネル)を検査できます。いくつかのパネルでは、表示される値を変更することもできます。たとえば、 Properties パネルには、処理モジュールのパラメータが表示されるだけでなく、パラメータを変更することもできます。 いくつかのパネルはコンテキストに依存します。たとえば、 Properties パネルは、 Pipeline Browser でアクティブなモジュールを変更すると、選択したモジュールのパラメータが表示されるように変更されます。
ツールバーは、一般的な機能にすばやくアクセスできるように設計されています。ツールバーのいくつかのアクションには、メニューやパネルなど、他の場所からアクセスできます。パネルと同様に、一部のツールバーボタンはコンテキスト依存であり、選択したモジュールまたはビューに基づいて有効または無効になります。
ビューポートまたは ParaView ウィンドウの中央部分は、ParaView がデータから生成された結果をレンダリングする領域です。データを表示または表示できるコンテナは、views と呼ばれます。複数の異なるタイプのビューを作成することができ、そのすべてがこのビューポート領域にレイアウトされます。デフォルトでは、ParaView で最もよく使用されるビューの1つである3Dビューが作成されます。
1.4.2. 可視化プロセスの理解
アプリケーションインターフェイスの使い方をよりよく理解するために、データソースを作成してフィルタを適用するという簡単な例を考えてみましょう。
1.4.3. ソースを作成する
ParaView の可視化プロセスは、データをアプリケーションに取り込むことから始まります。さまざまなファイルフォーマットからデータを読み取る方法については、3 章 を参照してください。ParaView では、アプリケーションにデータを取り込むためにファイルを読み取るだけでなく、サンプルデータセットを生成できるデータソースのコレクションも提供しています。これらは、Sources メニューの下にあります。ソースを作成するには、Source メニューの任意の項目をクリックします。
Did You Know?
任意のメニュー内の項目にカーソルを移動すると、ほとんどのプラットフォーム(macOS を除く)では、アプリケーションウィンドウの左下隅にあるステータスバーにその項目の簡単な説明が表示されます。
例えば、Sources > Alphabetical > Sphere をクリックすると、図 1.3 に示すように球面を生成するプロデューサアルゴリズム(データ生成アルゴリズム)が作成されます。
図 1.3 paraview の可視化: Step 1
次の点に注意してください。:
パイプラインモジュールが、ハイライト表示されているメニュー項目から派生した名前で
Pipeline Browserパネルに追加されます。Propertiesパネルには、ハイライト表示されたアイテム(この例では、Sphere1)のプロパティを示すテキストが表示されるほか、Center、Radiusなどのパラメータ用のウィジェットも表示されます。Propertiesパネルで、Applyボタンが有効になり強調表示されます。3Dビューは影響を受けません。このビューには現在、新しいものが表示またはレンダリングされていないためです。
何が起こったのか詳しく見てみましょう。Sources > Sphere をクリックすると、 1.2 章 では、球状サーフェスメッシュを生成できるソースのインスタンスを作成しました--これが Pipeline Browser に反映されます。 このインスタンスは名前を受け取ります。この名前は、UIの他のコンポーネントだけでなく、Sphere1 と Pipeline Browser がソースのこのインスタンスを参照するために使用します。ソースやフィルタなどのパイプラインモジュールには、モジュールの動作に影響を与えるパラメータを変更できます。これを プロパティ と呼びます。Properties パネルにはこれらのプロパティが表示され、変更できます。 システムへのデータ取り込みには時間がかかるため、paraview を使用すると、モジュールを実行する前、または実際の処理を実行してデータを取り込む前にプロパティを変更できます。このため、 Apply ボタンが強調表示され、アプリケーションを続行する前にプロパティを受け入れる必要があることが示されます。システムにデータが入力されていないため、表示するものはありません。したがって、3Dビューは影響を受けません。
ここでは、 Sphere1 の全てのプロパティのデフォルト値で問題ないとします。次に、 Apply ボタンをクリックします。
ここでは、 Sphere1 の全てのプロパティのデフォルト値で問題ないとします。次に、 Apply ボタンをクリックします。
図 1.4 paraview の可視化: Step 2.
次のようになります( 図 1.4 ):
Applyボタンは、以前の無効/ハイライトされていない状態に戻ります。球面は、3Dビューでレンダリングされます。
PropertiesパネルのDisplayセクションに、新しいパラメータまたはプロパティが表示されるようになりました。特定のツールバーが更新され、
Solid ColorやSurfaceなどのテキストが含まれたツールバーが有効になったことがわかります。
Apply をクリックして、paraview に Properties パネルに表示されるプロパティを適用するよう指示しました。新しいソース(またはフィルタ)が最初に適用されると、可能であれば、paraview はパイプラインモジュールが現在のビューで生成するデータを自動的に表示します。 この場合、球ソースはサーフェスメッシュを生成し、3Dビューに表示されます。
ビューでのデータの表示方法を制御できるプロパティが、Display セクションの Properties パネルに表示されるようになりました。サーフェスカラー、レンダリングのタイプや表現、シェーディングパラメータなどは、この新しく更新されたセクションの下に表示されます。表示プロパティの詳細については、5 章 を参照してください。
一般的に使用されるプロパティの一部は、ツールバーでも複製されます。これらのプロパティには、サーフェスに色を付けるデータ配列と表示タイプが含まれます。これらは、一部の表示プロパティをすばやく変更できるようにするツールバーの変更です。
1.4.4. プロパティを変更する
球形メッシュの Radius やその Center など、Properties パネルの Properties セクションの下にあるプロパティなど、球体ソースのプロパティを変更すると、Apply ボタンが再度強調表示されます。すべてのプロパティの変更が完了したら、Apply をクリックして変更を適用します。変更が適用されると、paraview は要求に応じて球ソースを再実行して新しいメッシュを生成します。ビューが自動的に更新され、新しい結果がレンダリングされます。
Properties パネル(Representation または Opacity を含む)の Display セクションの下のプロパティなど、球ソースの表示プロパティを変更しても、Apply ボタンは影響を受けず、変更がすぐに適用されてビューが更新されます。
この背後にある理論的根拠は、通常、ソース(またはフィルタ)の実行はレンダリングよりも計算量が多くなるということです。ソース(またはフィルタ)プロパティを変更すると、そのアルゴリズムが再実行されますが、表示プロパティを変更しても、ほとんどの場合、更新されたグラフィックス状態で新しいレンダリングが開始されるだけです。
Did You Know?
データサイズが小さいワークフローでは、パイプラインモジュールのプロパティを変更した後でも Apply ボタンが自動的に適用される方が便利な場合があります。これはアプリケーション設定ダイアログから変更でき、Edit > Settings メニュー(macOS では ParaView > Preferences...)からアクセスできます。この設定は Auto Apply と呼ばれます。また、ツールバーの
ボタンからも Auto Apply の状態を変更できます。
1.4.5. フィルタを適用する
データフローパラダイムによると、パイプラインを作成するには フィルタを使用してデータを変換します。新しいデータソースを作成できる Sources メニューと同様に、Filters メニューでは、ParaView で使用できる多数のフィルタにアクセスできます。このメニューの項目を確認すると、一部が有効になり、一部が無効になります。sphereソースによって生成されたデータタイプで動作するフィルタは有効ですが、その他は無効です。有効なフィルタのいずれかをクリックすると、そのフィルタタイプの新しいインスタンスを作成できます。
Did You Know?
特定のフィルタが現在のソースで動作しない理由を調べるには、次の手順を実行します。 Filters メニューの無効になっている項目の上にマウスを移動するだけです。LinuxおよびWindows(OS Xではない)の場合、ステータスバーにそのフィルタが使用できない理由が簡単に説明されます。
たとえば、Filters > Shrink をクリックすると、各メッシュセルを固定係数で縮小するフィルタが作成されます。前述のとおり、球体ソースを作成すると、新しく作成されたフィルタに新しい名前 Shrink1 が付けられ、Pipeline Browser で強調表示されます。Properties パネルも更新され、この新しいフィルタのプロパティが表示されます。Apply ボタンが強調表示され、フィルタのプロパティを受け入れてフィルタを実行し、結果をレンダリングできるように要求されます。Pipeline Browser で Sphere1 と Shrink1 をクリックすると、選択したパイプラインモジュールの状態を反映した Properties パネルとツールバーが更新されます。これは、ParaView の重要な概念です。アクティブパイプラインモジュールには、アクティブソース (active source) という概念があります。
以前のように Apply をクリックすると、縮小フィルタが実行され、結果のデータセットが生成されて3Dビューに表示されます。paraview は自動的に Sphere1 の結果を非表示にして、ビューに表示されないようにします。そうしないと、2つのデータセットがオーバーラップします。これは、各パイプラインモジュールの横にある Pipeline Browser 内の 目玉 アイコンの状態の変化に反映されます。目玉をクリックすると、パイプラインモジュールの結果を表示または非表示にできます。
この単純なワークフローは、ParaView のすべてのデータ分析と可視化の基礎を形成します。このプロセスでは、ソースとフィルタを作成し、それらのパラメータを変更し、生成された結果を1つまたは複数のビューに表示します。このガイドの残りの部分では、さまざまな種類のフィルタと、ユーザーが実行できるデータ処理について説明します。また、さまざまな2Dおよび3Dの可視化結果を作成し、データを検査してドリルダウンを行うのに役立つさまざまなタイプのビューについても説明します。
Common Errors
初心者の方は、ソースやフィルタを作成した後やプロパティを変更した後に、 Apply ボタンを押すのを忘れてしまうことがよくあります。これは、ParaView ワークフローを初めて使用する新規ユーザーにとって最も一般的な落とし穴の一つです。
1.5. pvpython 入門
本節では pvpython について説明しますが、ここで説明する内容はすべて pvbatch にも適用できます。並列処理について説明するまでは、2つの実行可能ファイルの唯一の違いは、pvpython はコマンドを入力できる対話型シェルを提供するのに対し、pvbatch はコマンドライン引数にPythonスクリプトが指定されていることを想定している点です。
1.5.1. pvpython スクリプトインターフェイス
ParaView には、GUIを使用して実行できるタスクを実行するためのスクリプトを記述するためのスクリプトインターフェイスが用意されています。このスクリプトインターフェイスには、Pythonを介してアクセスできます。Pythonは、そのシンプルさと機能によって科学界で広く使用されているインタプリタ型プログラミング言語です。Pythonに関する実用的な知識があれば、高度な機能を持つスクリプトを作成するのに役立ちますが、ParaView スクリプティングについてのこのマニュアルのほとんどの説明は、Pythonに関する知識がなくても理解できるはずです。
ParaView は、さまざまな機能を公開する複数のPythonモジュールを含む paraview パッケージを提供します。主なスクリプトインターフェイスは、simple モジュールによって提供されます。
pvpython を起動すると、ターミナルウィンドウに次のプロンプトが表示されます(プラットフォーム固有の違いがいくつかあります)。
Python 3.10.13 (main, Feb 9 2024, 16:19:38)
[Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
このプロンプトでコマンドを入力すると、ParaView がコマンドを実行します。ParaView スクリプトAPIを使用するには、最初に paraview パッケージから simple モジュールを次のようにインポートする必要があります。
>>> from paraview.simple import *
Common Errors
コマンドを実行するたびに、Enter キーまたは Return キーを押してください。どのPythonインタプリタも、Enter がヒットするまでコマンドを実行しません。
モジュールが正しくロードされていれば、pvpython は次のコマンドのプロンプトを表示します。
>>> from paraview.simple import *
>>>
これは、paraview が起動されたときと同じ状態(今のところ無視できる違いがいくつかあります)と考えることができます。アプリケーションがデータを取り込み、処理を開始する準備ができました。
1.5.2. 可視化プロセスの理解
1.4.2 章 で行ったのと同じ使用事例を見て、ワークフローを理解してみましょう。
1.5.3. ソースを作成する
paraview では、Sources メニューを使用してデータソースを作成しました。スクリプト環境では、これは単に作成するソースの名前を入力することに対応します。
>>> Sphere()
これにより、デフォルトのプロパティセットを持つ球ソースが作成されます。paraview と同様に、新しいパイプラインモジュールが作成されるとすぐに アクティブソース になります。
ビューにアクティブソースを表示するには、次の操作を実行します。:
>>> Show()
>>> Render()
Show を呼び出すと表示が準備され、Render を呼び出すとレンダリングが実行されます。さらに、新しいウィンドウがポップアップし、結果が表示されます ( 図 1.5)。これは、UIで Apply をクリックした後の状態に似ています。
図 1.5 Pythonコードの結果を表示するウィンドウ
1.5.4. プロパティを変更する
球ソースのプロパティを変更するには、SetProperties 関数を使用します。
# Set a single property on the active source.
>>> SetProperties(Radius=1.0)
# You can also set multiple properties.
>>> SetProperties(Center=[1, 0, 0], StartTheta=100)
Properties パネルと同様に、SetProperties はアクティブソースに影響します。アクティブソース上のプロパティの現在の値を照会するには、GetProperty を使用します。
>>> radius = GetProperty("Radius")
>>> print(radius)
1.0
>>> center = GetProperty("Center")
>>> print(center)
[1.0, 0.0, 0.0]
SetProperties 関数と GetProperty 関数は、Properties パネルの Properties セクションと同じ関数を提供します--これらの関数を使用すると、アクティブソースのパイプラインモジュールプロパティを設定して内観することができます。 同様に、パネルの Display セクションまたは表示プロパティには、SetDisplayProperties 関数と GetDisplayProperty 関数があります。
>>> SetDisplayProperties(Opacity=0.5)
>>> GetDisplayProperty("Opacity")
0.5
Common Errors
SetProperties および SetDisplayProperties 関数のプロパティ名は二重引用符で囲まれていませんが、GetProperty および GetDisplayProperty メソッドのプロパティ名は二重引用符で囲まれています。
paraview では、Apply をクリックするか、表示プロパティを変更するたびに、UIによってビューが自動的に再レンダリングされます。スクリプト環境では、再レンダリングして更新された結果を確認するたびに、Render 関数を呼び出して手動で実行する必要があります。
.
1.5.5. フィルタを適用する
ソースの作成と同様に、フィルタを適用するには、名前でフィルタを作成するだけです。
# Create the `Shrink' filter and connect it to the active source
# which is the `Sphere' instance.
>>> shrink = Shrink()
# As soon as the Shrink filter is created, it will now become the new active
# source. All methods acting on active source now act on this filter instance
# and not the Sphere instance created earlier.
# Show the resulting data and render it.
>>> Show()
>>> Render()
上記のスクリプトを試した場合、結果が期待どおりになっていないことに気づくでしょう。何らかの理由で縮小されたセルが表示されません。これは、1 つのステージを見落としていたためです。paraview では、Apply を押した後に新しく作成されたフィルタの入力データセットを自動的に非表示にするほど UI が賢いのですが、スクリプトインターフェースではその操作はユーザーの責任となります。本来はビューから Sphere ソースを非表示にする必要がありました。これを行うには、アクティブなソースを非表示にするために Show に対応する Hide メソッドを使用します。しかし、ここで問題が発生します。Shrink フィルタを作成したとき、アクティブなソースが Shrink インスタンスに切り替わってしまいます。幸い、これまでに説明したすべての関数は、オプションの第1引数として操作対象となるソースやフィルタのインスタンスを受け取ることができます。もしそれが指定されれば、アクティブソースの代わりにそのインスタンスが使用されます。解決策は次のとおりです。
# Get the input property for the active source, i.e. the input for the shrink.
>>> shrinksInput = shrink.Input
# This is indeed the sphere instance we created earlier.
>>> print(shrinksInput)
<paraview.servermanager.Sphere object at 0x11d731e90>
# Hide the sphere instance explicitly.
>>> Hide(shrinksInput)
# Re-render the result.
>>> Render()
あるいは、GetActiveSource 関数や SetActiveSource 関数を使って、アクティブソースを取得/設定することもできます。
>>> shrink = GetActiveSource()
>>> print(shrink)
<paraview.servermanager.Shrink object at 0x11d731ed0>
# Get the input property for the active source, i.e. the input
# for the shrink.
>>> sphere = GetProperty("Input")
# This is indeed the sphere instance we created earlier.
>>> print(sphere)
<paraview.servermanager.Sphere object at 0x11d731e90>
# Change active source to sphere and hide it.
>>> SetActiveSource(sphere)
>>> Hide()
# Now restore the active source back to the shrink instance.
>>> SetActiveSource(shrink)
# Re-render the result
>>> Render()
結果を 図 1.6 に示します。
図 1.6 縮小フィルタを適用した後のPythonコードの結果を示すウィンドウ
SetActiveSource は、Pipeline Browser で強調表示されているパイプラインモジュールを、別のモジュールをクリックして変更するのと同じ効果があります。
1.5.6. 代替方法
ここでは、Pythonやオブジェクト指向プログラミングに精通している人のために、前節で行ったのと同様のことを行う別の方法を示します。前節のアプローチを続けるのはまったく問題ありません。
>>> from paraview.simple import *
>>> sphere = Sphere()
>>> sphere.Radius = 1.0
>>> sphere.Center[1] = 1.0
>>> print(sphere.Center)
[0.0, 1.0, 0.0]
>>> sphereDisplay = Show(sphere)
>>> view = Render()
>>> sphereDisplay.Opacity = 0.5
# Render function can take in an optional view argument, otherwise it
# will simply use the active view.
>>> Render(view)
>>> shrink = Shrink(Input=sphere,
ShrinkFactor=1.0)
>>> print(shrink.ShrinkFactor)
1.0
>>> Hide(sphere)
>>> shrinkDisplay = Show(shrink)
>>> Render()
1.5.7. パイプラインを更新する
paraview の Properties パネルでプロパティを変更すると、 Apply をクリックするまでアルゴリズムが再実行されないことに気付きました。実際には、Apply は、処理パイプラインの実行または更新を実際にトリガーしているものではありません。すると、Apply によってパイプラインモジュールのパラメータが更新され、ビューがレンダリングされます。パイプラインモジュールの出力がビューに表示されている場合、またはその下流に接続されているフィルタの出力がビューに表示されている場合、ParaView はレンダリングされたデータが古いものであると判断し、パイプラインの再実行を要求します。これは、パイプラインモジュール(または下流のフィルタ)がビューに表示されない場合、ParaView にはパイプラインを再実行する理由がなく、パイプラインモジュールは更新されないことを意味します。後でこのモジュールをビューに表示すると、ParaView が自動的に更新され、パイプラインが実行されます。これはしばしば demand-driven pipeline execution(需要主導型パイプライン実行) と呼ばれます。これにより、不要なモジュールの実行を回避できます。
paraview では、アプリケーションがパイプライン更新を自動的に管理するため、これに気付かなくても済みます。pvpython でも、スクリプトがビューにレンダリングを生成している場合、Render を呼び出すことを忘れない限り、これに気付くことはありません。ただし、変換されたデータセットを生成したり、データ特性を決定したりするためのスクリプトを記述することもできます。このような場合、ビューを作成することはないので、プロパティを何度変更しても、パイプラインの更新は表示されません。
したがって、UpdatePipeline 関数を使用する必要があります。 UpdatePipeline は、アクティブソース(または、アクティブソースまでのみ。つまり、その下流にあるすべてのソースが更新されなくなるまで)に接続されているパイプラインを更新します。
>>> from paraview.simple import *
>>> sphere = Sphere()
# Print the bounds for the data produced by sphere.
>>> print(sphere.GetDataInformation().GetBounds())
(1e+299, -1e+299, 1e+299, -1e+299, 1e+299, -1e+299)
# The bounds are invalid -- no data has been produced yet.
# Update the pipeline explicitly on the active source.
>>> UpdatePipeline()
# Alternative way of doing the same but specifying the source
# to update explicitly.
>>> UpdatePipeline(proxy=sphere)
# Let's check the bounds again.
>>> sphere.GetDataInformation().GetBounds()
(-0.48746395111083984, 0.48746395111083984, -0.48746395111083984, 0.48746395111083984, -0.5, 0.5)
# If we call UpdatePipeline() again, this will have no effect since
# the pipeline hasn't been modified, so there's no need to re-execute.
>>> UpdatePipeline()
>>> sphere.GetDataInformation().GetBounds()
(-0.48746395111083984, 0.48746395111083984, -0.48746395111083984, 0.48746395111083984, -0.5, 0.5)
# Now let's change a property.
>>> sphere.Radius = 10
# The bounds won't change since the pipeline hasn't re-executed.
>>> sphere.GetDataInformation().GetBounds()
(-0.48746395111083984, 0.48746395111083984, -0.48746395111083984, 0.48746395111083984, -0.5, 0.5)
# Let's update and see:
>>> UpdatePipeline()
>>> sphere.GetDataInformation().GetBounds()
(-9.749279022216797, 9.749279022216797, -9.749279022216797, 9.749279022216797, -10.0, 10.0)
詳細は、4.3 章 の sphere.GetDataInformation APIで見てみましょう。
時間データセット(temporal datasets)の場合、UpdatePipeline には、パイプラインを更新しなければならない時間を表す時間引数が入ります。
# To update to time 10.0:
>>> UpdatePipeline(10.0)
# Alternative way of doing the same:
>>> UpdatePipeline(time=10.0)
# If not using the active source:
>>> UpdatePipeline(10.0, source)
>>> UpdatePipeline(time=10.0, proxy=source)
どのソースプロキシも、パイプラインに固有の以下の 3 つの機能を備えています:
UpdatePipelineInformation(): このメソッドは VTK アルゴリズム上で UpdateInformation() を呼び出します。また、UpdatePropertyInformation() を呼び出して任意の情報プロパティを更新します。UpdatePipeline(time): このメソッドは VTK アルゴリズム上で Update() を呼び出し、パイプラインが変更されている場合にパイプラインを実行します。time が指定されていない場合は現在の時刻が使用されます。パイプラインを更新するもう 1 つの方法はレンダリングを行うことです。レンダービューは接続されているすべてのパイプラインを更新します。GetDataInformation(time): このメソッドは vtkPVDataInformation オブジェクトを返し、1 つの出力に関するメタデータを取得するために使用できます。
1.6. paraview でのスクリプト記述
1.6.1. Python Shell
paraview アプリケーションは内部シェルへのアクセスも提供します。このシェルでは、pvpython とまったく同じようにPythonコマンドとスクリプトを入力できます。GUIでPythonシェルにアクセスするには、View > Python Shell メニューオプションを使用します。pvpython と全く同じプロンプトでダイアログがポップアップします。前節のコマンドをこのシェルに入力してみてください。各コマンドを入力すると、各コマンドの実行後にユーザインタフェースが更新されます。たとえば、球のソースインスタンスを作成すると、Pipeline Browser に表示されます。アクティブソースを変更すると、Pipeline Browser とその他のUIコンポーネントが更新され、変更が反映されます。プロパティまたは表示プロパティを変更すると、Properties パネルも更新され、変更が反映されます。
図 1.7 paraview の Python Shell は、スクリプトへのアクセスを提供します。
Did You Know?
paraview の Python Shell は、関数とインスタンスメソッドの自動補完をサポートします。何らかのコマンド( 図 1.7 に示すように)を部分的に入力した後、Tab キーを押してみてください。
1.6.2. スクリプトのトレースアクション
このガイドでは、ParaView のPython APIの概要を説明します。ただし、GUIで実行できる特定のアクションやアクションのシーケンスを完了する方法を知りたい場合は、代わりにPythonスクリプトを使用します。これを実現するために、paraview はPythonスクリプトとしてUIでのアクションのトレースをサポートしています。Tools > Start Trace をクリックしてトレースを開始します。paraview は、すべてのアクション(少なくともスクリプト作成に関連するものは)を監視するモードに入ります。ソースやフィルタを作成したり、データファイルを開いたり、プロパティを変更して Apply をクリックしたり、3Dシーンを操作したり、スクリーンショットを保存したりするたびに、アクションが監視されます。スクリプトを作成する一連のアクションが完了したら、Tools > Stop Trace をクリックします。paraview は生成されたトレースを含むエディターウィンドウをポップアップ表示します。これは、実行したアクションに相当するPythonスクリプトです。これをバッチ処理に使用するスクリプトとして保存できるようになりました。
Common Errors
GUI で実行した操作が Trace に正しく反映されない場合があります。例えば、Trace を Python から手動で開始した場合、開始/停止トレースボタンは同期されません。
トレースは次のように Python シェルから開始および停止することもできます。
from paraview import smtrace
config = smtrace.start_trace()
# config is an instance of vtkSMTrace. One can setup properties on this
# object to control the generated trace. e.g.
config.SetFullyTraceSupplementalProxies(True)
# do the actions to trace.
# stop trace. The generated trace is returned.
txt = smtracer.stop_trace()