Mac版Maya:Pysideで作成したウィンドウがメインウィンドウの後ろに隠れてしまう

Mac版のMayaではPySideで作成したウィンドウは「MayaQWidgetBaseMixin」をミックスインしていても、フォーカスが外れるとメインウィンドウの後ろに送られてしまいます。

self.setWindowFlags(Qt.Window | Qt. WindowStaysOnTopHint)

self.setWindowFlags(Qt.Tool)

などで、常に前面にすることも可能ですが、Melで作成されたウィンドウとのフォーカス処理がうまく機能しません。

さんざん探し回った結果ですが、ウィンドウへobjectNameを設定し、ウィンドウ設定の保存を許可するだけで良いみたいです。先日の例でいうと、以下の様に2行追記です。

class HtSetOutlinerColorDialog(MayaQWidgetBaseMixin,QWidget):
 def __init__(self, *args, **kwargs):
  super(HtSetOutlinerColorDialog, self).__init__(*args, **kwargs)
  self.closeOtherInstance()
  self.setAttribute(Qt.WA_DeleteOnClose, True)
  self.setObjectName("HtSetOutlinerColorDialog") #<- objectNameを設定
  self.setProperty("saveWindowPref", True) #<- ウィンドウ設定の保存を許可
  self.initUI()

objectNameを設定しないと「MayaQWidgetBaseMixin」によって「クラス名_UUID」というobjectNameが自動的に設定され、その名前が「windowPrefs.mel」へ保存されてしまいます。モジュールをインポートするたびにUUIDは変化するため、ゴミデータが「windowPrefs.mel」へ溜まることになりますので必ず設定します。

Windows版で開発していてると気づきませんが一般に配布するには気をつける必要ありですね。

問題の解決には「http://python_inside_maya.narkive.com/LwPxvddq/maya-python-qt-tool」を参考にしました。ちなみに行き着く為の検索ワードは「mac maya pyside window behind maya main window」です。


Mac OS SierraでMayaを英語で起動する

Macはバージョンが上がるたびに環境変数の設定方法が変更されますね、以前はlaunchd.confあたりで設定したような気がしますが、Mac OS Sierraではlaunchctlを使用して環境変数を読み込むようです。

で本題、Mayaを英語起動するための設定です。

「~/Library/LaunchAgents/」の中にテキストファイル「setenv.MAYA_UI_LANGUAGE.plist」を作成します。内容は以下になります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
  <key>Label</key>
  <string>setenv.MAYA_UI_LANGUAGE</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>setenv</string>
    <string>MAYA_UI_LANGUAGE</string>
    <string>en_US</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>;

読み込みは、

launchctl load ~/Library/LaunchAgents/setenv.MAYA_UI_LANGUAGE.plist

変更があった場合は一度アンロードしてから再度ロードします。

launchctl unload ~/Library/LaunchAgents/setenv.MAYA_UI_LANGUAGE.plist
launchctl load ~/Library/LaunchAgents/setenv.MAYA_UI_LANGUAGE.plist

ひとまずこれでMayaは英語で起動するはずです。

他にも英語で起動する方法として

#!/bin/bash -f
export MAYA_UI_LANGUAGE="en_US"
/Applications/Autodesk/maya2017/Maya.app/Contents/bin/maya

を実行することでも可能です。


Maya PySide.QWidgetへ標準UIを追加する

PySideでのUI作成はわかりやすくていいんですが、スライダと一体になったMayaのUIなども捨てがたく両方とも使いたい場合。

例としてアウトライナでの表示色を設定するダイアログです。下段のボタン3つはQPushButtonです。上段はColorSliderGrpでMayaの標準のUIです。PySideとMaya標準UIが混在しています。ベースはQWidgetを使って作成&レイアウトされたウィンドウになります。

厳密には両方同じQtなので「混在」ではありませんが、それはさておき、、、 続きを読む “Maya PySide.QWidgetへ標準UIを追加する”


Random space filling

空間を充填するつーのはすごく難しい問題らしい。

球体で埋める場合は「アポロニウスのギャスケット」というものを使えば出来そうですけど、それ以外はランダムに位置を決めてみて、重なってれば「偽」、はまれば「真」と、繰り返していくしかなさそうです。

で、これが、

続きを読む “Random space filling”


Import molecular structure to Maya

ひっさしぶりのCGの記事ですよ。誰が興味あんねんってな内容ですよ!

お仕事で、ある高分子をモデリングする必要があって、Avogadroと言うフリーソフトを見つけました。既知の分子構造はもちろん呼び出せますし、自分で分子をモデリングすることも出来、非常に興味深いのですが、残念なことに3Dの書き出しがPOV-Rayフォーマットしかありません。

つーことでpythonのお勉強を兼ねて読み込みスクリプトを書いてみました。

Tryptophan_trim

Avogadroの説明は省きます、分子は「File/Import」から呼び出せます。「File/Export/POV-ray…」で書き出したら次のスクリプトを実行してpovファイルを読み込むだけです。メッシュデータには対応していません、ファイル内のcylinderとsphereの情報を読み取るだけです。Maya2013 x64 Extension2で動作確認してます。
続きを読む “Import molecular structure to Maya”