【Maya】2022から使える新しい2D Overlaysをしらべる

この記事はMaya Advent Calendar 2021の16日目の記事です。

みなさん!Maya2022!つかってますか!!

僕はまだ使ってないんですが気づけば2022.3が出てました。はやい。

いくつか気になるところはあるんですが、ツール製作者としては2022.1から使えるようになった2D Overlaysがちょっと気になるのでしらべてみます。

公式ヘルプを読む

公式のヘルプはこちらです。

f:id:tm8r:20211214154931p:plain

はい。

それでも…それでも英語版なら…!

f:id:tm8r:20211214155232p:plain

はい。

仕方ないので頑張って独学でがんばっていきましょう。

ちなみに英語版は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)

結果は以下の通り。

f:id:tm8r:20211214155623p:plain

ここでは以下のものが使われています。

  • Overlay(ToolTip)
  • Overlay(SpeechBubble)
  • ProgressDialog
  • HIGDialog

f:id:tm8r:20211214184632p:plain

これらは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のインタラクティブチュートリアルでも使われています。

サンプルは以下。
f:id:tm8r:20211214190305p:plain

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アドカレ、果たして明日は誰か書いてくれるのか…来年は何人うまるのか…!
それでは!!

スポンサーリンク