Edited at

汎用流体解析ソフト「F〇uent」ライクなスケールバーをvtkに表示してみた


はじめに

汎用流体解析ソフト「F〇uent」には画面の中央下辺りにスケールバーがあり,メッシュやジオメトリの大まかなサイズを計測することができます.

今回は,vtk上でこのスケールバーを再現したいと思います.

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

図1.jpg

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

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


環境

OS: windows10

OpenFOAM v4.0

python 3.6.4

pyqt5-5.9.2

vtk-8.0.0

numpy


ファイル構成

case/

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

 ├ open_file.png

 ├ quit.png

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

vtkLegendScaleActor

詳しくは,リファレンスを参考にしてください.


スケールバーの実装

それでは,スケールバーを設定していきます.

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


ScaleBar.py


def setupScale(self):
legendScaleActor = vtk.vtkLegendScaleActor()
legendScaleActor.AllAxesOff()
self.ren.AddActor(legendScaleActor) #レンダーにアクターを配置

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


ScaleBar.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.setupScale() #<--------これ!



使い方

モデルを回転・拡大することで,サイズを測ることができます.

今回の例には.OpenFOAMのチュートリアルにある,pitzDailyを用いています.

https://github.com/OpenFOAM/OpenFOAM-6/tree/master/tutorials/incompressible/simpleFoam/pitzDaily



image.png

実際のサイズを確認してみましょう.

pitzDaily/system/blockMeshDictを確認すると..

image.png

まあ,だいぶズレてますね( ´∀` )

おおよその確認なので,過度な期待は禁物です.


まとめ

view画面にスケールバーを追加しました.

最近vtkに関する記事が増えてて嬉しいです.

もっと盛り上げていきたいですね.