ラベル 2016以降 の投稿を表示しています。 すべての投稿を表示
ラベル 2016以降 の投稿を表示しています。 すべての投稿を表示

2021年2月18日木曜日

addAttrコマンドの便利なフラグ

  「カプセル型のコントローラを作成してみる」で作ったようなリグの場合、複数の制御用コントローラがあるわけなのですが、アニメーションさせるとなると、関連したコントローラ全部にキーフレームを設定するときなどでかなり面倒に思うはずです。

  キーフレームの設定を忘れるノードも出そうなので、できれば1つのノードで集中管理したい。

  そんなことを実現してくれる機能が addAttrコマンドに存在します。

  最終的には、こんな感じのノードグラフになります。


2019年11月7日木曜日

ジョブを作成しなくても良かったのか

つい最近、ウィンドウを閉じたときの状態をプリファレンスに保存するとかで、ウィンドウを scriptJob で監視していましたが window コマンドのヘルプをよく読んでみると
-closeCommand(-cc) なるフラグが存在していることに気が付きました。

ウィンドウが閉じられたときにスクリプトを実行してくれるらしい。

2018年12月3日月曜日

リストをフィルタリングしたい

自作のツールを作るとき、リストを表示するレイアウトには treeView を良く利用しているのですが、大量にアイテムが並んでいたりすると項目を選ぶのに苦労します。
そんなこんなで、Outliner に付いている文字を入力したら表示物を絞れる機能を付けたいなぁと思ってしまうのでした。

Outliner に付いているってのは、こんなヤツです。


2018年8月28日火曜日

optionMenuとoptionMenuGrpの違い

UI作成にQtが対応した頃から、ウィンドウコントロールの~Sliderみたいなコマンドに、~SliderGrpみたいな感じで末尾にGrpの付いたものが追加されました。
ラベルと入力フィールドが一気に作成できて、更に各幅なんかも微調整できたりして、なかなか便利なのです。

そんな~Grpコマンドの中で、optionMenuGrpの使い方にちょっとつまづいたのでメモ。

2017年7月21日金曜日

MELの保存先を調べる

.melファイルが保存されているパスを調べたい場合には、whatIs コマンドを使うと良いようです。
humanIk関係のスクリプトなんかで whatIs を使いアイコンの保存されているフォルダを探していたりしています。

{
    string $whatIs=`whatIs "MEL command"`;
    string $path=`substitute "Mel procedure found in: " $whatIs ""`;
    $path=dirname( $path );
}

こんな感じ。

whatIs コマンドの注意点としては、maya起動後に1度も実行していないMELコマンドの場合、戻り値の"Mel procedure found in: " 部分が変化するので要注意。
1度も実行していない場合、"Script found in: " となります。

この辺を踏まえてスクリプトにすると、
{
    string $script="hogehoge";/* 調べたいコマンドへ変更 */
    
    string $whatIs=`whatIs $script`;
    // 不明の場合停止
    if("Unknown"==$whatIs) error -n "Unknown";
    
    // 不要部分の削除
    string $path;
    $path=`substitute "Script found in: " $whatIs ""`;
    $path=`substitute "Mel procedure found in: " $path ""`;
    
    $path=dirname($path);
    print $path;
    
}
こんな感じになるでしょうかね。

----------
最新記事の方が楽かも知れません。

2017年6月12日月曜日

ノードを作成する時のTips

createNodeコマンドで作成されたノードは、nodeGraphEditorInfoの削除で一緒に削除されてしまいますが、GUIを使った場合は無事。
裏でmayaが何かしている訳なのです。

これを確認するにはマテリアルを作ってみるのが手っ取り早い。

・HyperShadeのメニューから Create > Materials > Phong
・コマンドラインから createNode "phong"

と、2つの手段で phongマテリアルを追加します。

すると、HyperShadeで変な事が起きます。

createNodeで作成した「phong3」がHyperShadeに表示されません。
この辺に秘密がありそうです。

NodeEditorで接続を見てみます。

メニューから作成された「phong2」には、いろいろ繋がっています。
この中からHyperShadeに関連するノードを調べるために、初期ノードの「phong1」も追加してみます。


「defaultShaderList1」と言うのが怪しそうですね。


「phong2」にならって「phong3」も接続してみます。


無事、HyperShadeに「phong3」が表示されました。
めでたし、めでたし。
とはいかず、createNodeを使う場合、ココまでしないといけない訳ですね。

mayaのメニューではこの一連の工程を、shadingNodeコマンドで行っているようです。
ただ、shadingNodeコマンドには幾つかオプションがあって、作るノードとオプションが合致していないとおかしな事が起こるわけです。

shadingNode -asUtility "phong"

とコマンドラインで実行すると、HypherShadeにはこんな感じでUtiliesタブに登録されてしまいます。


2014とかでは、気にせずcreateNodeを使用してマテリアルなんかを作成していましたが、nodeGraphEditorInfoが出来たせいで面倒くさくなったみたいです。
迷惑なノードだ。

2017年6月1日木曜日

nodeGraphEditorInfoノード。その2

nodeGraphEditorInfoノードを削除したい場合、

{
    string $NGEIs[]=`ls -typ "nodeGraphEditorInfo"`;
    delete $NGEIs;

}


みたいにすると思います。
普通に Node Editor や HyperShade の GUI からノードを作成しているぶんには別段気にすることはないのですが、MELで createNode を使用した場合、nodeGraphEditorInfo ノードの扱いには注意が必要です。


たとえば、

createNode "condition";

で condition ノードを幾つか作成します。
続いて

createNode "locator";

を実行して コレも Node Editor へ表示させます。

そしたら condition ノードの一つと locator の transform ノードを適当に接続します。
こんな感じで。


output側に nodeGraphEditorInfo が接続されているので、選択して削除します。
すると、locator に接続されていない condition ノードが道連れで削除されてしまいました。


utility ノードは、何かに接続されていないとふとした切っ掛けで削除されてしまうようです。

nodeGraphEditorInfoに関して言えば、input側を disconnectAttr してから削除するべきでしょう。

-------------------------------------------------------
回避方法はこちら

2017年3月30日木曜日

warningとerrorにオプションが新設されたみたい

なんか、warningerror に新しいオプションが追加されたようです。

まずは通常の動作。

上のように、スクリプトエディタの History でエラー時ライン番号を表示する設定をしている場合に、下のスクリプトを実行すると、

global proc assert()
{
    warning "warning:hogehoge";
    error "error:hogehoge";
    print "hogehoge";
}




こんな風に、スクリプトのパスと行番号に続いてメッセージが表示されます。

で、このスクリプトパスと行番号を出さないようにする為に、今まではひと手間かけていました。

こんな感じ。
global proc assert2()
{
    int $buf=`commandEcho -q -ln`;
    commandEcho -ln off;
    
    warning "warning:hogehoge";
    catch(`error "error:hogehoge"`);
    
    commandEcho -ln $buf;
    print "hogehoge";
    
}



commandEcho というのが Line number in errors のこと。
3行目でバッファリングしておいて一旦オフにします。
error コマンドでスクリプトが停止してしまわないように catch も使用しています。
コレを実行すると Line number in errors にチェックが入っていても、スクリプトパスと行番号が表示されなくなります。

catch のおかげで print コマンドも実行されていますね。
ま、意外と面倒です。

で、warningerror に新しく追加されたオプション。
-noContext(-n) 警告メッセージにコンテキスト情報を出さないようにできるらしい。
これを使ってみます。

global proc assert3()
{
    warning -noContext "warning:hogehoge";
    error -noContext "error:hogehoge";
    print "hogehoge";
    
}



その結果、

commandEcho の操作をしなくても行番号が表示されなくなりました!
さすがに error コマンドはスクリプトが止まってしまうので catch は使用しないと駄目ですが、便利かも。



2017年2月20日月曜日

mentalray削除

晴れて余所者としての公認をもらったmentalrayですが、まだまだ2017の普及率は低いらしく、知ってか知らずかmaya2016出身でmentalrayのロードを要求してくるファイルが多い感じです。

無料で付いていた時からmentalrayインストールしない派なので、Script Editorがwarningで汚くなるのがもうね、

mentalray nodeらはクソじゃ
撫で切りぞ
根切りぞ
mentalray nodeは、みなコろシじゃ


そんな感じで、mentalrayをシーンから排除するスクリプトを考えます。
というか、シーンを読み込んだ時のインストールされていない有償プラグインなんかの「不明なノード」のエラーを消すスクリプトですね。

一応、maya2014の時にも作ろうと挑戦したのですが、 そもそも不明なプラグインなので削除するべきノードタイプが拾えないという事で断念したのでした。
しかし、maya2016からなのか、そういうノードタイプを取得するためのコマンドが追加されたようなのでリベンジです。


使用するコマンドは、
unknownPlugin
unknownNode
もう既に、これで勝つる!感がハンパ無いですね。


今回はmentalrayを対象にしているので、Mayatomrを調べます。

{
    string $mr="Mayatomr";
    
    string $types[]=`unknownPlugin -q -nt $mr`;
    
    string $unknowns[]=`ls -typ "unknown"`;
    for($unknown in $unknowns)
    {
        if(`objExists $unknown`)
        {
            string $type=`unknownNode -q -rcn $unknown`;
            if(`stringArrayCount $type $types`) delete $unknown;
            
        }
        
    }
    
    unknownPlugin -r $mr;
    
}


6行目の ls では、関係ない unknown ノードもリスト化してしまうので、7行目から Mayatomr のノードである事を確認します。
9行目でノードの存在確認しているのは、delete すると関連しているDGノードも削除される場合があるので、保険として。
オーバーキルしないのが武士道。
※単に存在しないノードを消そうとするとerrorで止まるから。

最後、18行目でwarningの元凶、Mayatomr の requires を除去します。
unknownPlugin -r を実行すると requires を除去できるので、stereoCameraとか寝ボケて作ったようなのも気軽に削除できます。

ノードにロックをかけているTurtleみたいな変態プラグインも有るので、lockNode を組み込むのも良いかもしれません。
ためしにlockNodeを追加してから、Turtleを削除対象にしてスクリプトは知らせてみたけれど、上手くいったりいかなかったり不安定。
LTに由来するのか、処理の仕方がマズいのか・・・?

まだまだ改善の必要ありです。

----
これを改善したスクリプトはコチラです。


2016年4月21日木曜日

frameLayoutのオプション

frameLayout を使おうと思いヘルプを見てみたら、-borderStyle がサポートされなくなったらしい。

フラットデザインが流行ってるからか?
それとも、4Kでは数ピクセルは認識できないからか?

ま、使えない物は仕方がない。


更新情報に削除項目は見つからなかったが、かわりに -backgroundShade というのが追加されたというのを発見。

さっそくサンプルコードを書いて実行してみたところ・・・
なにも変化がない。


何か他のフラグも必要なのかと思い、いろいろ試してみた結果、
-labelVisible true の時にしか反応しないらしい。


左が -bgs false、右が -bgs true

最初、-borderVisible true の状態で見ていたので変化が分からなかったらしい。
Photoshop で色情報を調べたところ #444444#494949 に変化していました。

微妙すぎて分からんわ!


ちなみに、4月7日に更新された Extension 3 には -highlightColor というのも追加され、
これの使い方が全く不明・・・。

Extension 3 もパッチだと思ってインストールしたら 2016.5 と別バージョンだったという罠。