5. データのフィルタリング

可視化は、実験やシミュレーションによって得られた生データを、解釈や分析が可能な形になるまで変換するプロセスとして特徴づけらます。1.2 章 で導入された可視化パイプラインは、この概念を、パイプラインがソース、フィルタ、およびシンク(総称してパイプラインモジュールまたはアルゴリズムと呼ばれる)でセットアップされるデータフローパラダイムとして形式化しています。データフロー(data flows )はこのパイプラインを通り、シンクが消費できる形になるまで各ノードで変換されます。これまでの章では、ParaView にデータを取り込む方法(2 章 )と、データをビューに表示する方法(4 章)について説明しました。ParaView に取り込まれたデータに関連する属性データがすべて含まれており、既存のビューで直接表現できる形式になっている場合は、それだけで十分です。 しかし、可視化プロセスの真の力は、スライシング、コンタリング、クリッピングなど、フィルタとして利用可能な様々な可視化技術を利用することから得られます。この章では、このようなフィルタを使用してデータを変換するパイプラインの構築について説明します。

5.1. フィルタを理解する

ParaView では、フィルタは入力と出力を持つパイプラインモジュールまたはアルゴリズムです。入力データを取り込み、変換されたデータまたは出力結果を生成します。フィルタには、複数の入力ポートと出力ポートを含めることができます。 フィルタの入出力ポート数は固定です。各入力ポートは、フィルタ内の特定の目的または役割の入力データを受け入れます。(例: Resample With Dataset フィルタには2つの入力ポートがあります。Input と呼ばれるポートは、補間する属性を提供するデータセットを取り込むための入力ポートです。もう1つは Source と呼ばれ、再サンプリングするメッシュとして使用されるデータセットが受け入れられる入力ポートです。)

../_images/UnderstandingFilters.png

図 5.1 フィルタは、入力と出力を持つパイプラインモジュールです。データは入力を介してフィルタに入ります。フィルタはデータを変換し、その出力に結果データを作成します。フィルタは、1つまたは複数の入力ポートおよび出力ポートを持つことができます。各入力ポートは、オプションで複数の入力接続を受け入れることができます。

入力ポート自体は、複数の入力接続をオプションで受け入れることができます。たとえば、 Append Datasets フィルタは、複数のデータセットを追加して単一のデータセットを作成しますが、入力ポートは1つしかありません( Input と名付けられます)。ただし、そのポートは、追加される各データセットに対して複数の接続を受け付けることができます。フィルタは、特定の入力ポートが1つまたは複数の入力接続を受け入れることができるかどうかを定義します。

リーダーと同様に、フィルタのプロパティを使用してフィルタアルゴリズムを制御できます。使用できるプロパティは、フィルタ自体によって異なります。

5.2. paraview でのフィルタ作成

paraview で使用できるすべてのフィルタは、Filters メニューの下に一覧表示されます。これらは、さまざまなカテゴリに編成されています。ソースまたはリーダーによって生成されたデータを変換するフィルタを作成するには、Pipeline Browser でソースを選択してアクティブにし、Filters メニューの対応するメニュー項目をクリックします。メニュー項目が無効になっている場合は、アクティブソースがこのフィルタで変換できるデータを生成していないことを意味します。

Did you know?

Filters メニューのメニュー項目が無効になっている場合は、アクティブソースが予期されるタイプまたはフィルタに必要な特性のデータを生成していないことを示しています。WindowsおよびLinuxマシンでは、無効になっているメニュー項目にカーソルを置くと、ステータスバーにフィルタが使用できない理由が表示されます。

../_images/DisabledFilterStatusBar.png

5.2.1. 複数の入力接続

フィルタを作成すると、アクティブソースはフィルタの最初の入力ポートに接続されます。 Append Datasets のようなフィルタは、その入力ポートに対して複数の入力接続を取ることができます。このような場合、複数のパイプラインモジュールをフィルタの1つの入力ポート上の接続として渡すには、 Pipeline Browser で関連するすべてのパイプラインモジュールを選択します。キー修飾子 CTRL (または )および を使用して、複数の項目を選択できます。複数のパイプラインモジュールを選択すると、入力ポートで複数の接続を受け入れるフィルタのみが Filters メニューで有効になります。

../_images/PipelineBrowserMultipleConnections.png

図 5.2 複数の入力接続を持つパイプラインを示す Pipeline BrowserAppend Datasets フィルタは、その唯一の入力ポート Sphere0Cone0 に二つの入力接続を持ちます。

5.2.2. 複数の入力ポート

ほとんどのフィルタには入力ポートが1つしかありません。したがって、Filters メニューでフィルタ名をクリックすると、すぐに新しいフィルタインスタンスが作成され、 Pipeline Browser に表示されます。 Resample With Dataset などの特定のフィルタには複数の入力があり、フィルタを作成する前に設定する必要があります。このような場合、フィルタ名をクリックすると、図 5.3 に示すように、 Change Input Dialog がポップアップ表示されます。 このダイアログでは、各入力ポートに接続するパイプラインモジュールを選択できます。デフォルトでは、アクティブソースは最初の入力ポートに接続されます。ユーザーはそれらも自由に変更できます。

../_images/ChangeInputDialog.png

図 5.3 Change Input Dialog ダイアログは、複数の入力ポートを持つフィルタの各入力ポートの入力を選択できるようにします。このダイアログを使用するには、まず左側で編集する Input Port を選択し、この入力ポートに接続するパイプラインモジュールを選択します。他の入力ポートについても同じ手順を繰り返します。入力ポートが複数の入力接続を受け付けることができる場合、Pipeline Browser と同様に複数のモジュールを選択することができます。

5.2.3. 入力接続を変更する

paraview を使用すると、フィルタの作成後に入力をフィルタに変更できます。フィルタへの入力を変更するには、 Pipeline Browser でフィルタを右クリックしてコンテキストメニューを表示し、 Change Input... を選択します。これにより、複数の入力ポートを持つフィルタを作成した場合と同じ Change Input Dialog がポップアップ表示されます。このダイアログボックスを使用して、このフィルタの新しい入力を設定できます。

../_images/ChangeInputContextMenu.png

図 5.4 フィルタの入力を変更するオプションを示す Pipeline Browser のコンテキストメニュー

Did you know?

Filters メニューは新しいフィルタを作成するのに便利な方法ですが、 ParaView で利用可能なフィルタの長いリストでは、このメニューから特定のフィルタを手動で見つけることは非常に困難な場合があります。これを簡単にするために、ParaView にはクイック起動のメカニズムが組み込まれています。新しいフィルタ(またはソース)を作成したいときは、単に CTRL + Space または Alt + Space をタイプしてください。これでクイック起動のダイアログがポップアップします。ここで、希望するフィルタの名前を入力し始めます。入力すると、ダイアログが更新され、入力されたテキストに一致するフィルタとソースが表示されます。矢印キーで移動し、Enter キーで選択したフィルタ(またはソース)を作成することができます。Enter キーを押しながら キーを押すと、フィルタを作成した後に Apply ボタンをクリックするのと同じように、作成したフィルタを素早く適用することができます。Filters メニューにあったように、フィルタは無効にすることができますが、デフォルトでは選択した項目が最初に有効になるフィルタであることに注意してください。これまでに入力したテキストをクリアするには、 Esc を使用することができます。2回目に Esc を押すと、新しいフィルタを作成せずにダイアログを閉じます。

../_images/QuickLaunchDialog.png

5.3. pvpython でのフィルタ作成

pvpython でフィルタを作成するには、コンストラクタ関数として名前を使用してオブジェクトを作成します。

>>> from paraview.simple import *
    ...
>>> filter = Shrink()

paraview と同様に、フィルタは入力としてアクティブソースを使用します。また、関数の引数に入力を明示的に指定することもできます。

>>> reader = OpenDataFile(...)
    ...
>>> shrink = Shift(Input=reader)

5.3.1. 複数の入力接続

複数の入力接続を設定するには、次のように接続を指定します。:

>>> sphere = Sphere()
>>> cone = Cone()

# Simply pass the sources as a list to the constructor function.
>>> appendDatasets = AppendDatasets(Input=[sphere, cone])
>>> print(appendDatasets.Input)
[<paraview.servermanager.Sphere object at 0x6d75f90>, <paraview.servermanager.Cone object at 0x6d75c50>]

5.3.2. 複数の入力ポート

複数の入力ポートへの接続の設定は、入力ポートに適切な名前を付ける必要がある点を除き、複数の入力接続に似ています。

>>> sphere = Sphere()
>>> wavelet = Wavelet()

>>> resampleWithDataSet = ResampleWithDataset(Input=sphere, Source=wavelet)

5.3.3. 入力接続を変更する

Pythonで入力を変更するのは、フィルタの他のプロパティを設定するのと同じくらい簡単です。

# For filter with single input connection
>>> shrink.Input = cone

# for filters with multiple input connects
>>> appendDatasets.Input = [reader, cone]

# to add a new input.
>>> appendDatasets.Input.append(sphere)

# to change multiple ports
>>> resampleWithDataSet.Input = wavelet2
>>> resampleWithDataSet.Source = cone

5.4. paraview でのフィルタプロパティ変更

フィルタには、フィルタで使用される処理アルゴリズムを制御するために変更できるプロパティがあります。フィルタのプロパティの変更と表示は、リーダーやソースなどの他のパイプラインモジュールと同じです。 これらのプロパティが使用可能な場合は、 Properties パネルを使用して表示および変更できます。 Properties パネルの効果的な使用方法については、1 章 を参照してください。このパネルにはアクティブソース( Active Source )に存在するプロパティだけが表示されるので、対象のフィルタがアクティブであることを確認する必要があります。フィルタをアクティブにするには、 Pipeline Browser を使用してフィルタをクリックし、選択します。

5.5. pvpython でのフィルタプロパティ変更

pvpython を使用すると、使用可能なプロパティにフィルタオブジェクトのプロパティとしてアクセスでき、その値を名前で取得または設定できます(入力接続の変更(5.3.3 章 )に似ています)。

# You can save the object reference when it's created.
>>> shrink = Shrink()

# Or you can get access to the active source.
>>> Shrink() # <-- this will make the Shrink the active source.
>>> shrink = GetActiveSource()

# To figure out available properties, you can always use help.
>>> help(shrink)
Help on Shrink in module paraview.servermanager object:

class Shrink(SourceProxy)
 |  The Shrink filter
 |  causes the individual cells of a dataset to break apart
 |  from each other by moving each cell\'s points toward the
 |  centroid of the cell. (The centroid of a cell is the
 |  average position of its points.) This filter operates on
 |  any type of dataset and produces unstructured grid
 |  output.
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  Input
 |      This property specifies the input to the Shrink
 |      filter.
 |
 |  ShrinkFactor
 |      The value of this property determines how far the points
 |      will move. A value of 0 positions the points at the centroid of the
 |      cell; a value of 1 leaves them at their original
 |      positions.
 ....

# To get the current value of a property:
>>> sf = shrink.ShrinkFactor
>>> print sf
0.5

# To set the value
>>> shrink.ShrinkFactor = 0.75

この章の残りの部分では、一般的に使用されるフィルタについて詳しく説明します。実行する操作の種類に基づいて、カテゴリの下にグループ化されます。

5.6. サブセットデータのフィルタ

これらのフィルタは、入力データセットからサブセットを抽出するために使用されます。このサブセットの定義方法と抽出方法は、フィルタのタイプによって異なります。

5.6.1. Clip

Clip は、(平面、球、ボックスなど)陰関数を使用するか、入力データセット内のスカラーデータ配列の値を使用して、任意のデータセットをクリップするために使用されます。スカラー配列は、単一のコンポーネントを持つ点またはセルの属性配列です。クリッピングでは、入力データセット内のすべてのセルを繰り返し処理してから、陰関数によって定義された空間の 外側 と見なされるセル、または選択された値よりも小さい属性値を持つセルを削除します。クリッピングサーフェスをまたぐセルの場合、これらは指定された陰関数(またはスカラー値より大きい)の内部にあるセルの部分を通過するために クリップされます

このフィルタは、複合データセットの場合、任意のデータセットを非構造格子(3.1.7 章)または非構造格子のマルチブロック (3.1.10 章)に変換します。

5.6.1.1. paraview でのClip

../_images/CrinkleClipComparison.png

図 5.5 インプリシット平面でクリップする場合の、 Crinkle Clip をオフにした Clip フィルタ(左)とオンにした Clip フィルタ(右)による結果の比較。左側の図は、クリッピング操作のインプリシット平面をインタラクティブに配置するために使用される3Dウィジェットも示しています。

Clip フィルタを作成するには、 Filters>Common または Filters>Alphabetical メニューを使用することができます。このフィルタは Common フィルタツールバーからもアクセスすることができます。pqClip|ボタンをクリックすると、このフィルタを作成することができます。

../_images/CommonFiltersToolbar.png

図 5.6 よく使用されるフィルタにすばやくアクセスするための paraviewCommon フィルタ

Properties パネルに、このフィルタで使用可能なプロパティが表示されます。最初に選択する必要があるものの1つは、 Clip Type です。 Clip Type は、クリッピング操作に使用する暗黙的な関数のタイプを指定するために使用されます。使用可能なオプションは、 PlaneBoxSphereScalar です。これらのオプションのいずれかを選択すると、パネルが更新され、暗黙的な関数の定義に使用されるプロパティが表示されます。たとえば、 PlaneOriginNormalCenterSphereRadius などです。 Scalar を選択すると、パネルでクリップするデータ配列と値を選択できます。データ値が選択した値以上のセルは in と見なされ、フィルタを通過します。

Did you know?

陰関数を使用してクリップすると、ParaView によってアクティブビューにウィジェットがレンダリングされます。このウィジェットを使用して、 3D widgets という陰関数を対話的に制御できます。3Dウィジェットを操作すると、パネルが更新されて現在の値が反映されます。3Dウィジェットは、実際の可視化シーンの一部としてではなく、補助として考慮されます。したがって、アクティブソースを変更し、 Properties パネルがこのフィルタから離れると、3Dウィジェットは自動的に非表示になります。

Inside Out オプションを使用すると、このフィルタの動作を逆にすることができます。基本的には、指定されたクリッピングスペースの内側と外側で考慮されるものの概念を反転させます。

このフィルタで実際に境界上のセルをクリップしたくないが、入力セルの構造を保持し、セル全体を境界を通過させたい場合は、 Crinkle Clip をチェックします(図 5.5)。Scalar でクリッピングする場合、このオプションは使用できません。

5.6.1.2. pvpython でのClip

次のスクリプトは、pvpythonClip フィルタを使用する方法を示しています。

# Create the Clip filter.
>>> clip = Clip(Input=...)

# Specify a 'ClipType' to use.
>>> clip.ClipType = 'Plane'

# You can also use the SetProperties API instead.
>>> SetProperties(clip, ClipType='Plane')

>>> print(clip.GetProperty('ClipType').GetAvailable())
['Plane', 'Box', 'Sphere', 'Scalar']

# To set the plane origin and normal
>>> clip.ClipType.Origin = [0, 0, 0]
>>> clip.ClipType.Normal = [1, 0, 0]

# If you want to change to Sphere and set center and
# radius, you can do the following.
>>> clip.ClipType = 'Sphere'
>>> clip.ClipType.Center = [0, 0, 0]
>>> clip.ClipType.Radius = 12

# Using SetProperties API, the same looks like
>>> SetProperties(clip, ClipType='Sphere')
>>> SetProperties(clip.ClipType, Center=[0, 0, 0],
                                 Radius = 12)

# To set Crinkle clipping.
>>> clip.Crinkleclip = 1

# For clipping with scalar, you pick the scalar array
# and then the value as follows:
>>> clip.ClipType = 'Scalar'
>>> clip.Scalars = ('POINTS', 'Temp')
>>> clip.Value = 100
# As always, to get the list of available properties on
# the clip filter, use help()
>>> help(clip)
Help on Clip in module paraview.servermanager object:

class Clip(SourceProxy)
 |  The Clip filter
 |  cuts away a portion of the input dataset using an
 |  implicit plane. This filter operates on all types of data
 |  sets, and it returns unstructured grid data on
 |  output.
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  ClipType
 |      This property specifies the parameters of the clip
 |      function (an implicit plane) used to clip the dataset.
 |
 |  Crinkleclip
 |      This parameter controls whether to extract entire cells
 |      in the given region or clip those cells so all of the output one stay
 |      only inside that region.
 |
 |  Input
 |      This property specifies the dataset on which the Clip
 |      filter will operate.
 |
 |  InsideOut
 |      If this property is set to 0, the clip filter will
 |      return that portion of the dataset that lies within the clip function.
 |      If set to 1, the portions of the dataset that lie outside the clip
 |      function will be returned instead.
 ...

# To get help on a specific implicit function type, make it the active
# ClipType and then use help()
>>> clip.ClipType = 'Plane'
>>> help(clip.ClipType)
Help on Plane in module paraview.servermanager object:

class Plane(Proxy)
  ...

Common Errors

イメージデータのような構造データセットをクリッピングすることは、このフィルタがクリッピング操作自体の性質のために構造データセットを非構造格子に変換するので、メモリ必要量を劇的に増加させることがあることを忘れがちです。構造データセットの場合は、必要に応じて、代わりに Slice フィルタまたは Extract Subset フィルタを使用することを検討してください。これらは完全に同一の操作ではありませんが、多くの場合は十分です。

5.6.2. Slice

../_images/SliceComparisons.png

図 5.7 オプションの異なる陰関数平面を使用してイメージデータをスライスする場合の Slice フィルタによる結果の比較。左下のイメージは、同じ陰関数を使用してクリップした場合に Clip フィルタによって生成される出力を示しています。

Slice フィルタは、平面、球、ボックスなどの陰関数を使用して入力データセットをスライスします。このフィルタは、陰関数境界に沿ってデータ要素を返すため、これは次元削減フィルタ(クリンクルスライシングが有効な場合を除く)です。つまり、入力データセットに4面体や6面体などの3D要素が含まれている場合、出力には2D要素、3角形、四角形が含まれます。2D要素を含むデータセットをスライスすると、結果は線分になります。

このフィルタで使用できるプロパティとフィルタの設定方法は、 Clip フィルタとよく似ていますが、いくつかの点が異なります。同様の方法として、陰関数の設定があります。 PlaneBoxSphereCylinder のような選択肢があり、 Crinkle slice を切り替えるオプション(すなわち、セルの切断を回避するために、陰関数と交差する入力データセットから完全なセルを渡す)もあります。

異なる点は、 Scalar (これには Contour フィルタを使用可能)によるスライスがないことと、新しいオプション Triangulate the slice が追加されていることです。図 5.7 は、さまざまなスライスプロパティが変更された場合に生成されるメッシュの違いを示しています。

Slice フィルタは、 Slice レプリゼンテーションよりも汎用性があります。第1に、 Slice レプリゼンテーションはイメージデータセットでのみ使用できますが、 Slice フィルタは任意のタイプの3Dデータセットで使用できます。第二に、表現は画像ボクセル位置でXY, YZまたはXZ平面に配向された2Dスライスから成る画像のサブセットを抽出し、一方、フィルタによって使用される平面は任意に配置できます。第3に、 Slice レプリゼンテーションは常にフラットなオブジェクトを示し、照明がスライス上のデータ値の解釈に干渉する可能性があるため、照明は Slice レプリゼンテーションに適用されません。ただし、照明は Slice フィルタの結果に適用されます。最後に、 Slice レプリゼンテーションは、データセット内のセルと平面の交差を計算する必要がないため、異なるスライスを更新してスクラブするフィルタよりも高速です。

paraview では、このフィルタは Filters メニューの他に、Common filters toolbar の pqSlice ボタンを使って作成することができます。

5.6.3. Extract Subset

../_images/ExtractSubsetPanel.png

図 5.8 使用可能なすべてのプロパティ(詳細プロパティを含む)を表示する、 Extract Subset に対する Properties パネル

イメージデータセット(3.1.3 章)、直線格子 (3.1.4 章) 、曲線格子 (3.1.5 章)などの構造データセットの場合、 Extract Subset フィルタを使用して注目の領域またはサブグリッドを抽出できます。抽出する領域は、構造化座標 (\(i\), \(j\), \(k\) の値) を使用して指定します。構造データセットでは、入力データ型が保持されるため、可能な限りこのフィルタを Clip または Slice より優先して使用してください。サブセットの抽出に加えて、このフィルタを使用して、各構造化次元に沿ってサンプルレートを指定することにより、データセットをより粗い解像度に再サンプリングすることもできます。

5.6.3.1. paraview でのExtract Subset

これは、Common filters toolbar pqExtractGrid で利用できるフィルタの1つです。関心のある領域を指定するには、 VOI プロパティを使用します。各行の構造化次元( \(i\), \(j\), \(k\), )ごとに、min と max の値が指定されます。 Sample Rate ISample Rate JSample Rate K は、サブサンプリングレートを指定します。サブサンプリングするには、1より大きい値を設定します。Include Boundary は、境界スラブを抽出結果に含めるかどうかを決定するために使用します。この場合、その次元に沿ったサブサンプリング率が 1 よりも大きく、境界スラブがスキップされることになります。

5.6.4. Threshold

../_images/ThresholdResult.png

図 5.9 ParaView データの iron_protein.vtk データセットに対して Threshold フィルタを使用した結果

Threshold フィルタは、選択されたしきい値の方法に応じて,指定された範囲内にあるスカラー値を持つ入力データセットのセルを抽出します。このフィルタは、点を中心としたデータでも、セルを中心としたデータでも動作します。どのような種類のデータセットでも入力として使用できます。このフィルタは非構造格子を出力します。

ポイントデータによるしきい値設定では、 All Scalars がチェックされている場合、範囲内のスカラー値を持つ すべての 点を持つセルが渡されます。それ以外の場合は、しきい値基準を満たす 任意の 点を持つセルが渡されます。

5.6.4.1. paraview でのThreshold

../_images/ThresholdPanel.png

図 5.10 Threshold フィルタに対する Properties パネル

このフィルタは Common フィルタツールバー上では pqThreshold として表示されます。コンボボックスから閾値を設定する Scalars を選択した後、 Lower ThresholdUpper Threshold の値を変更して、範囲を指定することができます。スライダーで表示される範囲では不十分な場合、入力ボックスに手動で値を入力することも可能です。この場合、値は意図的に現在のデータ範囲に固定されることはありません。

また、 Threshold Method コンボボックスを使って、しきい値の方法を選択することもできます。

  • Between : スカラー値が Lower ThresholdUpper Threshold の間にあるセルを抽出します。

  • Below Lower Threshold: Lower Threshold よりも小さいスカラー値を持つセルを抽出します。

  • Above Upper Threshold: Upper Threshold よりも大きいスカラー値を持つセルを抽出します。

5.6.4.2. pvpython でのThreshold

# Create the filter. If Input is not specified, the active source will be
# used as the input.
>>> threshold = Threshold(Input=...)

# Here's how to select a scalar array.
>>> threshold.Scalars = ("POINTS", "scalars")

# The value is a tuple where the first value is the association: either "POINTS"
# or "CELLS", and the second value is the name of the selected array.
>>> print(threshold.Scalars)
['POINTS', 'scalars']

>>> print(threshold.Scalars.GetArrayName())
'scalars'

>>> print(threshold.Scalars.GetAssociation())
'POINTS'

# Different threshold methods are available and are set using one of the following:
>>> threshold.ThresholdMethod = "Between"                # Uses both lower and upper values
>>> threshold.ThresholdMethod = "Below Lower Threshold"  # Uses only lower value
>>> threshold.ThresholdMethod = "Above Upper Threshold"  # Uses only upper value

# The adequate threshold values are then specified as:
>>> threshold.LowerThreshold = 63.75
>>> threshold.UpperThreshold = 252.45

入力データセットで使用可能な配列のタイプとその範囲を決定するには、3.3 章 のデータ情報に関する説明を参照してください。

5.6.5. Iso Volume

Iso Volume フィルタは、指定された範囲を満たすセルがスカラー値である入力から出力データセットを作成するために使用するという点で、 Threshold と似ています。実際、セルデータスカラーが選択されている場合、フィルタは Threshold と同じです。ただし、ポイントデータスカラーの場合、このフィルタはスカラーでクリッピングする際に Clip フィルタと同様に機能し、スカラー範囲によって形成されるアイソサーフェスに沿ってセルがクリッピングされます。

5.6.6. Extract Selection

Extract Selection は、データセットから選択した要素を抽出するための汎用フィルタです。ParaView では、いくつかの方法で選択できます。選択を行うと、このフィルタを使用して、選択した要素を新しいデータセットとして抽出し、さらに処理することができます。このフィルタについては、6.6 章ParaView で選択項目を確認する際に詳しく説明します。

5.7. 幾何的操作に関するフィルタ

これらのフィルタは、トポロジや接続性に影響を与えずにデータセットのジオメトリを変換するために使用されます。

5.7.1. Transform

Transform を使用すると、データセットを自由に移動、回転、およびスケーリングできます。変換は、データセットをスケーリングし、回転してから移動することによって適用されます。 指定された値に基づきます。

これはジオメトリ操作フィルタであるため、このフィルタは入力データセットの接続性には影響しません。入力データセットの型を保存しようとしますが、変換されたデータセットが入力と同じデータ型で表現できなくなる場合があります。例えば、回転によって変換されるイメージデータ (3.1.3 章)および直線格子(3.1.4 章)では、出力データセットは軸整列されない可能性があり、したがって、いずれのデータタイプとしても表すことができません。このような場合、データセットは構造格子、または曲線格子に変換されます(3.1.5 章)。曲線格子は他の2つほどコンパクトではないので、より一般的なデータ型で結果を保存する必要があるということは、メモリーフットプリントがかなり増加することを意味します。

5.7.2. paraview でのTransform

Filters > Alphabetical メニューから新しい Transform を作成できます。作成したトランスフォームを移動、回転、スケールとして設定し、 Properties パネルを使用して使用できます。 Clip と同様に、このフィルタでは3Dウィジェットを使用してインタラクティブに変換を設定することもできます。

../_images/TransformWithWidget.png

図 5.11 インタラクティブに変換を設定するために使用できる3Dウィジェットを表示する Transform フィルタ

5.7.3. pvpython でのTransform

# To create the filter(if Input is not specified, the active source will be
# used as the input).
>>> transform = Transform(Input=...)

# Set the transformation properties.
>>> transform.Translate.Scale = [1, 2, 1]
>>> transform.Transform.Translate = [100, 0, 0]
>>> transform.Transform.Rotate = [0, 0, 0]

5.7.4. Reflect

../_images/ReflectFilter.png

図 5.12 Reflect フィルタを使用すると、特定の軸平面に沿ってデータセットを反射させることができます。

Reflect を使用すると、任意のデータセットを軸平面に沿って反射させることができます。データセットの境界ボックスによって形成される平面の1つとなる軸平面を選択できます。そのためには、 PlaneX MinX MaxY MinY MaxZ MinZ Max のように設定します。任意の軸平面を基準に反射させるには、 Plane プロパティで XY 、または Z を選択し、 Center を原点からオフセットした平面に設定します。

このフィルタは、入力データセットを反映し、非構造格子を生成します(3.1.7 章)。したがって、構造データセットを扱う場合は、 Clip フィルタと Threshold フィルタに同じ注意事項が適用されます。

5.7.5. Warp By Vector

../_images/WarpByVector.png

図 5.13 Warp By Vector フィルタを使用すると、左側に表示されている元のデータ内の点を、を 変位 ベクトル(矢印記号。5.8.1 章 で示されます)を使用して、右側に表示されている結果に置き換えることができます。

Warp By Vector を使用すると、データセット自体のベクトルを使用して、入力メッシュ内の点座標を変位させることができます。使用するベクトルを選択するには、 Properties パネルの Vectors プロパティを使用します。 Scale Factor は、適用される変位のスケーリングに使用できます。

5.7.6. Warp By Scalar

Warp By Scalar は、入力メッシュを変位させるという点で Warp By Vector に似ています。ただし、入力データセットではスカラー配列を使用します。変位の方向は、 Normal プロパティを使用して明示的に指定するか、 Use Normal をチェックして点の位置で法線を使用することができます。

5.8. サンプリングに関するフィルタ

これらのフィルタは、入力として取得したデータセットから、いくつかの重要なフィーチャを表す新しいデータセットを計算します。

5.8.1. Glyph

Glyph は、入力データセット内のポイント位置にマーカーまたはグリフを配置するために使用します。グリフは、それらのポイントのベクトルとスカラの属性に基づいて、方向を指定したり、尺度を変更することができます。

このフィルタを paraview で作成するには、 Filters メニューと Common filters ツールバーの pqGlyph ボタンを使用します。まず、グリフの種類を Glyph Type にあるオプションの中から選択します。選択肢には、 Arrow , Sphere , Cylinder などがあります。次に、Orientation Array として使用する点配列を選択します(No orientation array を選択すると、グリフの向きが変わりません)。同様に、グリフの Scale Array として使用する点配列を選択します(No scale array を選択した場合は、スケーリングは行われません)。

Scale Array がベクトル配列に設定されている場合、 Vector Scale Mode プロパティを使用して、各グリフの変換に使用するベクトルのプロパティを選択できます。 Scale by Magnitude を選択すると、点のグリフはその点のベクトルの大きさによってスケーリングされます。 Scale by Components を選択すると、グリフはその次元のベクトル成分によって各次元で別々にスケーリングされます。

../_images/GlyphPropertiesPanel.png

図 5.14 Glyph フィルタに対する Properties パネル

スケールファクターは Scale ArrayVector Scale Mode のプロパティとは関係なく、すべてのグリフに対して一定のスケーリングを適用するために使用されます。良いスケールファクターを選択するには、入力データセットの境界、選択した Scale ArrayVector Scale Mode 、そして Scale Array として選択した配列の範囲などのいくつかの事柄に依存します。 Scale Factor ウィジェットの横にある pqReset ボタンを使用すると、現在のデータセットとスケーリングプロパティに基づいて、通常は妥当なスケールファクターの値を paraview に選択させることができます。

Masking プロパティは、入力データセットからグリフされる点を制御します。Glyph Mode は、点をグリフに選択する方法を制御します(図 5.15)。使用可能なオプションは次のとおりです。

  • All Points :入力データセット内のすべての点をグリフ対象として選択します。このモードは、入力データセットの点が比較的少ない場合にのみ、注意して使用してください。入力データセット内のすべての点がグリフ化されるため、視覚的な混乱が生じるだけでなく、メモリが消費され、グリフの生成とレンダリングに時間がかかる可能性があります。

  • Every Nth Points :入力データセット内のすべての \(n^{th}\) 点をグリフィング対象として選択します。\(n\) は、 Stride を使用して指定できます。 Stride を1に設定すると、 All Points と同じ結果になります。

  • Uniform Spatial Distribution :ランダムな点のセットを選択します。このアルゴリズムは、最初に入力データセットの境界ボックスによって定義された空間において Maximum Number of Sample Points までを計算することによって動作します。次に、このサンプルポイントセット内の点に近い入力データセット内の点がグリフされます。 Seed は、サンプルポイントの生成に使用される乱数ジェネレータのシードに使用されます。これにより、ランダムなサンプルポイントが再現可能で一貫性のあるものになります。

../_images/GlyphModesComparison.png

図 5.15 Wavelet ソースによって生成された同じデータセットに適用した場合の、さまざまな Glyph Mode の比較

Did you know?

Glyph 表現は、 Glyph フィルタが使用される多くの可視化で使用できます。同様の機能を持つ Glyph フィルタよりも高速にレンダリングでき、メモリ消費も少なくて済みます。3Dジオメトリの生成が必要な状況 (たとえば、グリフジオメトリをファイルに書き出す場合) では、 Glyph フィルタが必要です。

5.8.2. Glyph With Custom Source

Glyph With Custom SourceGlyph と同じですが、 Glyph Type という限定されたセットの代わりに、 Pipeline Browser で使用可能なポリゴンデータセット (3.1.8 章)を生成する任意のデータソースを選択できる点が異なります。このフィルタを使用するには、 Pipeline Browser} でグリフするデータソースを選択し、このフィルタをアタッチします。ダイアログが表示され、 Input (選択したソースがデフォルトになります)と Glyph Source を設定できます。

../_images/GlyphWithCustomSourceInputDialog.png

図 5.16 Glyph With Custom Source フィルタでの InputGlyph Source の設定"

5.8.3. Stream Tracerフィルタ

../_images/StreamlinesInParaView.png

図 5.17 Point Source (左)と High Resolution Line Source (右)を使用して disk_out_ref.ex2 データセットから生成された流線。左側では、 Stream Tracer フィルタの出力に Tube フィルタを追加し、シェーディングが不足して可視化が困難な1Dの折れ線ではなく、3Dのチューブを生成しました。

Stream Tracer フィルタは、ベクトルフィールドの流線を生成するために使用されます。 可視化では、ストリームラインとは、データセット内のベクトルフィールドに瞬時に接している曲線を指します。これらは、データセット内の粒子がその時点で移動する方向を示す。このアルゴリズムは、データセット内の seed ポイントと呼ばれる一連の点を取得し、これらのシードポイントから始まるストリームラインを統合することによって機能します。

paraview では、 Filters メニューと Common filters toolbar の pqStreamTracer ボタンを使って、このフィルタを作成することができます。このフィルタを使用するには、まず流線を生成するための Vectors として使用する属性配列を選択します。 積分パラメータ Integration Parameters では、積分の方向 Integration Direction や、使用する積分アルゴリズムの種類 Integrator Type を指定し、流線の積分を調整することができます。高度な統合パラメータは Properties パネルの詳細表示で利用でき、ステップサイズなどを指定して統合をさらに調整することができます。最大流線長 Maximum Streamline Length は、流線の最大長を制限するために使用し、長ければ長いほど、生成される流線は長くなります。

../_images/StreamlinesPropertiesPanel.png

図 5.18 Stream Tracer フィルタのデフォルトのプロパティを示す Properties パネル

Seeds グループでは、流線を生成するためのシードポイントの生成方法を設定できます。次の2つのオプションがあります。 Point Source は、指定したパラメータに基づいて、ユーザが指定した Point の周囲に点の塊を生成します。 High Resolution Line Source は、ユーザが指定したラインに沿ってシードポイントを生成します。アクティブな Render View に表示されている3Dウィジェットを使用して、点群の中心をインタラクティブに配置したり、ラインを定義することができます。

Did you know?

Stream Tracer フィルタは、生成されたストリームラインごとに1Dラインを持つポリデータを生成します。1Dラインは、 Render View でサーフェスのようにシェーディングできないため、流線を追うのが困難な箇所を可視化できます。流線に3D構造を与えるには、流線の出力に Tube フィルタを適用します。 Tube フィルタのプロパティを使用すると、チューブの厚みを制御できます。チューブの厚みは、データ配列(流線のサンプルポイントにおけるベクトルフィールドの大きさなど)に基づいて変更することもできます。

paraviewStream Tracer フィルタを使用するスクリプトは、通常次のようになります:

# find source
>>> disk_out_refex2 = FindSource('disk_out_ref.ex2')

# create a new 'Stream Tracer'
>>> streamTracer1 = StreamTracer(Input=disk_out_refex2,
                                 SeedType='Point Source')
>>> streamTracer1.Vectors = ['POINTS', 'V']

# init the 'Point Source' selected for 'SeedType'
>>> streamTracer1.SeedType.Center = [0.0, 0.0, 0.07999992370605469]
>>> streamTracer1.SeedType.Radius = 2.015999984741211

# show data in view
>>> Show()

# create a new 'Tube'
>>> tube1 = Tube(Input=streamTracer1)

# Properties modified on tube1
>>> tube1.Radius = 0.1611409378051758

# show the data from tubes in view
>>> Show()

5.8.4. Stream Tracer With Custom Source

Stream Tracer を使用すると、シード点を点群または線分ソースとして指定できます。ただし、別のデータプロデューサから独自のシードポイントを提供する場合は、 Stream Tracer With Custom Source を使用します。 Glyph With Custom Source と同様に、このフィルタではシードポイントとして使用する2番目の入力コネクションを選択できます。

../_images/StreamTracerWithCustomSource.png

図 5.19 Slice フィルタの出力をシードポイントの Source として使用し、disk_out_ref.ex2 データセットから生成される流線。

5.8.5. Resample With Datasetフィルタ

../_images/ResampleWithDataset.png

図 5.20 Resample With Dataset の例。左側は、マルチブロック四面体メッシュ ( Input ) です。中央には、マルチブロックの非構造格子( Source ) が表示されます。 Input のアウトラインもこのビューに表示されます。フィルタを適用した結果を右側に示します。

Resample With Dataset は、あるデータセットの点属性とセル属性を別のデータセットの点にサンプリングします。2つのデータセットは、2つの入力ポート Input (再サンプルする属性を提供するデータセット)および Source (サンプリングする点を提供するデータセット)を使用してフィルタに提供されます。このフィルタは、Filters メニューで使用できます。

5.8.6. Resample To Imageフィルタ

Resample To Image は、 Resample With Dataset を特殊化したものです。 フィルタは1つの入力を取り、その点とセルの属性を点の一様な格子上にサンプリングします。一様な格子の境界と範囲は、プロパティパネルを使用して指定できます。デフォルトでは、境界は入力データセットの境界に設定されます。フィルタの出力はイメージデータセットです。

../_images/ResampleToImageProperties.png

図 5.21 Resample To Image フィルタに対する Properties パネル

../_images/ResampleToImageExample.png

図 5.22 Resample To Image の例。左側に入力(非構造格子)、中央に出力(イメージデータ)が表示されます。右側は、再サンプリングされたデータのボリュームレンダリングです。

一部の操作は、一様な格子データセットでより効率的に実行できます。 ボリュームレンダリングはそのような操作の1つです。このような操作を実行する前に、Resample to Image フィルタを使用して任意のデータセットをイメージデータに変換できます。

5.8.7. Probe

Probe は、入力データセットを特定の点位置でサンプリングし、点を含むセルのセルデータ属性と補間されたポイントデータ属性を取得します。 SpreadSheet View または Information パネルを使用して、検出された値を検査できます。プローブの位置は、アクティブな Render View に示されている対話型の3Dウィジェットを使用して指定できます。

5.8.8. Plot over line

../_images/PlotOverLineInParaView.png

図 5.23 Plot Over Line フィルタを disk_out_ref.ex2 データセットに適用し、サンプリングされた位置の値を線に沿ってプロットします。ライン内のギャップは、ラインがデータセットの外側に位置する入力データセット内の位置に対応します。

Plot Over Line は、指定した行に沿って入力データセットをサンプリングし、その結果を Line Chart View に出力します。内部的には、このフィルタは Probe フィルタと同じメカニズムを使用し、ライン内の点に沿ってプローブし、含まれるセル属性と補間されたポイント属性を取得します。

Properties パネルの Resolution プロパティを使用すると、線に沿ったサンプルポイントの数を制御できます。

5.9. 属性操作に関するフィルタ

本節で説明するフィルタは、データセットに新しい属性配列を追加するために使用します。これは通常、パイプラインで使用して導出された量を追加して、さらに処理するために使用します。

5.9.1. Calculator

Calculator フィルタは、新しいデータ配列または新しい点座標を既存の入力配列の関数として計算します。新しいデータ配列の計算に点を中心とした配列を使用すると、結果の配列も点を中心とした配列になります。同様に、セル中心配列を用いた計算は、新しいセル中心配列を生成します。関数が点座標( Properties パネルの Coordinate Results プロパティをチェックして要求されました)を計算している場合、関数の結果は3成分のベクトルである必要があります。 Calculator インタフェースは、関数電卓と同様に動作します。評価する関数の作成時には、標準の操作順序が適用されます。各計算機能について説明します。特に明記しない限り、() ボタンを使用してオペランドを括弧で囲みます。

  • Clear : 現在の関数を消去します。

  • /: あるスカラーを別のスカラーで割ります。この関数のオペランドは、括弧で囲む必要はありません。

  • *: 2つのスカラー値を乗算するか、ベクトルにスカラー値を乗算します(スカラー倍)。この関数のオペランドは、括弧で囲む必要はありません。

  • -:スカラーまたはベクトルを減算(マイナス)するか、あるスカラーまたはベクトルを別のスカラーまたはベクトルから引きます。この関数のオペランドは、括弧で囲む必要はありません。

  • +: 2つのスカラーまたは2つのベクトルを加算します。この関数のオペランドは、括弧で囲む必要はありません。

  • iHat , jHat , and kHat は、それぞれX、Y、Z方向の単位ベクトルを表すベクトル定数です。

  • sin(x) : スカラーのサインを計算します。

  • cos(x) : スカラーのコサインを計算します。

  • tan(x) : スカラーのタンジェントを計算します。

  • abs(x) : スカラーの絶対値を計算します。

  • sqrt(x) : スカラーの平方根を計算します。

  • asin(x) : スカラーのアークサインを計算します。

  • acos(x) : スカラーのアークコサインを計算します。

  • atan(x) : スカラーのアークタンジェントを計算します。

  • ceil(x) : スカラーの上限を計算します。

  • floor(x) : スカラーの下限を計算します。

  • sinh(x) : スカラーの双曲線正弦を計算します。

  • cosh(x) : スカラーの双曲線余弦を計算します。

  • tanh(x) : スカラーの双曲線正接を計算します。

  • x^y : あるスカラーを別のスカラーの累乗にします。この関数のオペランドは、括弧で囲む必要はありません。

  • exp(x) : \(e\) をスカラーのべき乗にします。

  • dot(x, y) : 2つのベクトルxとyの内積を計算します。

  • mag(x) : ベクトルの大きさを計算します。

  • norm(x) : ベクトルを正規化します。オペランドについて以下に説明します。0-9と小数点は、定数スカラー値を入力するために使用されます。

  • ln(x) : 基底 \(e\) に対するスカラーの対数を計算します。

  • log10(x) : 10を底とするスカラーの対数を計算します。

Calculator フィルターでは、ユーザーインターフェイスにボタンがない追加の操作を使用できます。

  • avg(x, y, z, ...) : すべての入力引数の平均をとります。

  • clamp(r0, x, r1) : r0とr1の間の範囲でxを固定します。

  • cross(x, y) : 2つのベクトルの外積を計算します。

  • equal(x, y) : 正規化イプシロンによるxとyの等質性検定。

  • erf(x) : xのエラー関数。

  • erfc(x) : xの相補的なエラー関数。

  • frac(x) : xの小数部。

  • hypot(x, y) : xとyの斜辺、sqrt(x*x + y*y) に相当します。

  • iclamp(r0, x, r1) : 範囲r0とr1の外側にあるxを逆固定します。xが範囲内にある場合は、最も近い境界線にスナップします。

  • inrange(r0, x, r1) : xがr0とr1の範囲にあるとき、真を返します。

  • log1p(x) : 1+xの自然対数。ここでxは非常に小さい。

  • log2(x) : xの底2とする対数。

  • logn(x, n) : xの底nとする対数。ここでnは正の整数。

  • min(x, y) : 2つ以上のスカラーの最小値を計算します。

  • max(x, y) : 2つ以上のスカラーの最大値を計算します。

  • mul(z, y, z, ...) : すべての入力を掛け合わせます。

  • ncdf(x) : 正規累積分布関数。

  • not_equal(x, y) : 正規化イプシロンによるxとyの非同等性検定。

  • pow(x, y) : xをyのべき乗にします。

  • root(x, n) : xのn乗根。ここでnは正の整数。

  • round(x) : xを最も近い整数に丸めます。

  • roundn(x, n) : xを小数点以下n桁に丸めます。

  • sgn(x) : xの符号を計算します:x<0のとき-1、x>0のとき+1、それ以外は0。

  • sum(x, y, z, ...) : 全入力の合計値。

  • trunc(x) : xの整数部。

  • acosh(x) : ラジアン単位で表されるxの逆双曲線余弦。

  • asinh(x) : ラジアン単位で表されるxの逆双曲線正弦。

  • atan2(x, y) : ラジアン単位で表される(x / y)の双曲線正接。

  • atanh(x) : ラジアン単位で表されるxの逆双曲線正接。

  • cot(x) : xの余接。

  • csc(x) : xの余割。

  • sec(x) : xの正割。

  • sinc(x) : xのカーディナル・サイン。

  • deg2rad(x) : xを度数からラジアンへ変換します。

  • deg2grad(x) : xを度数から階数へ変換します。

  • rad2deg(x) : xをラジアンから度数に変換します。

  • grad2deg(x) : xを階数から度数に変換します。

以下のような等号・不等号があります。

  • == or = : xがyに厳密に等しい場合にのみ真。

  • <> or != : xがyと等しくないときのみ真。

  • < : xがyより小さいときのみ真。

  • <= : xがy以下のときのみ真。

  • > : xがyより大きいときのみ真。

  • >= : xがy以上のときのみ真。

以下の条件式とブーリアン演算子が使用できます。

  • if(x, y, z) : xの評価値が真であればy、そうでなければz。

  • true : 真の状態。

  • false : 偽の状態。

  • x and y : 論理積。xとyが共に真である場合にのみ真。

  • mand(x, y, z, ...) : 多入力論理積。すべての引数が真のときのみ真。

  • mor(x, y, z, ...) : 多入力論理和。いずれかの引数が真であれば真。

  • x nand y : 否定論理積。xかyのどちらかが偽であるときのみ真。

  • x nor y : 否定論理和。xもyも偽でないときのみ真。

  • not x : 論理否定。入力された真偽値の反対を評価します。

  • x or y : 論理和。xかyのどちらかが真であれば真。

  • x xor y : 排他的論理和、xとyの論理状態が異なる場合のみ真。

  • x xnor y : 両方の論理入力が同じである場合にのみ真。

Scalars メニューには、スカラー配列の名前と、点中心またはセル中心のデータのベクトル配列の構成要素がリストされます。 Vectors メニューには、点中心またはセル中心のベクトル配列の名前がリストされます。この関数は、各点(またはセル)について、その点における配列のスカラー値またはベクトル値(またはセル)を使用して計算されます。フィルタは任意のタイプのデータセットで動作しますが、入力データセットには少なくとも1つのスカラー配列またはベクトル配列が必要です。配列は、点中心またはセル中心にすることができます。 Calculator フィルタの出力は、入力と同じデータセットタイプです。

Did you know?

以前は、 Calculator フィルタで 3 つの入力スカラーをベクトル配列に変換するのが一般的な使用例でした。この場合、 Function は以下のようになります: \(scalar_x * iHat + scalar_y * jHat + scalar_z * kHat\).

現在、Merge Vector Components フィルタは、3つのスカラーを選択してベクトル配列に結合することだけの、より簡単な方法を提供します。

../_images/CalculatorInParaView.png

図 5.24 高度なプロパティを表示する Calculator フィルタに対する Properties パネル

Properties パネルでは、このフィルタのいくつかのオプションにアクセスできます。Coordinate ResultsResult Normals 、または Result TCoords をチェックすると、計算された配列がそれぞれ点座標、法線、またはテクスチャ座標として設定されます。 Result Array Name は、計算結果の配列の名前を指定するために使用します。デフォルトは Result です。

式が無効な値を返すことがあります。すべての無効な値を特定の値に置き換えるには、 Replace Invalid Results チェックボックスをオンにし、無効な値の置き換えに使用する値を入力します Replacement Value 。出力配列のデータ型は、 Result Array Type プロパティで設定します。

式の再利用を容易にするために、式の読み込み、現在の式の保存、そして Expression Manager から既に保存されている式のリストを確認するための3つのヘルパーボタンも用意されています。

5.9.2. Expression Manager

ParaViewは式を保存して、式に素早くアクセスできるようにするための Expression Manager を提供し、式のプロパティの設定を容易にします。それぞれの式には名前を付けることができ、関連するグループを持つことができるので、Pythonの式を他の式から簡単にフィルタリングすることができます。

この機能は2つのパートに分かれています。

Property Panel からは、1行のプロパティテキスト入力が補強されています。

  • 既存の表現にアクセスするためのドロップダウン・リスト

  • Save Current Expression ボタン

  • Choose Expression ダイアログへのショートカット

../_images/FilteringExpressionManager-PropertyIntegration.png

図 5.25 プロパティパネルの式関連ボタン。

Tools > Manage Expressions メニュー項目からもアクセスできる Choose Expression ダイアログは、保存されている式の編集および検索が可能なリストです。ParaViewは設定によってそれらの式を記録していますが、バックアップや共有のためにJSONファイルにエクスポートすることもできます。

../_images/FilteringExpressionManager-Dialog.png

図 5.26 Expression Dialogを選択します。

5.9.3. Python calculator

../_images/ParaView_UG_Python_calculator.png

図 5.27 Python Calculator のプロパティパネル

Python Calculator は、ユーザーが指定した式に基づいて1つ以上の入力配列を処理し、新しい出力配列を生成するという点で、Calculator に似ています。ただし、計算にはPython (と NumPy)を使用します。そのため、より豊かな表現力を得ることができます。

使用する Expression 、配列の関連付けを示す Array Association ( Point Data または Cell Data )、出力配列の名前( Array Name )、入力配列を出力にコピーするかどうかを制御するトグル( Copy Array )を指定します。

Python Calculator`` は sec:ExpressionManager` で説明されている Expression Manager も統合しています。

5.9.3.1. 基本チュートリアル

最初に球ソースを作成し、Python Calculator を適用します。最初の式として、次の式を使用して適用します。

5

これにより、出力ポイントデータに配列名 result が作成されます。これは、各点の値が5の配列であることに注意してください。式の結果が1つの値になると、計算機は自動的に定数配列を作成します。次に、次の操作を実行します。

Normals

result 配列は、入力配列Normalsと同じである必要があります。詳細は後述しますが、calculatorにはさまざまな機能が用意されています。たとえば、次の式は有効です。

sin(Normals) + 5

Python Calculator は、Array Associationパラメータに応じて、点またはセルごとに1つの値を生成する必要があることに注意してください。ここで説明する関数のほとんどは、すべての点またはセルの値に個別に適用されます。入力と同じ次元の配列を生成します。しかし、min()max() のように、単一の値を生成するものもあります。

Common Errors

Programmable Filter では、vtk.numpy_interface.algorithms は、スクリプトの実行前にインポートされます。その結果、minmax のようないくつかの組み込み関数は、そのインポートによって上書きされてしまいます。組み込み関数を使用するには、 import __builtin__ モジュールをインポートし、 __builtin__.min and __builtin__.max などでこれらの関数にアクセスします。

5.9.3.2. データへのアクセス

式内の入力配列にアクセスするには、いくつかの方法があります。最も簡単な方法は、名前でアクセスすることです。

sin(Normals) + 5

これは次の式と同じです。

sin(inputs[0].PointData['Normals']) + 5

上記の例では、いくつかの説明が必要です。ここで、 inputs[0] は、フィルタへの最初の入力(データセット)を参照します。 Python Calculator は、複数の入力を受け付けることができます。各入力には inputs[0]inputs[1] 、 ...でアクセスできます。 .PointData または .CellData 修飾子を使用して、入力の点またはセルのデータにアクセスできます。その後、 [] 演算子を使用して、ポイントデータコンテナまたはセルデータコンテナ内の個々の配列にアクセスできます。配列名は必ず引用符または二重引用符で囲んでください。特定の文字(スペース、+、-、*、/ など)を含む名前を持つ配列には、このメソッドを使用しないとアクセスできません。

特定の関数は、入力メッシュに直接適用されます。これらのフィルタは、入力データセットを引数として受け取ります。たとえば、以下となります。

area(inputs[0])

点座標を明示的に定義するデータタイプの場合、 .Points 修飾子を使用して座標配列にアクセスできます。次の例では、座標配列の最初のコンポーネントを抽出します。

inputs[0].Points[:,0]

主にイメージデータ(一様直線格子)や直線格子などの特定のデータタイプでは、点座標は暗黙的に定義され、配列としてアクセスできないことに注意してください。

5.9.3.3. 複数データセットの比較

Python Calculator は、次の例に示すように、複数のデータセットの比較に使用できます。

  • メニューバーに移動し、File > Disconnect を選択してパイプラインをクリアします。

  • Source > Mandelbrot を選択し、適用をクリックすると、マンデルブロ セットのデフォルトバージョンが設定されます。この集合のデータは \(251 \times 251\) スカラー配列に格納されます。

  • もう一度 Source > Mandelbrot を選択してから、 Properties パネルに移動し、最大反復回数を50に設定します。 Apply をクリックすると、同じサイズの配列で表されるマンデルブローセットの別のバージョンが設定されます。

  • Shiftキーを押しながら、パイプラインインスペクタでマンデルブロの両方のエントリを選択してから、メニューバーに移動し、 Filter > Python Calculator を選択します。これで、2つのマンデルブロエントリは、 Python Calculator の入力としてリンクされた状態で表示されます。

  • Python Calculatorフィルタのプロパティパネルで、 Expression boxに次のように入力します。

    inputs[1].PointData['Iterations'] - inputs[0].PointData['Iterations']
    

    この式では、2番目と1番目のマンデルブロ配列の差を指定します。結果は results という名前の新しい配列に保存されます。配列変数の名前の接頭辞 inputs[1]inputs[0] は、それぞれパイプラインの最初と2番目のマンデルブロエントリを参照します。 PointData は、入力にポイント値が含まれることを指定します。引用符で囲まれたラベル 'Iterations' は、これらの配列のローカル名です。 Apply をクリックして、計算を開始します。

Python Calculator に対して Properties Panel 内の Display タブをクリックし、 Color by ラベルの右側の最初のタブに移動します。そのタブでアイテムの結果を選択すると、右側の表示ウィンドウに Python Calculator に入力した式の結果が表示されます。2つのマンデルブロ配列の差を表すスカラー値は、現在のカラーマップ(詳細については、Edit Color Map...を参照)で設定されたカラーで表されます。

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

  • Python Calculator は、常に最初の入力から出力にメッシュをコピーします。

  • すべての操作は、点ごとに適用されます。ほとんどの場合、入力メッシュ(トポロジとジオメトリ)が同じである必要があります。少なくとも、入力には同じ数の点とセルが必要です。

  • 並列実行モードでは、入力はプロセス間で全く同じように分配されなければなりません。

5.9.3.4. 基本操作

Python Calculator は、\(+\)\(-\)\(*\)、 そして \(/\) 演算子を使用した基本的な算術演算をすべてサポートしています。これらは、スカラー、ベクトル、テンソルなどの点データとセルデータに、常に要素ごとに適用されます。これらの操作は、単一の値でも機能します。たとえば、次の例では、すべての法線のすべてのコンポーネントに5が追加されます。

Normals + 5

次の例では、1を最初のコンポーネントに、2を2番目のコンポーネントに、3を3番目のコンポーネントに追加します。

Normals + [1,2,3]

これは、単一の値を返す関数を混在させる場合に特に便利です。たとえば、次の例ではNormals配列を正規化しています。

(Normals - min(Normals))/(max(Normals) - min(Normals))

calculatorの一般的な使用例は、配列の1つのコンポーネントを操作する場合です。これは、次の方法で実行できます。

Normals[:, 0]

上式は、法線ベクトルの最初のコンポーネントを抽出します。ここで : は"all elements"のプレースホルダです。1つの要素を抽出するには、: をインデックスに置き換えます。たとえば、次の例では、最初の点の法線の最初のコンポーネントから定数配列を作成します。

Normals[0, 0]

または、次の例では、最初の点の法線をすべての点に割り当てます。

Normals[0, :]

make_vector() 関数を使用して、2つまたは3つのスカラー配列からベクトル配列を作成することもできます。

make_vector(velocity_x, velocity_y, velocity_z)

時間データセットの場合は、データセットの時間ステップインデックスまたは式の時間値 (それぞれ t_index または time_indext_value または time_value ) にアクセスすることもできます。複数の入力を扱う場合、例えば inputs[0].t_index のように、適切な入力をスコープとする同じ変数名を指定することができます。

点の位置は、明示的な点の位置を定義するデータセットの Points 変数で利用できます。

一部のデータセットでは、フィールドデータは、セルまたは点に関連付けられていないグローバルデータ値を格納するために使用されます。Python Calculator の式でフィールドデータを使用するには、次の例に示すように、入力で使用可能な FieldData ディクショナリでデータにアクセスします。

VolumeOfCell * inputs[0].FieldData['MaterialData'][time_index]

Did you know?

暗黙的に Python Calculator はNumPyを使用します。式のすべての配列はNumPy配列と互換性があり、NumPy配列を使用できる場所で使用できます。これらの配列で何ができるかについての詳細は、NumPyのリファレンス [NumPydevelopers] を参照してください。

5.9.3.5. 関数

以下は、 Python Calculator で使用可能な関数のリストです。 ほとんどのNumPyおよびSciPy関数は Python Calculator で使用できるため、これは部分的なリストであることに注意してください。これらの関数の多くは、引数として単一の値または配列を取ることができます。

  • abs(x) : \(x\) の絶対値を返します。

  • add(x, y) : 2つの値の合計を返します。\(x\) および \(y\) には、単一の値または配列を指定できます。これは \(x+y\) と同じです。

  • area(dataset) : メッシュ内の各セルの表面積を返します。

  • aspect(dataset) : メッシュ内の各セルのアスペクト比を返します。

  • aspect_gamma(dataset) : メッシュ内の各セルのアスペクト比ガンマを返します。

  • condition(dataset) : メッシュ内の各セルの条件番号を返します。

  • cross(x, y) : 2つの3Dベクトルの配列から、2つの3Dベクトルの外積を返します。

  • curl(array) : 3Dベクトルの配列のカールを返します。

  • divergence(array) : 3Dベクトルの配列の発散(divergence)を返します。

  • divide(x, y) : 要素ごとの分割。\(x\) および \(y\) には、単一の値または配列を指定できます。これは \(\frac{x}{y}\) と同じです。

  • det(array) : 2D正方行列の行列式を返します。

  • determinant(array) : 2D正方行列の行列式を返します。

  • diagonal(dataset) : データセットの各セルの対角線の長さを返します。

  • dot(a1, a2) : 2つのスカラー/ベクトル配列の2つのスカラー/ベクトルの内積を返します。

  • eigenvalue(array) : 2D正方行列の配列の固有値を返します。

  • eigenvector(array) : 2D正方行列の配列の固有ベクトルを返します。

  • exp(x) : \(e^x\) を返します。

  • gradient(array) : スカラーまたはベクトルの配列の勾配を返します。

  • inv(array) : 2D正方行列の逆行列を返します。

  • inverse(array) : 2D正方行列の逆行列を返します。

  • jacobian(dataset) : 2D正方行列の配列のjacobianを返します。

  • laplacian(array) : スカラー配列のラプラシアン(laplacian) を返します。

  • ln(array) : スカラー/ベクトル/テンソルの配列の自然対数を返します。

  • log(array) : スカラー/ベクトル/テンソルの配列の自然対数を返します。

  • log10(array) : スカラー/ベクトル/テンソルの配列の底が10の対数を(常用対数)返します。

  • make_point_mask_from_NaNs(dataset, array) : この関数はNaN値を持つ入力に対応するゴースト配列を生成します。各NaN値について、出力配列は vtk.vtkDataSetAttributes.HIDDENPOINT 値に対応します。これらの値は、データセットが持つ可能性のあるゴースト値とも結合されます。

  • make_cell_mask_from_NaNs(dataset, array) : この関数はNaN値を持つ入力に対応するゴースト配列を生成します。各NaN値について、出力配列は vtk.vtkDataSetAttributes.HIDDENCELL 値に対応します。これらの値は、データセットが持つ可能性のあるゴースト値とも結合されます。

  • max(array) : 配列の最大値を単一の値として返します。並列実行時にプロセス全体の最大値を計算します。

  • max_angle(dataset) : データセット内の各セルの最大角度を返します。

  • mag(a) : スカラー/ベクトルの配列の大きさを返します。

  • mean(array) : スカラー/ベクトル/テンソルの配列の平均値を返します。 並列実行時はプロセス全体の平均を計算します。

  • min(array) : 配列の最小値を単一の値として返します。並列実行時にプロセス全体の最小値を計算します。

  • min_angle(dataset) : データセット内の各セルの最小角度を返します。

  • mod(x, y) : remainder \((x, y)\) と同じです。

  • multiply(x, y) : \(x\)\(y\) の積を返します。\(x\) および \(y\) には、単一の値または配列を指定できます。\(x\)\(y\) が両方とも配列である場合、これは要素ごとの操作であることに注意してください。これは、\(x\times y\) と同じです。

  • negative(x) : \(-x\) と同じです。

  • norm(a) : スカラー/ベクトルの配列の正規化された値を返します。

  • power(x, a) : \(x\)\(a\) の積です。ここで、\(x\)\(a\) はどちらも単一の値または配列になります。\(x\)\(a\) の両方が配列の場合、2つの配列間で1つずつマッピングが使用されます。

  • reciprocal(x) : \(\frac{1}{x}\) を返します。

  • remainder(x, y) : \(x-y\times floor (\frac{x}{y})\) を返します。\(x\) および:math:y には、単一の値または配列を指定できます。

  • rint(x) : \(x\) を最も近い整数に丸めます。

  • shear(dataset) : データセット内の各セルのせん断を返します。

  • skew(dataset) : データセットの各セルのスキューを返します。

  • square(x) : \(x*x\) を返します。

  • sqrt(x) : \(\sqrt[2]{x}\) を返します。

  • strain(array) : 3Dベクトルの配列の歪みを返します。

  • subtract(x, y) : 2つの値の差を返します。\(x\) および \(y\) には、単一の値または配列を指定できます。これは \(x-y\) と同じです。

  • surface_normal(dataset) : データセットの各セルのサーフェス法線を返します。

  • trace(array) : 2D正方行列の配列のトレースを返します。

  • volume(dataset) : データセットの各セルのボリューム法線を返します。

  • vorticity(array) : 3Dベクトルの配列の渦度/カールを返します。

  • vertex_normal(dataset) : データセット内の各点の頂点法線を返します。

5.9.3.6. 三角関数

以下は、サポートされている三角関数のリストです。

sin(x)

arccos(x)

cosh(x)

arctanh(x)

cos(x)

arctan(x)

tanh(x)

tan(x)

hypot(x1, x2)

arcsinh(x)

arcsin(x)

sinh(x)

arccosh(x)

5.9.4. 勾配

Gradient フィルタは、あらゆる種類のデータセットにおいて、セルやポイントデータの配列の勾配を計算します。

非構造格子の場合、セルデータの勾配はセルの導関数に対応します。点データの場合、ある点での勾配は、その点が属するセルの導関数の平均として計算されます。

構造格子では、中心差分法を用いて勾配を計算します。ただし、データセットの境界では、境界要素に前進差分と後退差分を使用します。

このフィルタはオプションで、発散、渦度(カールとも呼ばれる)、Q基準を計算することができます。これらの量を計算するためには3成分の配列が必要です。初期設定では、勾配の計算のみが有効です。

均一直線格子( 3.1.3 章 参照) の場合には、点データ配列の勾配を効率的に計算する特定の実装も利用できます。この実装では,境界値を重複させた後に,境界要素での中心差分の使用を拡張しています。このオプションを有効にするには、 図 5.28 で示されているように、 Boundary Method プロパティを Smoothed に設定します。

../_images/GradientProperties.png

図 5.28 均一な構造格子に Gradient フィルタを適用した場合のプロパティパネル

5.9.5. Mesh Quality

Mesh Quality フィルタは、各セルの適応度の幾何学的尺度を含む新しいセル配列を作成します。セルの形状によって異なる品質基準を選択できます。

Triangle Quality は、三角形の品質を評価するために使用する品質尺度を示します。 Radius Ratio は、三角形の3つの頂点で囲まれた円のサイズを、三角形の3つのエッジに接する円のサイズで割った値です。 Edge Ratio は、最長エッジ長と最短エッジ長の比率です。

Quad Quality は、クアッドセルの評価に使用する品質尺度を示します。

Tet Quality は、四面体の品質を評価するために使用する品質尺度を示します。 Radius Ratio は、四面体の4つの頂点によって囲まれる球のサイズを、四面体の4つのフェースに接する円のサイズで割ったものです。 Edge Ratio は、最長エッジ長と最短エッジ長の比率です。 Collapse Ratio は、反対側の三角形の上にある頂点の高さの最小比率を、すべての頂点/三角形のペアにまたがる反対側の三角形の最長エッジで割った値です。

HexQualityMeasure は、六面体セルの品質を評価するために使用される品質尺度を示します。

5.10. White-boxフィルタ

これには、 Programmable Filter および Programmable Source が含まれます。これらのフィルタ/ソースには、データの生成や処理を行うPythonコードを追加できます。これらのためのPythonコードの書き方については、5 章 で説明します。

5.11. Favoriteフィルタ

複数のフィルタを使用する場合は、Filters > Favorites メニューでフィルタを整理できます。これは、パイプラインのコンテキストメニューから、または 図 5.29 に示すように Filters > Manage Favorites メニューから実行できます。このダイアログでは、カテゴリとサブカテゴリを作成できます。フィルタやカテゴリの並べ替えや移動を行うためのドラッグ & ドロップ操作をサポートしています。また、Favorites は、サポートされているプラットフォームの他のフィルタサブメニューで強調表示されます。お気に入りはユーザ設定に保存され、他のParaViewセッションで使用できます。

../_images/FavoritesManager.png

図 5.29 Favorites Managerダイアログ。左:使用可能なフィルタのリスト。右:カテゴリ別に整理されたお気に入り。

5.12. ベストプラクティス

5.12.1. データの爆発的増加の回避

ParaView で表示されるパイプラインモデルは、探索的な可視化に非常に便利です。コンポーネント間の疎結合により、独自の可視化を構築するための非常に柔軟なフレームワークが提供され、パイプライン構造により、パラメータをすばやく簡単に調整できます。

この結合の欠点は、より大きなメモリフットプリントを有することができることです。 このパイプラインの各ステージは、データの独自のコピーを保持します。可能な限り、ParaView はデータの浅いコピーを実行し、パイプラインの異なるステージがメモリ内の同じデータブロックを指すようにします。ただし、新しいデータを作成したり、データの値やトポロジを変更するフィルタでは、結果用に新しいメモリを割り当てる必要があります。ParaView が非常に大きなメッシュをフィルタリングしている場合、フィルタを不適切に使用すると、使用可能なすべてのメモリがすぐに枯渇する可能性があります。 したがって、大規模データセットを可視化する場合、フィルタのメモリ要件を理解することが重要です。

以下のアドバイスは、非常に大量のデータを扱い、残りのメモリが不足している場合のためのものです。メモリ不足の危険がない場合は、次のアドバイスは関係ありません。

構造データを扱うときには、どのフィルタがデータを非構造データに変更するかを知ることが非常に重要です。非構造データは、トポロジを明示的に書き出す必要があるため、セルあたりのメモリ使用量が構造データよりもはるかに多くなります。ParaView には、トポロジを何らかの方法で変更する多数のフィルタがあります。これらのフィルタは、生成されるすべてのタイプのトポロジを処理する唯一のデータセットであるため、非構造格子としてデータを書き出します。次のフィルタのリストは、新しい非構造トポロジをその出力に書き出します。これは入力とほぼ同じです。

Append Datasets

Extract Edges

Subdivide

Append Geometry

Linear Extrusion

Tessellate

Clean

Loop Subdivision

Tetrahedralize

Clean to Grid

Reflect

Triangle Strips

Connectivity

Rotational Extrusion

Triangulate

D3

Shrink

Delaunay 2D/3D

Smooth

技術的には、Ribbon フィルタと Tube フィルタはこのリストに含まれます。 ただし、ポリゴンデータの1Dセルでしか機能しないため、通常は入力データは小さく、ほとんど問題になりません。

このようなフィルタのセットは、非構造格子も出力しますが、このデータの一部を削減する傾向があります。ただし、このデータ削減量は、多くの場合、非構造データへの変換によるオーバーヘッドよりも小さいことに注意してください。また、削減のバランスがよくとれていない場合が多いことにも注意してください。単一のプロセスでセルが失われない可能性があります(よくあります)。したがって、これらのフィルタは、非構造データには注意し、構造データには細心の注意を払って使用する必要があります。

Clip

Extract Selection

Decimate

Quadric Clustering

Extract Cells by Region

Threshold

上記のリストの項目と同様に、Extract Subset はデータを実行します。 構造データセットの削減だけでなく、構造データセットも出力します。したがって、新しいデータの作成に関する警告は引き続き適用されますが、非構造格子への変換について心配する必要はありません。

この次のフィルタセットでは、非構造データも出力されますが、データの次元が縮小されるため(例:3Dから2D)、出力が大幅に小さくなります。したがって、これらのフィルタは通常、非構造データで使用しても安全であり、構造データでは多少の注意が必要です。

Cell Centers

Feature Edges

Contour

Mask Points

Extract CTH Fragments

Outline (curvilinear)

Extract CTH Parts

Slice

Extract Surface

Stream Tracer

次のフィルタでは、データの接続はまったく変更されません。代わりに、データにフィールド配列を追加するだけです。既存のデータはすべてシャローコピーされます。 これらのフィルタは通常、すべてのデータに対して安全に使用できます。

Block Scalars

Octree Depth Scalars

Calculator

Point Data to Cell Data

Cell Data to Point Data

Process Id Scalars

Curvature

Random Vectors

Elevation

Resample with dataset

Generate Surface Normals

Surface Flow

Gradient

Surface Vectors

Level Scalars

Texture Map to...

Median

Transform

Mesh Quality

Warp (scalar)

Octree Depth Limit

Warp (vector)

この最終的なフィルタのセットは、出力にデータを追加しないか(重要なデータはすべてシャローコピーされる)、または追加されるデータは一般に入力のサイズに依存しません。これらはほとんどの場合、どんな状況(時間はかかりますが)でも追加しても安全です。

Annotate Time

Outline

Append Attributes

Outline Corners

Extract Block

Plot Global Variables Over Time

Extract Datasets

Plot Over Line

Extract Level

Plot Selection Over Time

Glyph

Probe Location

Group Datasets

Temporal Shift Scale

Histogram

Temporal Snap-to-Time-Steps

Integrate Variables

Temporal Statistics

Normal Glyphs

これまでのクラスには当てはまらない特殊なケースのフィルタがいくつかあります。現在、 Temporal Interpolator および Particle Tracer などの一部のフィルタでは、時間の経過に伴うデータの変化に基づいて計算が実行されます。 したがって、これらのフィルタは、2つ以上の時間インスタンスのデータをロードする必要があり、メモリ内で必要とされるデータ量を2倍以上にすることができます。 Temporal Cache フィルタは、複数のtimeインスタンスのデータも保持します。時間統計(Temporal Statistics)などの時間フィルタや、時間の経過とともにプロットされるフィルタでは、ディスクからすべてのデータを繰り返しロードする必要がある場合があることに注意してください。 このため、余分なメモリを必要としない場合でも、非常に長い時間がかかることがあります。

Programmable Filter も、分類できない特殊なケースです。このフィルタはプログラムされている処理を実行するので、これらのカテゴリのいずれにも分類できます。

5.12.2. 不要データの除去

大規模なデータを処理する場合は、可能な限りデータを選別し、できるだけ早く処理することをお勧めします。大規模なデータのほとんどは3Dジオメトリから始まり、必要なジオメトリは多くの場合サーフェスです。通常、サーフェスは非常に小さいので、メモリフットプリントは、派生元のボリュームよりも早い段階でサーフェスに変換することをお勧めします。そうすれば、比較的安全に他のフィルタを適用することができます。

非常に一般的な可視化操作は、等高線(Contour)フィルタを使用して、ボリュームから等値面を抽出することです。 Contour フィルタは通常、入力よりもかなり小さいジオメトリを出力します。したがって、 Contour フィルタを使用する場合は、早期に適用する必要があります。 Contour フィルタにパラメータを設定する場合は、多くの等値面の値を指定した場合に発生する可能性がある大量のデータを生成できるため、注意が必要です。等値面の周囲のノイズなどの高周波数によっても、大きく不規則なサーフェスが形成される場合があります。

ボリュームの内部をピアするもう1つの方法は、ボリュームに対して Slice を実行することです。 Slice フィルタは、ボリュームを平面と交差させ、平面が交差するボリューム内のデータを確認できるようにします。大規模なデータセット内の対象フィーチャの相対的な位置がわかっている場合は、スライスすることをお勧めします。

データの a priori 知識がほとんどなく、データセット全体の長いメモリと処理時間なしにデータを探索したい場合は、 Extract Subset フィルタを使用してデータをサブサンプルできます。サブサンプリングされたデータは、元のデータよりも大幅に小さくなる可能性がありますが、ロードバランスが良好である必要があります。もちろん、サブサンプリングが小さなフィーチャをまたいでしまうと、それらを見逃してしまう可能性があることに注意してください。また、フィーチャを見つけたら、戻って完全なデータセットで可視化する必要があります。

ボリュームのサブセットを取り出すことができる機能もいくつかあります。 ClipThresholdExtract Selection 、および Extract Subset はすべて、何らかの基準に基づいてセルを取り出すことができます。しかし、抽出されたセルはほとんどバランスがとれていないことに注意してください。いくつかのプロセスではセルが削除されていないことが予想されます。 Extract Subset を除くすべてのフィルタは、構造データ型を非構造格子に変換します。したがって、抽出されたセルの大きさがソースデータの大きさよりも1桁以上小さい場合を除いて、使用しないでください。

可能な場合は、3Dデータを抽出するフィルタの使用を、2Dサーフェスを抽出するフィルタに置き換えます。たとえば、データを通過する平面が必要な場合は、 Clip フィルタではなく Slice フィルタを使用します。特定の範囲の値を含むセル領域の位置を知りたい場合は、 Threshold フィルタを使用してすべてのセルを抽出するのではなく、 Contour フィルタを使用して範囲の最後にサーフェスを生成することを検討してください。フィルタを置き換えると、下流のフィルタに影響を与える可能性があることに注意してください。たとえば、 Threshold の後に Histogram フィルタを実行すると、ほぼ同等の Contour フィルタの後に実行した場合とはまったく異なる結果になります。