3dsmax,MaxPlus,MaxScript,PySide,python,scriptみなさん初めましての方ははじめまして。part01を読んでくださった方はお久しぶりです。前回は3dsMAX(以下MAX)でPythonを扱うための基礎をメインに、ひたすらボックスを並べていましたね。(わーわーぱふぱふー)スタイリッシュな仕上がりで、いい感じではないかと!スマートフォンやiPhoneからも見やすくなったみたいです。記事の表示は3列まで表示できるようになったので情報が探しやすいですね。サムネイルも表示できるようになったので、視覚的にも優しいです。私はYoutubeなどでよく見かけるタイプのものを用意してみました。TALKをよろしくお願い致します。(ぁ、まだ終わりませんよ)はじめに唐突ですが、MAXScriptでUIを作ろうとすると結構たいへんですよね。ボタンなどの位置を手打ちしなければならなかったり、ウィンドウの大きさが変えられないので配置に気を使ったり...Maya人な私には、なかなか手強い相手だった記憶があります。2015になって実装された「PySide」を使ってみたいと思います。-*-この部分が原因で動作しなかったという方がいらっしゃいました。この記述はPythonファイルの文字コードをasciiからutf8に変更して日本語を取り扱えるようにする。前回紹介した方法でpythonファイルを実行すると以下のエラーが出てしまいます。0)このエラーについては以下の事がわかっています。・この記述をしてエラーが出てしまうのは、以下のようなケースです。python.ExecuteFileで実行したPythonファイルに記述されている場合。-*-“)のように直接実行した場合。・それ以外の場合は通常の扱いと変わりませんので、以下のようなケースではこの記述が無い場合エラーになってしまいます。-*-】が無いPythonファイルに日本語が含まれていた場合。-*-】が無いPythonファイルに日本語が含まれていた場合。・python.ExecuteFileで実行したPythonファイルとpython.Executeで実行するpython処理に、この記述がなくても日本語を取り扱えていることから、内部的に変更を行っている可能性が高いです。扱いが面倒なので日本語を使わないのが一番いいのかもしれません。混乱させてしまう情報を掲示してしまい、大変申し訳ありませんでした。今回の記事からは不要な場合は表記しないように致します。気を取り直して...ウィンドウを表示してみよう!早速ですが、PySideのウィンドウを表示してみましょう。QtGui.QWidget()window.show()こちらが実行結果です。実際に実行された方はわかると思いますが、このウィンドウ、MAXでなにか操作をしようとすると後ろに隠れてしまいます。私もPySideを勉強し始めた時はこの問題がなかなか解決できずに苦労しました...Mayaでツール開発をされている方ならご存知かと思いますが、このウィンドウはMAXのメインウィンドウと親子関係が作られていないためこのような現象が起こります。次は親子関係を作ってみましょう。調査を試みた所、MAXでは親のウィンドウが取得できないようでした。代案として、以下の方法で前面にUIを固定できます。QtGui.QWidget()window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)window.show()どうでしょう、後ろに隠れてしまう事はなくなったと思います。このウィンドウ、常に全面に出てしまうのです。別のアプリケーションでも関係なく...自己主張が強めですね。目的は達成(?)できました。main()ではさっそく実行してみて下さい。混乱させてしまう情報?と、少し待って下さい。した説明がしたくて一部の処理を抜いていました。この処理を追加してみて下さい。main()問題なくウィンドウが開いたままになっていると思います。この手法は公式のサンプルで紹介されていたものなのですが、Pythonのガベージコレクションという機能がメモリを開放してしまう対策として使われています。一般的には公式サンプルのようにQApplicationを作成するのですが、MAXで使用するとメインウィンドウに問題が出てくるので今回は使用しません。今回のように簡単なUIでしたら、main内の処理をグローバルに記述すればそんな面倒な事をしなくても良いのですが、importして使いたい時などに不便ですので記憶の片隅に置いておいて下さい。UIをカスタマイズしてみよう!ここまで来たら後は自由です。main()こちらが実行結果です。最低限UIとしての機能が盛り込めたと思います。これでまたBoxをひたすら作れるようになりました。おまけMAXScriptsのファイルダイアログが使いづらいと感じたので、そこだけPySideを使用する為に作ったスクリプトです。ポイント1実行にpython.Executeを使用しているのは、ちゃっかりMAXScriptとPythonで文字列のやり取りをするためです。2import文を使用する際は環境変数に登録されている場所に配置して使うか、sys.pathに追加してからimportして下さい。-*-】の記述は今回必要になります。'Cancel'こんな感じのダイアログが出ます。あとがきここまでお付き合い頂き、ありがとうございました。Part01の冒頭でも書いていましたが、DF_TalkではPySideについて取り上げている記事が他にもあります。こんなしょっぱいUIじゃ満足出来ないぜ!って方は、参考にしながら自分だけのUIを作ってみて下さい。2017では以下の機能が追加されたようです。嬉しいような寂しいような...他のDCCとの連携がもっと取りやすくなったのは良いことだと思います。公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。自己責任でご使用ください。(※必須):Website:Comment:コメントは承認制ですので、即時に反映されません。上に表示された文字を入力してください。月別アーカイブ2018年5月2017年1月2月3月4月6月10月11月2016年1月2月3月4月5月6月7月8月10月11月12月2015年1月2月3月4月5月6月7月8月9月10月11月12月2014年1月2月3月4月5月6月7月8月9月10月11月12月2013年1月2月3月4月5月6月7月8月9月10月11月12月2012年2月3月4月5月6月7月8月9月10月11月12月2011年1月2月3月4月5月6月7月8月9月10月11月12月2010年12月Footer。