dynamicsoar's log

主に研究関係のメモ

mac (w/ Python 3 & PyQt5) で ocXgag

Introduction

鳥人間な制御屋さんが公開してくれた ocXgag という翼型の調整ソフトがちょっと面白そうだった:

が、Windows にしか対応してないとのことだったので mac で使えないかとやってみた。ただ mac 固有の問題というよりは PyQt のバージョン違いの問題なのかも。Qt に触れるのが初めてなのでよくわからない。いずれにせよ、結論としては、コードを少しいじって Xfoil をインストールしたら動くようになった。

なお起動方法は単純に、コマンドライン(自分は iTerm 2)でスクリプトのあるディレクトリまで移動し、

$ python ocXgag.py

とするだけ。

検証環境

Methods & Results

スクリプトの書き換え

PyQt のバージョンがスクリプトに書かれている 4 でなく 5 であることが原因で、書き換えが必要になった。したがって、ocXgag.py をエディタで開いて、以下のことをした。

  • 冒頭付近、from PyQt4 import QtGui, QtCore を from PyQt5 import QtGui, QtCore, QtWidgets に差し替え
  • backend_qt4agg を backend_qt5agg へ置換
  • QtGui.QFont() 以外の QtGui という文字列を全て QtWidgets という文字列へ置換
  • GetFoilName の self.foilname = というところを、self.foilname, _ = に差し替え。これを調べるのにだいぶ時間がかかった*1参考

以上で、アプリの起動および翼型データの読み込みまではできるようになった。

Xfoil のインストールと PATH の設定

このあとは Xfoil が必要になるので、Xfoil4Mac をインストールした。このとき XQuartz が必要と言われたので、それも入れた。あとはコマンドラインから xfoil を開けるように、パスを通す。具体的には、

$ PATH=$PATH:/Applications/Xfoil.app/Contents/Resources/

とした。確認は

$ echo $PATH

で。以上で使えるようになった。

*1:当初、Open Foil ボタンを押しても無反応だったので print() デバッグをしたところ、 GetFoilName の self.foilname に翼型ファイルのパスだけでなく、拡張子指定用のフィルタ部分もなぜかくっついてきていた。試しに GetFoilChordfromFile の foilchord = numpy.loadtxt(self.foilname,skiprows=1) の self.foilname というところに、翼型ファイルの絶対パスを直接書き込むと load はできた。しかし原因はわかっても解決策がわからず、しばらくの間ググりまくった。