VTKアルゴリズムでプロットする#

動的なビジュアライゼーションのために, vtkAlgorithmPlotter に渡します.

注釈

"動的な可視化" とは,入力データ/ソースが変化すると,リアルタイムに可視化されることを意味します.

vtkAlgorithm は,VTK のすべてのソース,フィルタ,シンクのスーパークラスです.これは,データ処理アルゴリズムを実行するための一般的なインターフェイスを定義しています.パイプライン接続は,接続を通過するデータの種類に依存しない入力ポートと出力ポートに関連付けられます.

add_mesh() などのメソッドを用いて,シーンにデータを追加する際に vtkAlgorithm の出力ポートを PyVista の描画パイプラインに接続することが可能です.

この例では,いくつかの vtkAlgorithm フィルタを直接使用し,それを PyVista に渡して動的な視覚化を行う方法を説明します.

import vtk

import pyvista as pv
from pyvista import examples

ソースアルゴリズムとして vtkConeSource を使用します.このソースは,インスタンスのパラメータに応じて動的にコーンオブジェクトを作成します.この例では, vtkConeSource.SetResolution() を介して,コーンソースアルゴリズムの解像度を設定するコールバックを接続します.

algo = pv.ConeSource()


def update_resolution(value):
    """Callback to set the resolution of the cone generator."""
    res = round(value)
    algo.resolution = res

vtkConeSource (vtkAlgorithm のサブクラス) を直接プロッタに渡し,スライダウィジェットを解像度を調整するコールバックに接続します.

p = pv.Plotter()
p.add_mesh(algo, color='red')
p.add_slider_widget(update_resolution, [5, 100], title='Resolution')
p.show()
plotting algorithms

ここでは, vtkRegularPolygonSource を使用した別の例を示します.

poly_source = vtk.vtkRegularPolygonSource()
poly_source.GeneratePolygonOff()
poly_source.SetRadius(5.0)
poly_source.SetCenter(0.0, 0.0, 0.0)


def update_n_sides(value):
    """Callback to set the number of sides."""
    res = round(value)
    poly_source.SetNumberOfSides(res)


p = pv.Plotter()
p.add_mesh_clip_box(poly_source, color='red')
p.add_slider_widget(update_n_sides, [3, 25], title='N Sides')
p.view_xy()
p.show()
plotting algorithms

フィルタパイプライン#

これは,任意の vtkAlgorithm サブクラスを使用して,動的にデータの生成やフィルタリングを行うことができます.以下は,VTKフィルタのパイプラインを一緒に実行する例です.

# Source mesh object (static)
mesh = examples.download_bunny_coarse()

# Initialize VTK algorithm to modify dynamically
splatter = vtk.vtkGaussianSplatter()

# Pass PyVista object as input to VTK
splatter.SetInputData(mesh)

# Set parameters of splatter filter
n = 200
splatter.SetSampleDimensions(n, n, n)
splatter.SetRadius(0.02)
splatter.SetExponentFactor(-10)
splatter.SetEccentricity(2)
splatter.Update()

# Pipe splatter filter into a contour filter
contour = vtk.vtkContourFilter()
contour.SetInputConnection(splatter.GetOutputPort())
contour.SetInputArrayToProcess(0, 0, 0, 0, 'SplatterValues')
contour.SetNumberOfContours(1)
contour.SetValue(0, 0.95 * splatter.GetRadius())

# Use PyVista to plot output of contour filter
p = pv.Plotter(notebook=0)
p.add_mesh(mesh, style='wireframe')
p.add_mesh(contour, color=True)
p.add_slider_widget(splatter.SetRadius, [0.01, 0.05])
p.show()
plotting algorithms

Total running time of the script: (0 minutes 4.804 seconds)

Sphinx-Galleryによるギャラリー