フィルタ#

メッシュの解析と変更を行うためのPyVistaフィルタAPIのデモを行います.

注釈

このチュートリアルのセクションは PyVista's Example Gallery のフィルタリングセクションから採用されたものです.

PyVistaのメッシュオブジェクトには,オブジェクト上で直接すぐに使える一般的なフィルタが用意されています.これらのフィルタには以下のものがあります(完全なリストは Filters API を参照してください).

これらのフィルタを使用するには,データ・オブジェクトで選択したメソッドを直接呼び出します.

import pyvista as pv
from pyvista import examples

dataset = examples.load_uniform()
dataset.set_active_scalars("Spatial Point Data")

# Apply a threshold over a data range
threshed = dataset.threshold([100, 500])

outline = dataset.outline()

これで,新しい threshed オブジェクトに入力データセットのしきい値が設定されたバージョンがあります.フィルタの実行方法を変更するためにどのようなキーワード引数を使用できるかを調べるには, help(dataset.threshold) またはIPython環境で shift+tab を使用してPyVistaオブジェクトに付加されたフィルタのdocstringを出力します.

このフィルタ処理されたデータセットを,元のデータセットのアウトラインに沿ってプロットできるようになりました:

pl = pv.Plotter()
pl.add_mesh(outline, color="k")
pl.add_mesh(threshed)
pl.camera_position = [-2, 5, 3]
pl.show()
../../_images/index-3_00_003.png

他のフィルターはどうですか?いくつかのフィルタ結果を収集して比較してみましょう.

import pyvista as pv
from pyvista import examples

dataset = examples.load_uniform()
outline = dataset.outline()
threshed = dataset.threshold([100, 500])
contours = dataset.contour()
slices = dataset.slice_orthogonal()
glyphs = dataset.glyph(factor=1e-3, geom=pv.Sphere(), orient=False)

p = pv.Plotter(shape=(2, 2))
# Show the threshold
p.add_mesh(outline, color="k")
p.add_mesh(threshed, show_scalar_bar=False)
p.camera_position = [-2, 5, 3]
# Show the contour
p.subplot(0, 1)
p.add_mesh(outline, color="k")
p.add_mesh(contours, show_scalar_bar=False)
p.camera_position = [-2, 5, 3]
# Show the slices
p.subplot(1, 0)
p.add_mesh(outline, color="k")
p.add_mesh(slices, show_scalar_bar=False)
p.camera_position = [-2, 5, 3]
# Show the glyphs
p.subplot(1, 1)
p.add_mesh(outline, color="k")
p.add_mesh(glyphs, show_scalar_bar=False)
p.camera_position = [-2, 5, 3]

p.link_views()
p.show()
../../_images/index-4_00_002.png

フィルタパイプライン#

VTKでは,フィルタがパイプラインで使用されることが多く,各アルゴリズムはその出力を次のフィルタリング・アルゴリズムに渡します.PyVistaでは,次のようにしてフィルタリングパイプラインを模倣できます.各フィルタを最後のフィルタにアタッチします.次の例では,複数のフィルタが連結されています.

  1. まず, threshold フィルタを空にして, NaN 値をすべて消去します.

  2. elevation フィルタを使用して,高さに対応するスカラー値を生成します.

  3. clip フィルタを使用して,データセットを半分にカットします.

  4. slice_orthogonal フィルタを使用して,各軸平面に沿ってスライスを3つ作成します.

フィルタリングチェーンを適用する

result = dataset.threshold().elevation().clip(normal="z").slice_orthogonal()

フィルタリングされたデータを表示するには, plot メソッド (result.plot()) を呼び出すか,レンダリングシーンを作成します.

p = pv.Plotter()
p.add_mesh(outline, color="k")
p.add_mesh(result, scalars="Elevation")
p.view_isometric()
p.show()
../../_images/index-6_00_002.png

演習#

共通フィルタの使用

Using Common Filters

ボーナスコンテンツ#

サンプル関数:3DでのPerlinノイズ

Sample Function: Perlin Noise in 3D

やってみよう#

平面とボックスでクリップします

Clipping with Planes & Boxes

表面の法線を計算します

Computing Surface Normals

コンタリング

Contouring

グリフ(矢印)によるベクトルの表示

Plotting Glyphs (Vectors or PolyData)

解答#

平面とボックスでクリップします

Clipping with Planes & Boxes

表面の法線を計算します

Computing Surface Normals

コンタリング

Contouring

グリフ(矢印)によるベクトルの表示

Plotting Glyphs (Vectors or PolyData)

Sphinx-Galleryによるギャラリー