Mayaviの視覚化の構成:パイプライン

MayaviおよびVTKパイプライン

Mayaviは,視覚化に必要なすべてのものに VTK を使用します.パイプラインの概念は,VTKのすべてのビジュアライゼーションの基礎となっています.ただし,Mayaviで使用されるパイプラインは,ビジュアライゼーションを作成するVTKパイプラインに対応していないことに注意してください.レイアウトが異なり,オブジェクトが同じではなく,VTKパイプラインにはより多くのノードがあります.2つのパイプラインにはいくつかの類似点がありますが,このセクションではMayaviパイプラインについてのみ説明します.

Mayaviパイプラインの解剖図

パイプラインのレイアウト

  • Mayaviパイプラインのトップノードは Engine と呼ばれます.それは場面の創造と破壊に責任があります.パイプラインビューには表示されません.
  • Engine の下には Scenes があります.
  • Scene には Sources データのセットがあり,Mayaviに可視化するためにデータを公開します.
  • FiltersSources に適用して,ラップするデータを変換できます.
  • Module Manager は,スカラーまたはベクトルデータを表すために使用される色を制御する.パイプラインビューでは Colors and legends というノードとして表示されます.
  • 視覚化 Modules は,最終的に,サーフェスやラインなどのScene内のデータの再調整を表示します.

異なるMayaviエントリポイント間のリンク

Mayaviで作成されるすべてのビジュアリゼーションはパイプラインを使用して構築されますが,パイプラインの構築はユーザには見えない場合があります.

  • Mayaviを視覚化する最も簡単な方法は,たとえば, Parametric surfaces examples に公開されているユーザインタフェースを使用してパイプラインを作成することです.
  • mlab 3d plotting functions numpy配列を視覚化するために,ソース,モジュール,場合によってはフィルタで構成される完全なパイプラインを作成します. pipeline view を表示すると,作成されたパイプラインを簡単に理解できます.
  • パイプラインは, mlab.pipeline functions を使ったmlabを使用してノード単位で構築することもできます.パイプライン機能.呼び出す関数の名前は,パイプラインビューに表示されるパイプラインノードの名前から推測できます.
  • パイプラインを構成するオブジェクトをインスタンス化し,公開された further below として手動でパイプラインに追加できます.

調査したパイプラインの例

mlab.plot3d によって作成されたパイプラインを調べてみましょう.線を表す関数:

import numpy as np
phi = np.linspace(0., 2*np.pi, 1000)
x   = np.cos(6*phi)*(1 + .5*np.cos(11*phi))
y   = np.sin(6*phi)*(1 + .5*np.cos(11*phi))
z   = .5*np.sin(11*phi)

from mayavi import mlab
surface = mlab.plot3d(x, y, z, np.sin(6*phi), tube_radius=0.025, colormap='Spectral', opacity=.5)
_images/pipeline_and_scene.jpg

mlab.plot3d 関数は,まず線で結ばれた点からなるソースを作成します.次に,この一連の行を 'strip' に変換する Stripper フィルタを適用します.次に, 'strip' フィルタを適用し,指定した半径の Tube を作成します.最後に, Surface モジュールを適用してチューブのサーフェスを表示します. mlab.plot3d 関数によって返される surface オブジェクトはその最後の Surface モジュールです.

チューブフィルタを適用する前のパイプラインのデータを見てみましょう.まず, Stripper フィルタを取得します.

stripper = surface.parent.parent.parent

次に, strip を表す Surface モジュールを適用します.

lines = mlab.pipeline.surface(stripper, color=(0, 0, 0))
_images/pipeline_and_scene2.jpg

異なるステップのすべてのプロパティをパイプラインビューで調整できます.さらに,これらはさまざまなオブジェクトのアトリビュートに対応します.

>>> tubes = surface.parent.parent
>>> tubes.filter.radius
0.025000000000000001

さまざまなプロパティのダイアログボックスに表示される名前は,対応するオブジェクトの属性を示します.しかし,このような対応関係を見つけるのはかなり困難です.この目的のためには record feature を使うことをお勧めします.