チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第86回:ウインドウ位置のリセット

2020.11.17

  • Maya
  • コラム
  • スクリプト・API
  • チュートリアル
  • 学生・初心者
ウインドウ位置のリセット

皆さんテレワーク、リモートワーク、自宅勤務、されていますか!?

ゲームや映像制作はデジタルな仕事ですから、もともとリモートワークに対応しやすいです。やろうと思えばできたのですが、なかなかきっかけが無く進んでいませんでした。が、今のご時世も相まって、かなりリモートワークが進んでいます。いや、もはやリモートの方が通常の働き方となってしまっている感じすらします。

私の所属しているコンサルティングの面々は、私を含めそもそもオフィスに行っておらず、世界中にバラけています。トウモロコシ畑の隣に住んでいたり(アメリカン!)、雪に埋もれていたり(カナディアン!)、ロックダウンされていたり(イングリッシュマン!)と、ところ変われば環境も変わるもので。
そんなこんなでずっと自宅勤務していますので、個人的にはあまり変わりがないこの頃です。(今年はMIDI機器を取りに一度オフィスに行ったっきりという。)

とはいえ日本の場合、現実的にはオフィスに行ったり自宅で仕事したり、両方の環境で仕事をすることも多いと思います。Mayaの操作系を一貫させるために、会社のマシンで作業した後に、Mayaのプリファレンスファイルを持ち帰って使うこともあるのではないでしょうか?

ところが会社では複数ディスプレイで作業していて、家では一画面という環境だと、困ったことが起きます。

「ウインドウがない!」

そう、ウインドウを二画面目に置きっぱなしにしていたがため、一画面では表示されないということもしばしば。

画面がない!

案外どうやって直すかわからず、プリファレンスをリセット、ということもあると思います。
そこで今回は「ウインドウ位置のリセット方法」をご紹介します!

ワークスペースのリセット

ワークスペースとして扱われているウインドウであれば、ワークスペースをリセットすることで位置をリセットできます。例えばハイパーシェードやスクリプトエディタなどはリセット可能です。

メニューから次を選ぶとリセットできます。
「Windows > Workspaces > Reset ○○ to Factory Default」

「Windows > Workspaces > Reset ○○ to Factory Default」

ただしワークスペースのリセットは、UIのレイアウト自体をリセットするため、ウインドウが非表示に戻ったりします。たくさんウインドウを出して作業している場合は、また出しなおさないといけません。

スクリプトでリセット

スクリプトエディタが見えているなら、次のスクリプトを実行することで大抵のウインドウを左上に持ってくることが出来ます。

ポイントとしては、lsUIコマンドでしょうか。
lsUIコマンドを使うとUIのリストを取ることが出来ます。
かなり大雑把ですが、コントロールすべてのフルパスから親の名前を見つけて、親がウインドウであれば位置を0, 0の場所に持ってきます。

$controls = `lsUI -controls`;
for ( $ctrl in $controls ){
    string $fullName = `control -q -fullPathName $ctrl`;
    string $buffer[];
    tokenize $fullName "|" $buffer;
    if ( size($buffer) >= 2 ){
        string $win = $buffer[0];
        if ( `window -q -ex $win`){
            if ( $win == "MayaWindow"){ continue; } // メインウインドウは飛ばす。
            if ( $win == "scriptEditorPanel1Window" ){ continue; }// これを実行しているということは、スクリプトエディタは無事なはず。

            $topLeft = `window -q -topLeftCorner $win`;
            if ( $topLeft[0] == 0 && $topLeft[1] == 0 ) { continue; } // 既にリセット済み。

            window -e -topLeftCorner 0 0 $win;
            print ( "Reset Window Position: " + $win + "\n");
        }
    }
}

実行すると次のように、すべて左上に寄せられます。(ただしメインウインドウとスクリプトエディタの位置は変えません。)

すべて左上に寄せられます。

この方法は、既に存在しているUIに有効です。
まだ作成されていないUIには効かないため、完全にすべてのUIでリセットするには、プリファレンスのファイルごとリセットします。

プリファレンスのファイルごとリセット

プリファレンスを丸ごと削除して、新しく作り直せばウインドウの位置がリセットされます。
でもそれだとホットキーなどもリセットされてしまいます。

幸いウインドウのプリファレンスは独立していますので、ウインドウのプリファレンスだけを削除して、位置を完全にリセットできます!

具体的には、プリファレンスのフォルダにある windowPrefs.melworkspace フォルダを削除して起動するだけです。

それぞれ次のフォルダ内にあります。
(英語UI) C:\Users\<ユーザ名>\Documents\maya\20##\prefs
(日本語UI)C:\Users\<ユーザ名>\Documents\maya\20##\ja_JP\prefs

ウインドウのプリファレンスのありか

windowPrefs.mel の中身はこんな感じになっています。
windowPrefコマンドで、対象のウインドウの位置をメモリに設定しています。

windowPrefs.mel の中身

windowPrefs.melには、一般的なウインドウの位置や大きさが記録されています。(自作のウインドウの位置と大きさもここに保存されます。)
ウインドウをピンポイントでリセットしたい場合は、対象のウインドウのコマンドを削除します。

workspaceフォルダには、ワークスペースとして管理されているUIの設定が記録されます。
Maya起動時には、windowPrefs.mel に書かれているウインドウの設定よりも優先して、workspaceフォルダの設定が使われます。そのため windowPrefs.mel と workspace フォルダの両方を削除しておくと確実です。

ちなみに、windowコマンドでウインドウを作った後、-wやら-hやら効かないことはないでしょうか。ウインドウを作ると設定がメモリに載ります。このメモリにはwindowPrefコマンドでアクセスできます(ウインドウと同名でメモリが用意されます)。
ウインドウを作る前にwindowPrefを削除すると、windowコマンドの-wや-hがしっかり効くようになります。例えば次の様に実行します。

if ( `windowPref -q -ex "testUI"` ){
    windowPref -r "testUI";
}
window -w 100 -h 100 "testUI";
showWindow;

実行するとウインドウが表示されます。
普通はサイズや位置を変えると、次回起動する時も最後の位置や大きさで出てきます。
上のコードであれば毎回メモリ上の設定をリセットしますので、毎回同じ大きさで作られます。(位置もリセットされますが…)

まとめ

Mayaはウインドウの位置などプリファレンスがわかりやすい形で保存されていますので、こんな風に簡単にリセットすることが出来ます。

プリファレンスフォルダ内には、他にも様々な設定が保存されていますので、開いて見てみると面白いです。

プリファレンスを複製しておけば、中身を変えても後で戻せますので、色々といじってみて動作を変えてみてください。何がどこで使われているかわかるようになると、Mayaがおかしくなった時に原因究明しやすくなりますし、復旧も速く行えるようになりますよ。

Maya Learning Channel
製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。