2017年6月29日木曜日

16進数を10進数に変換する。

前回作成したDEC2HEX.melの逆、16進数を10進数に変換するMELを作成してみました。
HEX2DEC.mel

まず、16進数と言うことで a~f までのアルファベットが大文字か小文字かと言う問題がありますが、スクリプト内で
$hex=tolower( $hex );

とする事で小文字のみにして対処しています。


次に16進数とかは接頭辞に「0x」を付けて表すのが習わしだったりしますが、これも付いていたり付いていなかったりするのを解消するため、
$hex=substitute( "0x",$hex,"" );

で計算前に除去。「0x」が無かった場合はスルーなので問題ないはず。

あとは g~z が紛れ込んでいた場合なんですが、何も対策していない・・・。
なにかエラー処理を入れておくべきなのでしょうが、ここは変な文字列が来ないことを祈るしかない。


------

pythonコマンドを使用することで簡単に処理する事ができます。
  mayaLTでPythonを実行する


2017年6月26日月曜日

10進数を16進数に変換する

10進数を16進数にしたい場合、MELでは計算しないと駄目なんですよねぇ。
まぁ、普通の人には全く不要なんでしょうけど。

作成してみました。
NUM2HEX.mel

一応、それらしい数値はでてくるな。
こうなると、16進数から10進数にするMELも欲しいところ。
あとは、2進数とかね。
HEX2NUM,BIN2HEX,HEX2BIN,NUM2BIN,BIN2NUMあたりか。


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 してから削除するべきでしょう。

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