【Maya C++】 Maya Qtの始め方【Qt】

qt,c++,maya

今回はQtを使ってmaya pluginを作成するやり方を自分自身いろいろな方法を試してみたのですがなかなかうまくいかなかったり、うまくいったけどスマートじゃなかったりなど試行錯誤した結果 一番やりやすいなと思ったvisual studio 2015で完結できる方法を紹介したいと思います

作業環境

Software

visual studio2015
Qt 5.6.1
maya2019 update2

事前に必要なもの

Qt Package
Qt Visual Studio Tools
Qt Test Adapter Extension
visual studio2015にExtensions and updatesから上記をインストールしている必要があります

Qt5.6.1

Qtのarchiveから環境に合わせて必要なものをDLしてきます
今回はvs2015でしたのでDLしたものはqt-opensource-windows-x86-msvc2015_64-5.6.1-1.exeC:\qt\Qt5.6.1にインストールしました

Maya Developer Kit

バージョンに合わせ任意のpathに解凍します
今回はC:\mayaSDK\win\2019\に解凍しました

Set environment variable

以下の環境変数の設定を行ってください

variable namevariable value
DEVKIT_LOCATIONC:\mayaSDK\win\2019
QT561MSVC2015C:\qt\Qt5.6.1\5.6\msvc2015_64

Visual Studioのセットアップ

必要なデータがそろいましたのでprojectを作成していきましょう
ソリューションを作成する
Visual Studioを開き、Empty Projectを作成します

Solution Explorerで右クリックし、Propertiesを選択し、Configuration Managerから
Debug、Releaseともにplatformをx64に変更します

Projectのセットアップ

Configuration Properties>
General>
General\Target Extension: .mll
Project Defaults\Configuration Type: Dynamic Library(.dll)


VC++ Directories>
General\Include Directories: $(DEVKIT_LOCATION)\include
General\Library WinRT Directories:
$(DEVKIT_LOCATION)\lib
$(QT561MSVC2015)\lib
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64


Configuration Properties> C/C++>
General>
Additional Invlude Directories: $(DEVKIT_LOCATION)\include


Language>
Enable Run-time Type information: yes(/GR)


Preprocessor>
_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH;WIN32;NDEBUG;_WINDOWS;NT_PLUGIN;REQUIRE_IOSTREAM


Configuration Properties> Linker>
General>
$(DEVKIT_LOCATION)\lib
$(QT561MSVC2015)\lib
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64


必要なライブラリーを入れてください
全部入れる必要はないですが今回はめんどくさかったのですべて入れました
Input>
awxml2.lib
cg.lib
cgGL.lib
clew.lib
Foundation.lib
Image.lib
IMFbase.lib
MetaData.lib
OpenMaya.lib
OpenMayaAnim.lib
OpenMayaFX.lib
OpenMayaRender.lib
OpenMayaUI.lib
Qt5AxBase.lib
Qt5AxContainer.lib
Qt5AxServer.lib
Qt5CLucene.lib
Qt5Concurrent.lib
Qt5Core.lib
Qt5DBus.lib
Qt5Designer.lib
Qt5DesignerComponents.lib
Qt5Gui.lib
Qt5Help.lib
Qt5Location.lib
Qt5Multimedia.lib
Qt5MultimediaQuick_p.lib
Qt5MultimediaWidgets.lib
Qt5Network.lib
Qt5Nfc.lib
Qt5OpenGL.lib
Qt5OpenGLExtensions.lib
Qt5Positioning.lib
Qt5PrintSupport.lib
Qt5Qml.lib
Qt5Quick.lib
Qt5QuickParticles.lib
Qt5QuickTest.lib
Qt5QuickWidgets.lib
Qt5Script.lib
Qt5ScriptTools.lib
Qt5Sensors.lib
Qt5Sql.lib
Qt5Svg.lib
Qt5Test.lib
Qt5UiTools.lib
Qt5WebChannel.lib
Qt5WebEngine.lib
Qt5WebEngineCore.lib
Qt5WebEngineWidgets.lib
Qt5WebKit.lib
Qt5WebKitWidgets.lib
Qt5WebSockets.lib
Qt5WebView.lib
Qt5Widgets.lib
Qt5WinExtras.lib
Qt5Xml.lib
Qt5XmlPatterns.lib
qtmain.lib
tbb.lib
zlib.lib


Command Line>
Additional Options: /export:initializePlugin /export:uninitializePlugin

ソースファイルを用意する

プロジェクトの設定がおわったので以下のソースファイルを作成してください

Source Files>qtPlugin.cpp
Header Files>helixQtCmd.h

それぞれのコードはdevkitにありますので該当するデータをコピペしてください
Source Files>qtPlugin.cpp: ..\devkit\plug-ins\helixQtCmd.cpp
Header Files>helixQtCmd.h: ..\devkit\plug-ins\helixQtCmd.h
ファイル自体もコピーしても問題ないです

.proファイルを作成します

.proはQtプロジェクトのビルドに使われるプロジェクトファイルになっています
qtPlugin.proを作成し.h.cppと同じ場所に配置します
中身は以下のように記述します

| ------------ | ------------ |
| HEADERS | headerファイル |
| SOURCES | cppファイル |
| TARGET | ターゲットファイルの名前を指定。デフォルトでは、プロジェクトファイルのベース名が含まれています |

詳しくは公式サイトにいろいろまとまっています

.proを読み込む

Qt Vs Tools>Open Qt Project File(.pro)...から先ほど作成したqtPlugin.proを開きます

開き終わった後にBuildすると.mllが作成され、その.mllをmaya上で読み込みhelixQt;を実行するとwindowが表示されbuttonを押すとカーブが作成されるはずです

今回ここまでたどり着くのにいろいろな方に助けていもらいました
この記事が広く役に立つとうれしいです


参考
Maya 2017 devkit - Building Qt plug-ins instructions
Using Qt in Plug-ins