PyQt5
OpenFOAM
vtk

PyQt5とvtkを使ってOpenFOAMの結果を可視化してみた その3(「座標軸」の実装編)


はじめに

以前に投稿した内容 ↓ をさらに拡張していきます.

PyQt5とvtkを使ってOpenFOAMの結果を可視化してみた その2(「ファイルを開く」の実装編)

今回はビュー上に座標軸を配置していきます.

完成イメージは下図になります.

プレゼンテーション1.png


環境

OS: windows10

OpenFOAM v4.0

python 3.6.4

pyqt5-5.9.2

vtk-8.0.0

numpy


ファイル構成

case/

 ├ ViewAxis.py (本プログラム)

 ├ open_file.png

 ├ quit.png

座標軸を作成するときは,vtkライブラリの次のクラスについて勉強する必要があります.

vtkAxesActor

vtkOrientationMarkerWidget

vtkAxesActorは,単純に座標軸に関するactorであり,

vtkOrientationMarkerWidgetを介してQVTKRenderWindowInteractor

に配置するようです.

おそらく,AxesActorから直接vtkRendererに配置することも可能だと

思われます.


座標軸の実装

それでは,座標軸を設定していきます.

前回のクラス「MyForm」に以下の関数を追加していきます.


ViewAxis.py

    def setupAxes(self):

axesActor = vtk.vtkAxesActor() #軸用のactorを用意

self.axesWidget = vtk.vtkOrientationMarkerWidget()
self.axesWidget.SetOrientationMarker(axesActor)
self.axesWidget.SetInteractor(self.widget)

self.axesWidget.EnabledOn() #有効化
self.axesWidget.InteractiveOn() #接続開始
self.widget.Render()


そして最後に,初期化時にこの関数を追加して終了です.


ViewAxis.py


def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)

self.reader = vtk.vtkOpenFOAMReader()
self.filter2 = vtk.vtkGeometryFilter()
self.mapper = vtk.vtkCompositePolyDataMapper2()
self.actor = vtk.vtkActor()

self.widget = QVTKRenderWindowInteractor(self)
self.widget.Initialize()
##背景色の設定
self.ren = vtk.vtkRenderer()
self.widget.GetRenderWindow().AddRenderer(self.ren)
self.widget.Start()
self.widget.show()

self.setCentralWidget(self.widget)
#UIのインスタンスを介してアイコンと実体(関数)をつなげる
self.ui.actionOpenFile.triggered.connect(self.openFile)
self.ui.actionResetFile.triggered.connect(self.resetFile)
self.setupInitView()
self.setupAxes() #<--------これ!



使い方

座標軸周りをドラッグすることで,移動も可能です.

プレゼンテーション2.png


まとめ

view画面に座標軸を追加しました.

次回こそ,メッシュ表示切替やview方向の切り替えあたりをまとめようと思います