Mayaviアプリケーションの使用

セクションの概要

このセクションでは,主に mayavi2 アプリケーションの対話的な使用方法について説明します.ここで説明する内容の一部は,Mayaviがスクリプト化されている場合にも適用されます.

しかし,Matlabに似たシンプルな描画ライブラリとしてMayaviを簡単に使い始めたいのであれば, mlab: 3Dプロット用のPythonスクリプト セクションに直接ジャンプし,後で戻ってより深い理解を得ることができます.

Mayaviを学習するためのチュートリアルの例

mayaviを理解するには,次のようにコマンドラインでMayavi2アプリケーション mayavi2 を起動します.

$ mayavi2

Windowsでは,インストールされている(通常は Python2X\Scripts ディレクトリにある) mayavi2.exe をダブルクリックするか, python(x,y) またはEPDをインストールしていれば,スタートメニューの項目を使うことができます.

Mayaviを起動したら,ユーザインタフェースのさまざまなペインのサイズを変更して,快適なレイアウトにすることができます.これらの設定は,mayaviアプリケーションのデフォルト "perspective" になります.UIの詳細については UIの一般的なレイアウト のセクションを参照してください.

ここでは,Mayaviアプリケーションを使用してその機能の一部を紹介するための詳細な例をいくつか示します.例に進む前に,実験するデータを見つけておくと便利です.以下の2つの例では,mayaviソースの出荷時に出荷されたデータを使用しています.これらは,mayaviソースツリーのルート内の examples/data ディレクトリにあります.これらがインストールされていない場合は, https://github.com/enthought/mayavi からソースをダウンロードできます.

UIの一般的なレイアウト

mayavi2 アプリケーションを起動すると,以下の図のようなユーザインタフェースが提供されます.

Figure of Mayavi's initial UI window.

UIには,以下で説明するいくつかのセクションがあります.

メニュー:

メニューでは,ファイルのオープン,モジュールのロード,プリファレンスの設定などを行うことができます.

Mayaviパイプラインのツリービュー:
 
これはMayaviパイプラインのツリービューです.
  • オブジェクトの名前変更,削除,コピーを行うには,ツリーノードを右クリックします.
  • ノードを左クリックして,ツリーの下にあるオブジェクト・エディタでプロパティを編集します.
  • ツリー上でノードをドラッグすることができます.たとえば,モジュールのセット間でモジュールをドラッグして移動したり,シーン間で可視化を移動したりできます.
オブジェクトエディタ:

ここで,パイプライン上のオブジェクトをクリックすると,Mayaviパイプラインオブジェクトのプロパティを変更できます.

Mayaviの風景:

ここでデータの視覚化が行われます.マウスとキーボードを介してこのシーンを操作することができる.詳細は次のセクションで説明します.

Pythonインタプリタ:

Mayaviのスクリプト作成などに使用できるビルトインPythonインタプリタです.Mayaviツリーからノードをドラッグしてインタープリタにドロップすると,そのノードが表すオブジェクトをスクリプト化できます.

IPython のバージョン0.9 .1以上がインストールされている場合,このPythonインタプリタはIPythonを使用します.

ロガー:

アプリケーション・ログ・メッセージが表示される場合があります.

MayaviのUIレイアウトは高度な設定が可能です.

  • セクション間の線をドラッグして,特定のビューのサイズを変更できます.
  • ウィジェットの "tabs" のほとんどは,アプリケーション内のどこにでもドラッグして移動できます.
  • 各表示領域(Mayaviパイプラインビュー,オブジェクトエディタ,Pythonシェル,ロガー)は, 'View' メニューで有効/無効を切り替えることができます.

Mayaviの外観を変更するたびに保存され,次にアプリケーションを起動したときにも同じ設定になります.また,View->Perspectivesメニュー項目を使用して,異なるレイアウトを異なる "perspectives" に保存することもできます.

下の図は,具体的に設定されたMayaviユーザインタフェースビューです.このビューでは,さまざまなパーツのサイズが変更されます.

Figure of Mayavi's UI after being configured by a user.

データの視覚化

Mayaviでの可視化データは,一部のデータを 「データソース」 としてロードし,これらのソースに可視化モジュールを適用してデータを視覚化することによって実行されます.これについては, Mayaviの概要 のセクションを参照してください.これがどのように動作するかを理解するには, Parametric surfaces example を参照すると役に立ちます.

Module または Filter が使用される前に,あるデータまたは別のデータをロードする必要があります.Mayaviは,いくつかのデータファイルフォーマットをサポートしています,特にVTKデータファイルフォーマット.あるいは, mlab を使って numpy 配列からデータをロードすることもできます.データ構造の詳細については, Mayaviでのデータ表現 セクションを参照してください.

データがロードされると,オプションで以下のようなさまざまなものを使用することができます. Filters データをフィルタしたり,何らかの方法で修正したりしてから, モジュール を使用してデータを視覚化します.

ここでは,Mayaviのすべての modulesfilters をリストします.このリストはリファレンスとして役立ちます.

List of modules and filters

シーンとの相互作用

UI上のMayaviシーンを閉じるには,タブ上の小さな 'x' アイコンをクリックします.各シーンには,さまざまな機能をサポートするツールバーがあります.

  • 正または負のX,Y,Z軸に沿ってビューを設定したり,アイソメビューを取得するためのボタンです.
  • 既定のパース投影ではなく,平行投影をオンにするボタン.これは,2Dプロットを表示する場合に特に便利です.
  • X,Y,Z軸を示す軸をオンにするボタン.
  • 全画面表示をオンにするボタン.フルスクリーンモードに入ったら, 'q' または 'e' を押して通常のウィンドウに戻らなければならないことに注意してください.
  • シーンをさまざまなイメージフォーマットで保存するためのボタン.使用するイメージ形式は,ファイルに指定されている拡張子によって決まります.
  • シーンのプロパティを設定するためのUIを提供するボタン.

シーンを操作する主な方法は,マウスとキーボードを使用することです.

マウス操作

マウス操作には2つのモードがあります.

  • カメラモード:デフォルトで,マウスの移動に伴ってカメラが操作されます. 'c' キーを押すとこのモードになります.
  • アクターモード:このモードでは,マウスアクションはマウスが現在上にあるアクターに対して動作します. 'a' キーを押すとこのモードになります.

シーンのビューは,さまざまなマウスアクションを使用して変更できます.通常は,マウスボタンを押しながらドラッグします.

  • マウスの左ボタンを押したままドラッグすると,カメラ/アクターが移動方向に回転します.

    • このとき, "SHIFT" を押したままにすると,中央のボタンと同じようにシーンがパンします.
    • "CONTROL" キーを押すと,カメラの軸を中心に回転します(ロール).
    • "SHIFT" と "CONTROL" を押しながら上にドラッグするとズームイン,下にドラッグするとズームアウトします.これは右ボタンのようなものです.
  • マウスの右ボタンを押したまま上方向にドラッグするとズームインし(アクターの規模を拡大し),下方向にドラッグするとズームアウトします(規模を縮小したり).

  • マウスの中ボタンを押したままドラッグすると,シーンがパンされるか,オブジェクトが移動します.

  • マウスホイールを上に回転すると拡大ズームし,下に回転すると縮小ズームします.

キーボード操作

このシーンは,キーストロークによってアクティブ化されるいくつかの機能をサポートしています.次のものがあります.

'3':

ステレオレンダリングのオンとオフを切り替えます.これは,

'stereo' 基本設定項目がTrueに設定されていません.

'a':

マウス操作には,カメラモードではなくアクタモードを使用します.

'c':

マウス操作には,アクターモードではなくカメラモードを使用します.

'e'/'q'/'Esc':

フルスクリーンモードを終了します.

'f':

カメラの焦点を現在のマウスの位置に移動します.これにより,カメラフォーカスが移動し,現在のマウスの位置でビューが中央に配置されます.

'j':

マウス操作にジョイスティックモードを使用します.ジョイスティックモードでは,マウスはジョイスティックを模倣します.たとえば,中心から離れているときにマウスの左ボタンを押したままにすると,シーンが回転します.

'l':

シーンを照らすライトを設定します.ライトの設定を変更するためのウィンドウが表示されます.

'p':

現在のマウスポイントでデータを選択します.現在の選択に関する情報を示すウィンドウがポップアップ表示されます.UIでは,ピッカーの動作を変更して,セル,ポイント,または任意のポイントを選択することもできます.

'r':

カメラの焦点と位置をリセットします.これはとても便利です.

's':

シーンをイメージに保存すると,最初にファイル選択ダイアログボックスが表示され,ファイル名を選択できます.ファイル名の拡張子によってイメージタイプが決まります.

't':

マウス操作にはトラックボールモードを使用します.これは,マウス操作のデフォルトモードです.

'='/'+':

拡大表示します.

'-':

縮小表示します.

'左'/'右'/'上'/'下' 矢印:
 

左矢印,右矢印,上矢印,下矢印を押すと,これらの方向にカメラを回転できます. "SHIFT" モディファイヤを押したままにすると,カメラがパンされます.

対話的な使用からスクリプト作成へ

インタラクティブアプリケーションの使用時にMayaviのスクリプトを作成する方法を簡単に学習できます.このサブセクションでは,この目的のためのヒントをいくつか紹介します.

組み込みPythonインタプリタ

組み込みPythonインタープリターは,非常に強力な可能性を提供します.インタープリターには,コマンド補完,自動文書化,ツールチップ,および複数行の編集機能があります.さらに,次の機能もサポートしています.

  • mayavi という名前は自動的に mayavi.script.Script に結び付けられます.これは,Mayaviを簡単にスクリプト化するために使用できます.

  • application という名前は,想定されるアプリケーションに結び付けられます.

  • Pythonファイルを File->Open File... で開いた場合.”メニュー項目1は,色構文対応エディターで編集できます.組み込みPythonインタプリタでこのスクリプトを実行するには,エディタウィンドウに Control-r と入力します.ファイルを保存するには Control-s キーを押します.これは,単純なMayaviスクリプトを開発するときに非常に便利な機能です. Control-nControl-s を使って,フォントサイズを増減することもできます.

  • 前述のように,MayaviパイプラインのツリービューからPythonシェルにノードをドラッグアンドドロップすることができます.オブジェクトは,通常どおりにスクリプト化できます.このような場合によく使用されるパターンは次のとおりです.

    >>> tvtk_scene_1
    <mayavi.core.scene.Scene object at 0x9f4cbe3c>
    >>> s = _
    

    この場合,名前 s は削除されたtvtk_sceneオブジェクトにバインドされます.変数 _ には,削除されたオブジェクトである最後に評価された式が格納されます. tvtk_scene_1 を使うこともできますが,一語になります.

スクリプトへのMayaviアクションの記録

Mayaviは非常に便利で強力なスクリプト記録機能を備えています.これは,次の目的で使用できます.

  • Mayavi UIで実行されたすべてのアクションを,可視化を再作成できる 人間が読める Pythonスクリプトに記録します.
  • Mayaviオブジェクトを mlab と組み合わせてスクリプト化する方法を学習します.

この機能の使用方法は次のとおりです.

  1. mayavi2 アプリケーションを起動すると,パイプラインツリービューツールバーのクエスチョンマークの横に赤いレコードアイコンが表示されます.クリックします.これは, :ref:`Mayavi pipeline window ` のツールバーにあるスタンドアロンのmlabセッションからでも動作します.

  2. 数行の定型的なコードを含むポップアップウィンドウが表示されるので,スタンドアローンのスクリプトを実行できます. mayavi2 -x script.py `` または ``python script.py です.このウィンドウを開いたままにしておき,終了時に使用する Save script ボタンを無視してください.

  3. UIで好きなことを実行します.これらのアクションを実行すると,それらのアクションを実行するために必要なコードがコードリストに追加され,ポップアップウィンドウに表示されます.たとえば,新しいソース(追加ノードの dialog/view ,ファイルメニュー,または通常のオプションの右クリックのいずれかを使用します.)を作成し,モジュールやフィルタなどを追加します.ツリー・ビューでオブジェクトを変更します.

  4. UI上のカメラの移動,カメラの回転,ズーム,パン.これらはすべて,適切なPythonコードを生成します.カメラの場合,終了位置のみが保存されます(そうでなければ,何百万行もの無駄なコードを目にすることになる).シーン上の主要なキーボードアクションが記録されます( 'c'/'t'/'j'/'a' キーを除く).これは,左/右/上/下矢印や '+'/'-' キーなどを記録することを意味します.

    アクションが実行されるとコードが更新されるので,Mayavi APIを学習するのに便利です.

  5. 完了したら,もう一度レコードアイコンをクリックすると,記録が停止します.ポップアップウィンドウの Recording ボックスがチェックされ,新しいアクションに対応するコードは表示されなくなります.記録したスクリプトをPythonファイルに保存するには,ウィンドウの下部にある Save script ボタンをクリックします.スクリプトを script.py ファイルに保存します.コードのみを保存し,ファイルを保存しない場合は,ここでcancelをクリックします.

  6. 記録ウィンドウを閉じます.Mayaviを終了することもできます.

  7. シェルから以下を実行します.

    $  mayavi2 -x script.py
    

    または

    $ python script.py
    

    これらはすべてのコードを実行して,あなたが去ったところにたどり着くはずです.この生成されたスクリプトは自由に編集できます.実際,自動スクリプト生成のすべてのポイントはここにあります.

Mayaviの既存のセッションをスクリプト化することも可能であることを理解することが重要です.したがって,Mayaviを起動した後で,いくつかの操作を実行したり,Mayaviスクリプトを実行した後で,さらにアクションを記録したい場合は,その可能性があります.前と同じ手順に従います.この場合に覚えておかなければならないのは,セッションですでにセットアップしたオブジェクトはスクリプト・レコーダーによって作成されないということだけです.

注釈

また,Mayaviツリービューでドロップオブジェクトを削除/ドラッグすることもできます.しかし,これらはおそらく自動スクリプトでは行いたくないことです.

前述したように,スクリプトの記録は mlab セッションやMayaviが使用されるその他の場所で機能します. mlab 固有のコードは生成しませんが,OO Mayavi APIを使用して汎用のMayaviコードを記述します.

警告

制限事項

スクリプトレコーダーは,いくつかの重要なアクションに使用できます.この時点では,次のアクションはサポートされていません.

  • シーンに 'c'/'t'/'j'/'a'/'p' キーが記録されない
    これは実装が非常に複雑で,基本的なスクリプト作成には通常必要ないためです.
  • インターフェースの任意のスクリプトは,明らかに機能しません.
    ご想像のとおり.
  • 特性の変更と特定の呼び出しだけが
    コード.したがって,任意のMayaviオブジェクトで任意のメソッドをコールしても,通常は何も記録されません.

コマンドライン引数

mayavi2 アプリケーションには,次のセクションで説明する便利なコマンドライン引数があります.これらのオプションについては, mayavi2 のマニュアルページでも説明されています.

コマンドラインから完全なパイプラインを構築して,Mayaviをシェルスクリプトに統合し,便利な可視化を実現できます.

Mayaviは次のように実行できます.

mayavi2 [options] [args]

ここで, arg1arg2 などは,保存されたMayavi2ビジュアライゼーション( filename.mv2 ),Mayavi2スクリプト( filename.py ),またはMayaviがサポートする任意のデータファイルに対応するオプションのファイル名です.オプションまたは引数が指定されていない場合,Mayaviはデフォルトの空白シーンで起動します.

次のオプションがあります.

-h これにより,使用可能なすべてのコマンドラインオプションが出力され,終了します --help からも利用できます.
-V これにより,コマンドラインにMayaviのバージョンが出力されて終了します. --version からも入手できます.
-z file_name これにより,以前に保存したMayavi2表示がロードされます. --viz file_name または --visualization file_name からも利用できます.
-d data_file

サポートされているデータファイル形式,またはファイルに関連付けられていないデータソースオブジェクトを開きます.これには,VTKファイル形式(*.vtk, *.xml, *.vt[i,p,r,s,u], *.pvt[i,p,r,s,u]),VRML2(*.wrl),3D Studio(*.3ds),PLOT3D(*.xyz),STL,BYU,RAW,PLY,PDB,SLC,FACET,OBJ,AVSUCD(*.inp),GAMBIT(*.neu),Exodus(*.exii),PNG,JPEG,BMP,PNM,DCM,DEM,MHA,MHD,MNC,XIMG,TIFF,およびサポートされているその他のさまざまなファイル形式が含まれます.

data_file は,ファイルに関連付けられていないソースオブジェクトにすることもできます.たとえば, ParametricSurfacePointLoad は,対応するデータソースをMayaviにロードします. --data からも入手できます.

-m module-name

モジュールは,データを実際に視覚化するオブジェクトです.与えられた module-name は現在の ModuleManager にロードされる.モジュール名が有効でない場合,エラーメッセージが表示されます.

もしモジュールが package.sub.module.SomeModule と入力すると,モジュール( SomeModule )が package.sub.module からインポートされます. mayavi2 で提供される標準モジュールには,フルパスの指定は必要ありません.次に例を示します.

mayavi2 -d data.vtk -m Outline -m user_modules.AModule

この例では, Outline は標準モジュールで, user_modules.AModule はユーザー定義モジュールです. --module からも入手できます.

-f filter-name

フィルタは,何らかの方法でデータをフィルタリングするオブジェクトです.指定された filter-name は,現在のsource/filterオブジェクトに対してロードされます.フィルタ名が有効でない場合は,エラーメッセージが表示されます.

もしフィルタが package.sub.filter.SomeFilter と入力すると,フィルタ( SomeFilter )は package.sub.filter からインポートされます. mayavi2 で提供される標準モジュールには,フルパスの指定は必要ありません.次に例を示します.

mayavi2 -d data.vtk -f ExtractVectorNorm -f user_filters.AFilter

この例では, ExtractVectorNorm が標準フィルタで, user_filters.AFilter がユーザ定義のフィルタです. --filter からも入手できます.

-M Mayaviパイプラインで新しいモジュールマネージャを起動します. --module-mgr からも可能です.
-n 新しいウィンドウ/シーンを作成します.この後に渡されるオプションは,新しく作成されたシーンに適用されます. --new-window からも利用できます.
-o グラフィカルユーザインタフェースを使用せずに,Mayaviをオフスクリーンモードで実行します.これは,邪魔なユーザインタフェースがポップアップ表示されることなく,バックグラウンドでイメージをオフスクリーン(アニメの台詞)でレンダリングする必要があるスクリプトに最も便利です.Mayaviスクリプト( -x 引数で実行する)は通常,このモードで正しく動作します. --off-screen からも入手できる.
-x script-file これは,ネームスペース内の指定されたスクリプトを実行します.ここでは,組み込みPythonインタプリタの場合と同様に, 'mayavi' という名前がMayaviのスクリプトインスタンスであることを保証します. --exec からも入手できます.
-t

Mayaviテストスイートを実行し,終了します.このように実行すると,TVTKとMayavi2の両方のユニットテストが実行されます.追加の引数が渡されると,テストランナーに渡されます.したがって,これは他のテストを実行するためにも使用できます.次に例を示します.

mayavi2 -t apptools.persistence

これは apptools.persistence パッケージ内部のテストだけを実行します.次のように,テストファイルを含むディレクトリを指定して実行することもできます.

mayavi2 -t relative_path_to/integrationtests/mayavi

Mayaviソースから統合テストを実行します. --test としても利用できます.

-s python-expression
 

最後に作成したオブジェクトに対してpython-expressionを実行します.たとえば,前のオブジェクトがモジュールであったとします.オブジェクトのカラーを設定してシーンを保存するには,次のようにします.

$ mayavi2 [...] -m Outline -s"actor.property.color = (1,0,0)" \
 -s "scene.save('test.png', size=(800, 800))"

式には引用符を使用してください.これは --set でも利用できます.

警告

-x--execexecfile を使うので,スクリプトが何かひどいことをすると危険です.同様に -s--setexec を使いますが,これも悪用されると危険です.

Mayaviの コマンドライン引数は,指定された順序で 順番に処理されることに注意してください.これにより,ユーザーは興味深いことができるようになります.

次に,コマンドライン引数の例をいくつか示します.

$ mayavi2 -d ParametricSurface -s "function='dini'" -m Surface \
  -s "module_manager.scalar_lut_manager.show_scalar_bar = True" \
  -s "scene.isometric_view()" -s "scene.save('snapshot.png')"

$ mayavi2 -d heart.vtk -m Axes -m Outline -m GridPlane \
  -m ContourGridPlane -m IsoSurface

$ mayavi2 -d fire_ug.vtu -m Axes -m Outline -m VectorCutPlane \
  -f MaskPoints -m Glyph

上記の例では, heart.vtkfire_ug.vtu です.VTKファイルは,ソースの examples/data ディレクトリにあります.プラットフォームによっては,コンピュータにインストールされることもあります.