Probeフィルタの例

プローブフィルタを用いて任意の表面に沿ったスカラー場を可視化します.

この例では,プローブフィルタを使用して,データセットを別のソースで(または補間された) 'projected' する方法を示します.これは,複雑なVTKパイプラインの例でもあり,PipelineBrowserを使用して検査する方法を示しています.

この例では,関数は通常のグリッドでサンプリングされ,ImagePlaneWidgetを使用して視覚化できます.関心のある関数は原点までの距離に依存せず,角度のみの関数である.このため,原点の球の中心でサンプリングされた値を視覚化することは興味深いかもしれませんが,通常のグリッドのボリューム全体でサンプリングされたデータがあるのはこのためです.

BuiltinSurfaceソースを使用して球を作成し,VTK ProbeFilterを使用してこのサーフェス上のデータをサンプリングします.ProbeFilterは,データを投影するためのデータ構造である入力と,データ値の元となる 'source' を受け取ります.

このVTKフィルタをMayaviパイプラインに挿入するには,UserDefinedフィルタを使用する必要があります( UserDefined フィルタの使用 および イメージカーソルフィルタの例 および Tvtkセグメンテーションの例 を参照してください).入力は,パイプラインに挿入されたときに自動的に指定されます.ソースは明示的に指定する必要があります.これはVTKフィルタなので,ソースはMayaviオブジェクトによって出力されたVTKデータセットです.これは .outputs[0] で確認できます.

このフィルタは,Mayaviがユーザに公開しようとする単純なパイプラインモデルにわずかに違反していることに注意してください.このフィルタには2つのエントリがあります.その結果,Mayaviパイプラインはツリーではなくなりました.しかし,Mayavi pipeline view を開くと,ProbeFilterのビューには親が1つしかないことがわかります.この可視化の基礎となる実際のVTKパイプラインを検査するために,この例の最後でTVTK PipelineBrowserを使用します.VTKパイプラインは,Mayaviで表されるパイプラインよりもはるかに複雑であることがわかります.つまり,アクター,データマッパー,およびVTKパイプラインのその他の要素は,Mayaviフィルタとモジュールで集約されます.

関数の式がわかっているので,球上で直接サンプリングする方が簡単で効率的です.

Pythonソースコード: probe_filter.py

import numpy as np

from mayavi import mlab
from tvtk.api import tvtk
from tvtk.common import configure_source_data, configure_input

# The angular par of the spherical harmonic (3, 2)
x, y, z = np.mgrid[-.5:.5:100j, -.5:.5:100j, -.5:.5:100j]
Phi = np.angle((x+y*1j)**2*z)

field = mlab.pipeline.scalar_field(x, y, z, Phi)
ipw = mlab.pipeline.image_plane_widget(field)
mlab.outline(field)

surface = mlab.pipeline.builtin_surface()
surface.source = 'sphere'
surface.data_source.radius = .4
surface.data_source.phi_resolution = 200
surface.data_source.theta_resolution = 200
probe_filter = tvtk.ProbeFilter()
configure_input(probe_filter, surface.data_source)
configure_source_data(probe_filter, field.outputs[0])
probe = mlab.pipeline.user_defined(surface, filter=probe_filter)

surf = mlab.pipeline.surface(probe)

fig = mlab.gcf()

################################################################################
# Finally, to inspect the VTK Pipeline (and not the Mayavi one, we
# use the TVTK pipeline browser)
# Note that for Mayavi version < 3.4.1, there is a bug in the
# PipelineBrowser preventing a good display of this pipeline.
from tvtk.pipeline.browser import PipelineBrowser
browser = PipelineBrowser(fig.scene)
browser.show()

mlab.show()