フィルタ#
メッシュの解析と変更を行うためのPyVistaフィルタAPIのデモを行います.
注釈
このチュートリアルのセクションは PyVista's Example Gallery のフィルタリングセクションから採用されたものです.
PyVistaのメッシュオブジェクトには,オブジェクト上で直接すぐに使える一般的なフィルタが用意されています.これらのフィルタには以下のものがあります(完全なリストは Filters API を参照してください).
slice() は,入力データセットをユーザー定義平面でスライスします.
slice_orthogonal(): 3つの直交スライスからなる
pyvista.MultiBlock
データセットを作成します.slice_along_axis(): 指定された軸に沿った多くのスライスからなる
pyvista.MultiBlock
データセットを作成します.threshold(): データセットを 1 つの値あるいは値の範囲で閾値処理します.
threshold_percent(): スカラー範囲のパーセンテージによる閾値
clip(): ユーザー定義平面でデータセットを切り取ります.
outline_corners(): データ領域のコーナーをアウトライン化します
extract_geometry(): 表面の形状を抽出します.
これらのフィルタを使用するには,データ・オブジェクトで選択したメソッドを直接呼び出します.
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()
他のフィルターはどうですか?いくつかのフィルタ結果を収集して比較してみましょう.
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()
フィルタパイプライン#
VTKでは,フィルタがパイプラインで使用されることが多く,各アルゴリズムはその出力を次のフィルタリング・アルゴリズムに渡します.PyVistaでは,次のようにしてフィルタリングパイプラインを模倣できます.各フィルタを最後のフィルタにアタッチします.次の例では,複数のフィルタが連結されています.
まず,
threshold
フィルタを空にして,NaN
値をすべて消去します.elevation
フィルタを使用して,高さに対応するスカラー値を生成します.clip
フィルタを使用して,データセットを半分にカットします.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()