[3dsmax][script]Python+MaxScriptのツール開発入門 その0

本チュートリアルの概要

3dsmaxのPython環境もこなれてきて、どっぷりとPythonに浸かったツール開発もできるようになってきました。Max2018でGUIがPySide2に切り替わり、2017以前との並行開発に一時的に混乱したりもしましたが、それも落ち着いてきた頃でしょう。

かなり柔軟性が高く、開発効率も、うまく行けば実行効率も良いPython環境ですが、MaxScriptから来る人には敷居が高く見えるということもあるのか、いまいち浸透しきっていないように思います。

そこで、本稿では3dsmaxにおけるPythonの活用を紹介するという趣旨で、いくつかの段階を追って簡単なツールを作ってみる、ということを試みてみたいと思います。

以下のような流れを想定しています。(あくまで現時点では)

  1. MaxScriptで動作部分を作る
  2. PySide(Max2017)でUIを作る(PySideのUIを持つPythonツールの作成を紹介)
  3. PythonスクリプトからMaxScriptの実行ロジックを使用する
  4. PySide2(Max2018)にコンバートする
  5. 番外編:ここまでで完成したものの実行部分もPythonで書き直す

さあ、どうなりますでしょうか。不定期連載になると思いますが、気長にお付き合いいただければと思います。

次:Python+MaxScriptのツール開発入門 その1

 

UIとロジックを分離する

最近、ツールの設計ということに目が向くようになってきました。Pythonが主流になったことによると思います。

Pythonでのツール開発の場合、やはりUIとロジックは厳格に分離した方が良いです。なぜかと言えば、UIはQtDesignerを使って感覚的に作り、ロジックはエディタでゴリゴリと書きたいからです。途中でUIの仕様が変更になったりした際に、UIを書いているPythonファイルに動作のロジックも書いてしまうと都度書きなおしになるため、QtDesignerでのUIカスタマイズができなくなってしまいます。

そのため、UIのクラスを継承してツールのクラスを作る、というようなことから始めました。

次に、汎用性のあるツールの開発で、全く同じ機能を持つツールを3dsmaxとMotionbuilderの両方で使いたい、という要望が出てきました。当然の要望と言えます。

そこで、UIは完全に共通にし、それを継承したクラスとして共通の処理をもつ抽象クラスを作り、さらにそれを継承して3dsmax用とMotionbuilder用を作る、というような構造にしました。これが非常に便利です。

そんなもの当たり前だという話なんですが、これまで「継承」という発想のないMaxScriptが開発の主軸だったため、こういうオブジェクト指向ならではの効率化にまったく目が向いていなかったのです。

Pythonでこれをやりだしてから、MaxScriptオンリーでツールを書く際にもUIとロジックの分離ということを意識するようにしました。

“UIとロジックを分離する” の続きを読む