1. ParaView の紹介
1.1. はじめに
ParaView is an open-source, multi-platform scientific data analysis and visualization tool that enables analysis and visualization of extremely large datasets. ParaView is both a general purpose, end-user application with a distributed architecture that can be seamlessly leveraged by your desktop or other remote parallel computing resources and an extensible framework with a collection of tools and libraries for various applications including scripting (using Python), web visualization (through trame and ParaViewWeb), or in-situ analysis (with 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. ヘルプの入手
このガイドでは、ParaView でよく使われる機能のほとんどをカバーするように心がけています。ParaView の柔軟でパイプラインベースのアーキテクチャは、多くの可能性を開きます。このガイドでカバーされていない機能をお探しの場合は、 Wiki ページ や ParaView Discourse フォーラム 、特に FAQ と Tips and Tricks カテゴリを参照してください。また、関連する Support カテゴリで気軽に質問してください。
1.1.3. ソフトウェアの入手
ParaView is open source. The complete source code for all the functionality discussed in The ParaView Guide can be downloaded from the ParaView website http://www.paraview.org. We also provide binaries for the major platforms: Linux, macOS, and Windows. You can get the source files and binaries for the official releases, and follow ParaView's active development by downloading the nightly builds.
ソースファイルを使用した ParaView の構築方法の詳細は、このガイドの範囲を超えています。詳細は、ParaView gitlab (https://gitlab.kitware.com/paraview/paraview/-/blob/master/Documentation/dev/build.md) を参照してください。
1.2. ParaView による可視化の基礎
可視化とは、生データを画像やレンダリングに変換して、データのより良い認知的理解を得るプロセスです。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次元アノテーション、並列コンピューティングの補助サポートも含まれます。
At its core, VTK is implemented as a C++ toolkit, requiring users to build applications by combining various objects into an application. The system also supports automated wrapping of the C++ core into Python and Java so that VTK applications may also be written using these programming languages. VTK is used world-wide in commercial applications, research and development, and as the basis of many advanced visualization applications such as ParaView, VisIt, VisTrails, Slicer, MayaVi, and OsiriX.
1.3. ParaView 実行ファイル
ParaView には、目的の異なる複数の実行ファイルが付属しています。
1.3.1. paraview
This is the main ParaView graphical user interface (GUI). In most cases, when we refer to ParaView, we are indeed talking about this application. It is a Qt-based, cross-platform UI that provides access to ParaView computing capabilities. Major parts of this guide are dedicated to understanding and using this application.
1.3.2. pvpython
pvpython
は、Pythonスクリプトを実行するPythonインタプリタです。これはスクリプトを実行するための paraview
に相当するものと考えることができます。
1.3.3. pvbatch
pvpython
と同様に、pvbatch
は ParaView のPythonスクリプトを実行するPythonインタプリタでもあります。1つの違いは、pvpython
は対話型スクリプトを実行するためのものですが、pvbatch
はバッチ処理用に設計されていることです。また、MPI機能を使用してコンピュータリソース上で実行する場合は、pvbatch
を並列で実行できます。これについては、7.10 章 で詳しく説明します。
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のさまざまな側面について説明します。
Let's start by looking at the various components of the UI. If you run
paraview
for the first time, you will see something similar to the
図 1.2. The UI consists of of menus,
dockable panels, toolbars, and the viewport -- the central portion of the
application window.
メニューには、ファイルを開いたり保存したりするためのオプション(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?
As you move your cursor over the items in any menu, on most platforms (except macOS), you'll see a brief description of the item in the status bar on the lower-left corner in the application window.
If you click on Sources > Alphabetical > Sphere, for example, you'll create a producer algorithm that generates a spherical surface, as shown in 図 1.3.
次の点に注意してください。:
パイプラインモジュールが、ハイライト表示されているメニュー項目から派生した名前で
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 ):
Apply
ボタンは、以前の無効/ハイライトされていない状態に戻ります。球面は、3Dビューでレンダリングされます。
Properties
パネルのDisplay
セクションに、新しいパラメータまたはプロパティが表示されるようになりました。特定のツールバーが更新され、
Solid Color
やSurface
などのテキストが含まれたツールバーが有効になったことがわかります。
Apply
をクリックして、paraview
に Properties
パネルに表示されるプロパティを適用するよう指示しました。新しいソース(またはフィルタ)が最初に適用されると、可能であれば、paraview
はパイプラインモジュールが現在のビューで生成するデータを自動的に表示します。 この場合、球ソースはサーフェスメッシュを生成し、3Dビューに表示されます。
ビューでのデータの表示方法を制御できるプロパティが、Display
セクションの Properties
パネルに表示されるようになりました。サーフェスカラー、レンダリングのタイプや表現、シェーディングパラメータなどは、この新しく更新されたセクションの下に表示されます。表示プロパティの詳細については、4 章 を参照してください。
一般的に使用されるプロパティの一部は、ツールバーでも複製されます。これらのプロパティには、サーフェスに色を付けるデータ配列と表示タイプが含まれます。これらは、一部の表示プロパティをすばやく変更できるようにするツールバーの変更です。
1.4.4. プロパティを変更する
球形メッシュの Radius
やその Center
など、Properties
パネルの Properties
セクションの下にあるプロパティなど、球体ソースのプロパティを変更すると、Apply
ボタンが再度強調表示されます。すべてのプロパティの変更が完了したら、Apply
をクリックして変更を適用します。変更が適用されると、paraview
は要求に応じて球ソースを再実行して新しいメッシュを生成します。ビューが自動的に更新され、新しい結果がレンダリングされます。
Properties
パネル(Representation
または Opacity
を含む)の Display
セクションの下のプロパティなど、球ソースの表示プロパティを変更しても、Apply
ボタンは影響を受けず、変更がすぐに適用されてビューが更新されます。
この背後にある理論的根拠は、通常、ソース(またはフィルタ)の実行はレンダリングよりも計算量が多くなるということです。ソース(またはフィルタ)プロパティを変更すると、そのアルゴリズムが再実行されますが、表示プロパティを変更しても、ほとんどの場合、更新されたグラフィックス状態で新しいレンダリングが開始されるだけです。
Did You Know?
For some workflows with smaller data sizes, it may be more convenient
if the Apply
button was automatically applied even after changes are made to the
pipeline module properties. You can change this from the application settings dialog, which is
accessible from the Edit > Settings menu (ParaView > Preferences...
on macOS). The setting is called Auto Apply
.
You can also change the Auto Apply
state using the
button from the toolbar.
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.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()
If you tried the above script, you'll notice the result isn't exactly what we
expected. For some reason, the shrank cells are not visible. This is because we
missed one stage: In paraview
, the UI was smart enough to
automatically hide the input dataset for the newly created filter after we hit
apply. In the scripting interface, such operations are the user's responsibility. We
should have hidden the sphere source from the view. We can use the Hide
method, the counterpart of Show
, to hide the active source. But, now we have
a problem -- when we created the shrink filter, we changed the active source to
be the shrink instance. Luckily, all the functions we discussed so far can take
an optional first argument, which is the source or filter instance on which to operate.
If provided, that instance is used instead of the active source.
The solution is as follows:
# 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 に示します。
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. パイプラインを更新する
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)
詳細は、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
パネルも更新され、変更が反映されます。
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スクリプトです。これをバッチ処理に使用するスクリプトとして保存できるようになりました。