1. ParaView の紹介

1.1. はじめに

ParaView は、オープンソースのマルチプラットフォーム科学データ分析および可視化ツールで、非常に大規模なデータセットの分析と可視化を可能にします。ParaView は、デスクトップやその他のアプリケーションでシームレスに利用できる分散アーキテクチャを備えた、汎用的なエンドユーザーアプリケーションです。 スクリプト作成(Pythonの使用)、Web表示(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国立研究所、LANLARL、その他さまざまな学術機関や政府機関と協力して開発を続けてきました。今日もプロジェクトは順調に進んでいます!

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 ブロックは、議論のトピックを扱う際に遭遇する可能性のある一般的な問題や複雑さを強調するために使用されます。

本ガイドは3巻に分かれています。

  • ユーザーズガイド1 章 から 8 章 では、ParaView によるデータ解析と可視化のさまざまな側面をカバーしています。

  • リファレンスマニュアル1 章 から 12 章 では、UIとスクリプトAPIのさまざまなコンポーネントについて詳しく説明しています。

  • チュートリアル自習チュートリアルクラスルームチュートリアル に分かれています。

    • 自習チュートリアル1 章 から 5 章 では、ParaView ソフトウェアとその歴史を紹介し、基本的な使用法、バッチPythonスクリプト、および大規模モデルの視覚化をカバーする ParaView の使用方法に関する演習を提供します。

    • クラスルームチュートリアル1 章 から 18 章 では、ParaView の使用方法に関する初級、応用、Python、バッチ、およびターゲットを絞ったチュートリアルレッスンを提供し、Sandia国立研究所内で3時間のクラスとして提示されます。

1.1.2. ヘルプの入手

このガイドでは、ParaView でよく使われる機能のほとんどをカバーするように心がけています。ParaView の柔軟でパイプラインベースのアーキテクチャは、多くの可能性を開きます。このガイドでカバーされていない機能をお探しの場合は、 Wiki ページParaView Discourse フォーラム 、特に FAQTips and Tricks カテゴリを参照してください。また、関連する Support カテゴリで気軽に質問してください。

1.1.3. ソフトウェアの入手

ParaView はオープンソースです。The ParaView Guideで議論されている全ての機能の完全なソースコードは、ParaView のウェブサイト http://www.paraview.org からダウンロードすることができます。主要なプラットフォーム用のバイナリも提供しています。Linux、Mac OS X、Windows用のバイナリも提供しています。公式リリースのソースファイルとバイナリを入手できるだけでなく、毎晩のビルドをダウンロードすることで、ParaViewの活発な開発をフォローすることができます。

ソースファイルを使用した ParaView の構築方法の詳細は、このガイドの範囲を超えています。詳細は、ParaView gitlab (https://gitlab.kitware.com/paraview/paraview/-/blob/master/Documentation/dev/build.md) を参照してください。

1.2. ParaView による可視化の基礎

../_images/VTKPipeline.png

図 1.1 可視化モデル:プロセスオブジェクトA、B、Cは、1つまたは複数のデータオブジェクトを入力および/または出力する。データオブジェクトはデータを表し、データへのアクセスを提供し、プロセスオブジェクトはデータに対して操作を行います。オブジェクトA、B、Cはそれぞれソース、フィルタ、マッパーオブジェクトです。 [SML96]

可視化とは、生データを画像やレンダリングに変換して、データのより良い認知的理解を得るプロセスです。ParaView は、可視化とデータ処理のためのバックボーンを提供するために、VTK、Visualization Toolkitを使用しています。

VTKモデルは、データフローパラダイムに基づいています。 このパラダイムでは、データはアルゴリズムとして知られるモジュールによって各ステップで変換されるシステムを通して進みます。 アルゴリズムは、データからのクリッピング、スライシング、またはコンターの生成などの一般的な操作や、または導出された物理量の計算などが可能です。 アルゴリズムには、データを取り込むための入力ポートと、出力を生成するための出力ポートがあります。 システムにデータを取り込むプロデューサーが必要です。 これらは、入力ポートを持ちませんが、1つ以上の出力ポートを持つ単純なアルゴリズムです。 これらは ソース (sources) と呼ばれます。 ファイルからデータを読み取るリーダーは、このようなソースの例です。さらに、データをグラフィックスプリミティブに変換して、コンピュータ画面上でレンダリングしたり、別のファイルのディスクに保存したりできるようにするアルゴリズムもあります。これらのアルゴリズムは シンク(sinks) と呼ばれ、1つ以上の入力ポートを持ちますが、出力ポートは持ちません。入力ポートと出力ポートを持つ中間アルゴリズムは、フィルタ(filters) と呼ばれます。ソース、フィルタ、シンクを組み合わせることで柔軟なインフラストラクチャを実現し、アルゴリズムを接続して任意の複雑なタスクを実行するだけで、複雑な処理パイプラインを作成できます。

VTKのプログラミングモデルについての詳細は [SML96] を参照してください。

このように可視化パイプラインを見る方法は、ParaView のワークフローの中核にあります。リーダー(ソース)を作成することで、データをシステムに取り込みます。次に、フィルタを適用して、情報(等値線)を抽出して結果をビューに表示するか、ライター、つまりシンクを使用してデータをディスクに保存します。

ParaView には、計算科学の世界で一般的に使用される多数のファイル形式のリーダーが含まれています。さまざまなフィールドのデータをさまざまな特性で効率的に表現するために、VTKは ParaView が使用する豊富なデータモデルを提供します。 データモデルは、単にメモリ内のデータを表現する方法と考えることができます。 さまざまなデータ型については、3.1 章 で詳しく説明します。リーダーは、ファイルに含まれる情報を表すのに適したデータ型を生成します。ParaView では、データ型に基づいてフィルタを作成および適用し、データを変換できます。データをビューに表示して、イメージやレンダリングを生成することもできます。フィルタにはいくつかのタイプがあり、それぞれが異なる操作と処理タイプを実行するのと同様に、3Dサーフェスビュー、2Dバービュー、2Dラインビュー、平行座標ビューなどを含むさまざまなタイプのレンダリングを生成するためのビューがいくつかあります。

Did You Know?

Visualization Toolkit (VTK) は、3Dコンピューターグラフィックス、モデリング、画像処理、ボリュームレンダリング、科学的可視化、情報可視化用のオープンソースの無償ソフトウェアシステムです。VTKには、3Dインタラクションウィジェット、2次元および3次元アノテーション、並列コンピューティングの補助サポートも含まれます。

VTKは基本的にC++ツールキットとして実装されており、ユーザーはさまざまなオブジェクトを1つのアプリケーションに結合してアプリケーションを構築する必要があります。このシステムは、Python、Java、TclへのC++コアの自動ラッピングもサポートしているため、これらのプログラミング言語を使用してVTKアプリケーションを作成することもできます。VTKは、商用アプリケーション、研究開発、および ParaView、VisIt、VisTrails、Slicer、MayaVi、OsiriXなどの多くの高度な可視化アプリケーションの基盤として、世界中で使用されています。

1.3. ParaView 実行ファイル

ParaView には、目的の異なる複数の実行ファイルが付属しています。

1.3.1. paraview

これは、メインの ParaView グラフィカルユーザーインターフェイス(GUI)です。ほとんどの場合、ParaView を参照するときには、このアプリケーションについて説明しています。QtベースのクロスプラットフォームUIで、ParaView コンピューティング機能にアクセスできます。このガイドの主要部分は、このアプリケーションの理解と使用方法に特化しています。

1.3.2. pvpython

pvpython は、Pythonスクリプトを実行するPythonインタプリタです。これはスクリプトを実行するための paraview に相当するものと考えることができます。

1.3.3. pvbatch

pvpython と同様に、pvbatchParaView のPythonスクリプトを実行するPythonインタプリタでもあります。1つの違いは、pvpython は対話型スクリプトを実行するためのものですが、pvbatch はバッチ処理用に設計されていることです。また、MPI機能を使用してコンピュータリソース上で実行する場合は、pvbatch を並列で実行できます。これについては、7.10 章 で詳しく説明します。

1.3.4. pvserver

リモート可視化では、この実行可能ファイルはすべてのデータ処理を実行するサーバを表し、場合によってはレンダリングも実行します。 paraview を、HPCリソース上でリモートで実行されている pvserver に接続できます。これにより、あたかもデスクトップ上でローカルに処理しているかのように、デスクトップからHPCリソースの可視化と分析を構築および制御できます。

1.3.5. pvdataserverpvrenderserver

これらは、pvserver が2つの実行可能ファイルに分割されたものと考えることができます。1つはデータ処理部 pvdataserver 用、もう1つはレンダリング部 pvrenderserver 用です。これらを別々のプロセスに分割すると、データ処理とレンダリングを、2つのタスクに適した適切な計算機能を持つ別々のノード・セットで実行できます。pvserver と同様に、paraviewpvdataserver -pvrenderserver ペアに接続してリモート表示できます。特に明記されていない限り、このガイドのリモート表示またはクライアント/サーバー表示の説明は、pvserverpvdataserver -pvrenderserver の両方の構成に適用されます。

1.4. paraview 入門

1.4.1. paraview グラフィカルユーザーインターフェース

paraview は、ParaView アプリケーションのグラフィカルなフロントエンドです。UIは、任意の複雑さでデータ処理のパイプラインを簡単に作成できるように設計されています。UIには、パイプラインを検査および修正したり、処理パイプラインに影響するパラメータを変更したり、さまざまなデータ選択および検査アクションを実行してデータを検査したり、レンダリングを生成したりするためのパネルが用意されています。このガイドの後半では、UIのさまざまな側面について説明します。

まず、UIのさまざまなコンポーネントを見てみましょう。paraview を初めて実行すると、 図 1.2 のようなものが表示されます。UIは、メニュー、ドッキング可能なパネル、ツールバー、ビューポート (アプリケーションウィンドウの中央部分) で構成されています。

../_images/GUIOverview.png

図 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 の可視化プロセスは、データをアプリケーションに取り込むことから始まります。さまざまなファイルフォーマットからデータを読み取る方法については、2 章 を参照してください。ParaView では、アプリケーションにデータを取り込むためにファイルを読み取るだけでなく、サンプルデータセットを生成できるデータソースのコレクションも提供しています。これらは、Sources メニューの下にあります。ソースを作成するには、Source メニューの任意の項目をクリックします。

Did You Know?

ほとんどのプラットフォーム(Mac OS X以外)では、任意のメニューの項目の上にカーソルを移動すると、アプリケーションウィンドウの左下隅にあるステータスバーに、その項目の簡単な説明が表示されます。

たとえば、Sources > Sphere をクリックすると、 図 1.3 に示すように、球サーフェスを生成するプロデューサアルゴリズムが作成されます。

../_images/GUIStep1.png

図 1.3 paraview の可視化: Step 1

次の点に注意してください。:

  1. パイプラインモジュールが、ハイライト表示されているメニュー項目から派生した名前で Pipeline Browser パネルに追加されます。

  2. Properties パネルには、ハイライト表示されたアイテム(この例では、Sphere1 )のプロパティを示すテキストが表示されるほか、CenterRadius などのパラメータ用のウィジェットも表示されます。

  3. Properties パネルで、Apply ボタンが有効になり強調表示されます。

  4. 3Dビューは影響を受けません。このビューには現在、新しいものが表示またはレンダリングされていないためです。

何が起こったのか詳しく見てみましょう。Sources > Sphere をクリックすると、 1.2 章 では、球状サーフェスメッシュを生成できるソースのインスタンスを作成しました--これが Pipeline Browser に反映されます。 このインスタンスは名前を受け取ります。この名前は、UIの他のコンポーネントだけでなく、Sphere1Pipeline Browser がソースのこのインスタンスを参照するために使用します。ソースやフィルタなどのパイプラインモジュールには、モジュールの動作に影響を与えるパラメータを変更できます。これを プロパティ と呼びます。Properties パネルにはこれらのプロパティが表示され、変更できます。 システムへのデータ取り込みには時間がかかるため、paraview を使用すると、モジュールを実行する前、または実際の処理を実行してデータを取り込む前にプロパティを変更できます。このため、 Apply ボタンが強調表示され、アプリケーションを続行する前にプロパティを受け入れる必要があることが示されます。システムにデータが入力されていないため、表示するものはありません。したがって、3Dビューは影響を受けません。

ここでは、 Sphere1 の全てのプロパティのデフォルト値で問題ないとします。次に、 Apply ボタンをクリックします。

ここでは、 Sphere1 の全てのプロパティのデフォルト値で問題ないとします。次に、 Apply ボタンをクリックします。

../_images/GUIStep2.png

図 1.4 paraview の可視化: Step 2.

次のようになります( 図 1.4 ):

  1. Apply ボタンは、以前の無効/ハイライトされていない状態に戻ります。

  2. 球面は、3Dビューでレンダリングされます。

  3. Properties パネルの Display セクションに、新しいパラメータまたはプロパティが表示されるようになりました。

  4. 特定のツールバーが更新され、Solid ColorSurface などのテキストが含まれたツールバーが有効になったことがわかります。

Apply をクリックして、paraviewProperties パネルに表示されるプロパティを適用するよう指示しました。新しいソース(またはフィルタ)が最初に適用されると、可能であれば、paraview はパイプラインモジュールが現在のビューで生成するデータを自動的に表示します。 この場合、球ソースはサーフェスメッシュを生成し、3Dビューに表示されます。

ビューでのデータの表示方法を制御できるプロパティが、Display セクションの Properties パネルに表示されるようになりました。サーフェスカラー、レンダリングのタイプや表現、シェーディングパラメータなどは、この新しく更新されたセクションの下に表示されます。表示プロパティの詳細については、4 章 を参照してください。

一般的に使用されるプロパティの一部は、ツールバーでも複製されます。これらのプロパティには、サーフェスに色を付けるデータ配列と表示タイプが含まれます。これらは、一部の表示プロパティをすばやく変更できるようにするツールバーの変更です。

1.4.4. プロパティを変更する

球形メッシュの Radius やその Center など、Properties パネルの Properties セクションの下にあるプロパティなど、球体ソースのプロパティを変更すると、Apply ボタンが再度強調表示されます。すべてのプロパティの変更が完了したら、Apply をクリックして変更を適用します。変更が適用されると、paraview は要求に応じて球ソースを再実行して新しいメッシュを生成します。ビューが自動的に更新され、新しい結果がレンダリングされます。

Properties パネル(Representation または Opacity を含む)の Display セクションの下のプロパティなど、球ソースの表示プロパティを変更しても、Apply ボタンは影響を受けず、変更がすぐに適用されてビューが更新されます。

この背後にある理論的根拠は、通常、ソース(またはフィルタ)の実行はレンダリングよりも計算量が多くなるということです。ソース(またはフィルタ)プロパティを変更すると、そのアルゴリズムが再実行されますが、表示プロパティを変更しても、ほとんどの場合、更新されたグラフィックス状態で新しいレンダリングが開始されるだけです。

Did You Know?

データサイズが小さいワークフローの場合は、パイプラインモジュールのプロパティが変更された後でも、Apply ボタンが自動的に適用されると便利です。これは、Edit > Settings メニューからアクセスできるアプリケーション設定ダイアログから変更できます。設定名は Auto Apply です。Auto Apply の状態は、ツールバーから AutoApplyIcon ボタンを使用して変更することもできます。

1.4.5. フィルタを適用する

データフローパラダイムによると、パイプラインを作成するには フィルタを使用してデータを変換します。新しいデータソースを作成できる Sources メニューと同様に、Filters メニューでは、ParaView で使用できる多数のフィルタにアクセスできます。このメニューの項目を確認すると、一部が有効になり、一部が無効になります。sphereソースによって生成されたデータタイプで動作するフィルタは有効ですが、その他は無効です。有効なフィルタのいずれかをクリックすると、そのフィルタタイプの新しいインスタンスを作成できます。

Did You Know?

特定のフィルタが現在のソースで動作しない理由を調べるには、次の手順を実行します。 Filters メニューの無効になっている項目の上にマウスを移動するだけです。LinuxおよびWindows(OS Xではない)の場合、ステータスバーにそのフィルタが使用できない理由が簡単に説明されます。

../_images/StatusBarFilterInfo.png

たとえば、Filters > Shrink をクリックすると、各メッシュセルを固定係数で縮小するフィルタが作成されます。前述のとおり、球体ソースを作成すると、新しく作成されたフィルタに新しい名前 Shrink1 が付けられ、Pipeline Browser で強調表示されます。Properties パネルも更新され、この新しいフィルタのプロパティが表示されます。Apply ボタンが強調表示され、フィルタのプロパティを受け入れてフィルタを実行し、結果をレンダリングできるように要求されます。Pipeline BrowserSphere1Shrink1 をクリックすると、選択したパイプラインモジュールの状態を反映した 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 2.7.5 (default, Sep  2 2013, 05:24:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] 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 をクリックした後の状態に似ています。

../_images/PythonSphere.png

図 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()
# 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()

上記のスクリプトを試してみると、期待したとおりの結果が得られないことがわかります。何らかの理由で、縮小されたセルは表示されません。paraview では、applyをクリックした後に、新しく作成されたフィルタの入力データセットを自動的に隠すことができました。スクリプティングインターフェイスでは、このような操作はユーザーの責任です。球体ソースをビューから非表示にする必要があります。Show のカウンター部分である Hide メソッドを使うと、アクティブソースを隠すことができます。しかし、ここで問題が発生します。縮小フィルタを作成したときに、アクティブソースを縮小インスタンスに変更しました。幸い、これまで説明してきたすべての関数は、オプションの最初の引数を取ることができます。これは、操作するソースまたはフィルタのインスタンスです。 指定すると、アクティブソースの代わりにそのインスタンスが使用されます。 解決方法は次のとおりです。

# Get the input property for the active source, i.e. the input for the shrink.
>>> shrinksInput = GetProperty("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 関数を使って、アクティブソースを取得/設定することもできます。

>>> shrinkInstance = GetActiveSource()
>>> print(shrinkInstance)
<paraview.servermanager.Shrink object at 0x11d731ed0>

# Get the input property for the active source, i.e. the input
# for the shrink.
>>> sphereInstance = GetProperty("Input")

# This is indeed the sphere instance we created earlier.
>>> print(sphereInstance)
<paraview.servermanager.Sphere object at 0x11d731e90>

# Change active source to sphere and hide it.
>>> SetActiveSource(sphereInstance)
>>> Hide()

# Now restore the active source back to the shrink instance.
>>> SetActiveSource(shrinkInstance)

# Re-render the result
>>> Render()

結果を 図 1.6 に示します。

../_images/PythonShrink.png

図 1.6 縮小フィルタを適用した後のPythonコードの結果を示すウィンドウ

SetActiveSource は、Pipeline Browser で強調表示されているパイプラインモジュールを、別のモジュールをクリックして変更するのと同じ効果があります。

1.5.6. 代替方法

ここでは、Pythonやオブジェクト指向プログラミングに精通している人のために、前節で行ったのと同様のことを行う別の方法を示します。前節のアプローチを続けるのはまったく問題ありません。

>>> from paraview.simple import *
>>> sphereInstance = Sphere()
>>> sphereInstance.Radius = 1.0
>>> sphereInstance.Center[1] = 1.0
>>> print(sphereInstance.Center)
[0.0, 1.0, 0.0]

>>> sphereDisplay = Show(sphereInstance)
>>> 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)

>>> shrinkInstance = Shrink(Input=sphereInstance,
                            ShrinkFactor=1.0)
>>> print(shrinkInstance.ShrinkFactor)
1.0
>>> Hide(sphereInstance)
>>> shrinkDisplay = Show(shrinkInstance)
>>> Render()

1.5.7. パイプラインを更新する

paraviewProperties パネルでプロパティを変更すると、 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)

詳細は、3.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)

1.6. paraview でのスクリプト記述

1.6.1. Python Shell

paraview アプリケーションは内部シェルへのアクセスも提供します。このシェルでは、pvpython とまったく同じようにPythonコマンドとスクリプトを入力できます。GUIでPythonシェルにアクセスするには、View > Python Shell メニューオプションを使用します。pvpython と全く同じプロンプトでダイアログがポップアップします。前節のコマンドをこのシェルに入力してみてください。各コマンドを入力すると、各コマンドの実行後にユーザインタフェースが更新されます。たとえば、球のソースインスタンスを作成すると、Pipeline Browser に表示されます。アクティブソースを変更すると、Pipeline Browser とその他のUIコンポーネントが更新され、変更が反映されます。プロパティまたは表示プロパティを変更すると、Properties パネルも更新され、変更が反映されます。

../_images/PythonShell.png

図 1.7 paraviewPython Shell は、スクリプトへのアクセスを提供します。

Did You Know?

paraviewPython 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スクリプトです。これをバッチ処理に使用するスクリプトとして保存できるようになりました。