この記事はMaya Advent Calendar 2021の16日目の記事です。
みなさん!Maya2022!つかってますか!!
僕はまだ使ってないんですが気づけば2022.3が出てました。はやい。
いくつか気になるところはあるんですが、ツール製作者としては2022.1から使えるようになった2D Overlaysがちょっと気になるのでしらべてみます。
公式ヘルプを読む
公式のヘルプはこちらです。
はい。
それでも…それでも英語版なら…!
はい。
仕方ないので頑張って独学でがんばっていきましょう。
ちなみに英語版は12/13の時点ではサンプルコードがいくつかありました。
貼り付けてもそのままだと動かないのもありましたけど。ウーン。
頑張って探す
調べた結果Windows版では該当のパッケージが以下にあることがわかりました。
C:\Program Files\Autodesk\Maya2022\Python37\Lib\site-packages\moverlay
どんな機能が提供されているかざっくりわかるモジュールが含まれているので、以下を実行してみます。
import moverlay as mo from moverlay import demo manager = mo.maya.overlayManager() demo.demoOverlays(manager)
結果は以下の通り。
ここでは以下のものが使われています。
- Overlay(ToolTip)
- Overlay(SpeechBubble)
- ProgressDialog
- HIGDialog
これらはPySide2を使用して作成されています。
Overlay
OverlayはToolTipとSpeechBubbleの2種類が使われていますが、これはかんたんに切り替えできるようになっています。
ToolTipの例は以下。
import moverlay as mo from moverlay.overlayDef import OverlayDef from moverlay.enums import Direction, RelTo, OverlayStyle manager = mo.maya.overlayManager() overlayDef = OverlayDef() overlayDef.attachment = RelTo.TopLeft overlayDef.style = OverlayStyle.ToolTip overlay = manager.createOverlay(overlayDef) overlay.setAsLabel("Top Left") overlay.show()
SpeechBubbleは以下。
import moverlay as mo from moverlay.overlayDef import OverlayDef from moverlay.enums import Direction, RelTo, OverlayStyle manager = mo.maya.overlayManager() overlayDef = OverlayDef() overlayDef.offset = QSize(48, 25) overlayDef.attachment = RelTo.TopLeft overlayDef.style = OverlayStyle.SpeechBubble overlay = manager.createOverlay(overlayDef) overlay.setAsLabel("Top Left") overlay.addSpeechBubbleTail(Direction.Bottom, 0.1) overlay.show()
styleを対象のEnumに変更し、addSpeechBubbleTailで吹き出しのしっぽを追加してます。
OverlayDefが見た目や位置を定義するクラスになるのですが、今回はオフセットも指定してるので左上から若干右下にずれて表示されます。
ちなみに以下のようにすると全overlay(というかmanagerが管理するmoverlay)が全て消えます。
manager.deleteAll()
逆に複数一気に作って、最後に全部開くのは以下のようにします。
manager.showAll()
ProgressDialog
ステップを持つダイアログです。
チュートリアルなどで使えそうですね。
というか実際Maya2022のインタラクティブチュートリアルでも使われています。
サンプルは以下。
import moverlay as mo from moverlay.higDropShadow import HIGDropShadow from PySide2.QtCore import QPoint _CONTENTS=[ "maya", "advent calender", "2021" ] def pressNext(dialog, index): print("Next was pressed",dialog.progressBar().currentStep()) dialog.progressBar().increment() dialog.setBodyText(_CONTENTS[dialog.progressBar().currentStep()-1]) def pressReset(dialog, index): dialog.progressBar().setCurrentStep(1) dialog.setBodyText(_CONTENTS[dialog.progressBar().currentStep()-1]) def pressClosed(dialog): manager.controller.deleteLater() manager = mo.maya.overlayManager() manager.controller = mo.progressDialog.ProgressDialog(manager.getMainWindow()) manager.controller.setTitle("Example Dialog") manager.controller.setBodyText(_CONTENTS[0]) manager.controller.setupButton(0, "Reset", pressReset) manager.controller.setupButton(1, "Next", pressNext) manager.controller.setCloseCallback(pressClosed) manager.controller.progressBar().resetSteps(1, 3) dropShadow = HIGDropShadow(manager.getMainWindow(), manager.controller.theDialog()) manager.controller.theDialog().resize(mo.utils.DPIScale(180), mo.utils.DPIScale(250)) manager.controller.theDialog().moveToScreenPos(QPoint(0, 0)) manager.controller.showAndRaise()
HIGDropShadowを除外すればドロップシャドウのないウィンドウになります。
HIGDialogはProgressDialogの基底クラスでもあります。
HIGは多分Human Interface Guidelinesの略です。多分。
AutodeskのデザインシステムがMayaにもきたってことでしょうか。
これは結構シンプルなステップ表現(青い部分)になってますが、ProgressStepperというクラスを使用すれば「Create Polygon Objects/s」という見出しのダイアログのようなものが実現できます。
おわり
ちょっとチュートリアルやヘルプ以外での活用方法がいまいち浮かんでないですが、自前で作るのはダルいものもあるので、2022を使用する場合は手段の一つとして覚えておいてもよさそうです。
最初に紹介したディレクトリにあるdemo.pyを起点に読んでみるのがよいかなと思います。
また、以下のディレクトリにあるコードも参考になります。
C:\Program Files\Autodesk\Maya2022\Python37\Lib\site-packages\maya\app\quickTour
今年は結構穴開きができてしまっているMayaアドカレ、果たして明日は誰か書いてくれるのか…来年は何人うまるのか…!
それでは!!