2015年12月14日月曜日

MELのファイル名を考察

MELは基本的に、ファイル名と同じ名称のグローパルプロシージャが起動時に登録されてコマンドとして実行できるようになっている。

なので、公式のスクリプトとプロシージャ名が重複していると誤作動するため、自作のスクリプトには、イニシャルやプロジェクト名なんかを HG_hogeHoge.mel みたいな感じで先頭につけて作ったりすることが多い。

しかし、アンダーバーで区切るのはスクリプト作っていて文面的になんか気持ち悪い。
タイピングのリズムとか。
見た目のバランスとか。

単にアンダーバーを省くのも芸が無いし、イニシャルだと子音が入っていてカッコ悪い。

余り長い接頭辞でもうざいし。


などとあれこれ考えていたところ、名前の方の子音を省いて見ようと思い立った。

ただjavaスクリプトに同じ関数あるからなぁ・・・。
と思いつつtryを使っていくか。

2015年11月30日月曜日

uiConfigurationScriptNodeを作らせない

ぐぐたすから探し出すのが大変なのでブログへ再投稿。

global int $gUseSaveScenePanelConfig;
global int $gUseScenePanelConfig;
if( $gUseSaveScenePanelConfig ) $gUseSaveScenePanelConfig=0;
if( $gUseScenePanelConfig ) $gUseScenePanelConfig=0;


起動時に実行するようなスクリプトへ記入しておく。


uiConfigurationScriptNodeは読んで字の如く、mayaのUIを復元する為のスクリプトノード。
昔はそうでもなかったが、バージョン番号が年号になってからシーンファイル内における割合が極端に多くなったような気がする。
メインウィンドウだけの状態でも100KBくらいは行くんじゃないだろうか・・・。
しかもmayaBinaryで保存してもASCIIのままなので圧縮が掛からないという。

カスタムレイアウトなんか作ったりした日にゃ目も当てられない。

なぜシーンファイルに入れるのか謎なノード。


ちなみにドキュメントにも
ヒント:
リファレンス ファイルとして使用するオブジェクト/サブシーンを作成する場合は、このオプションを無効にしてください。既定では、Maya は開かれたすべてのエディタについてのあらゆる情報、すべてのシーン ファイル(.ma/.mb)の場所、サイズ、ウィンドウ固有のオプションなどを記憶しています。これは、uiConfigurationScriptNode という名前のスクリプト ノードにアトリビュートとして保存され、ノードの文字列型アトリビュートに追加された MEL コードとして表されます。
とあるし、作成仕様に作らないよう注意書きしても無視するしな。

素人さんはもとより職種によっては中級者くらいな人でも、平気でuiConfigurationScriptNodeの入ったsceneファイルを納品してくるのは、なんだかなぁ~。


---------------------
このノードを無効化するには、こちらを参考にしてみてください。

2015年11月17日火曜日

2つの画像を比較してみる【改】

前回、imconvert.exeを使って画像の差を数値化してみましたが、どうも、mayaのバージョンによってimconvert.exeの方にも差があるらしく希望の値を取得できないことが発覚。

しかもTruecolorだと、meanの値が使っている色によって偏ってしまうことも判明。

という事で、-compose differenceした画像をグレースケールに変換してから-identify -verboseを取得するようにしたらどうかと思い修正。

@echo off
title %~n0

set WORK_AREA=%~dp0
set MAYA_BIN=C:\Program Files\Autodesk\MayaLT2016\bin\


:: 比較する画像
set IMG_A=%1
set IMG_B=%2
:: 存在確認
if ""=="%IMG_A%" echo IMG_A is blank. & pause & exit /b
if ""=="%IMG_B%" echo IMG_B is blank. & pause & exit /b
if not exist "%IMG_A%" echo %IMG_A% not found. & pause & exit /b
if not exist "%IMG_B%" echo %IMG_B% not found. & pause & exit /b


:: imconvertの作業エリア作成
set IMCNV_TMP=%WORK_AREA%_tmp
if not exist "%IMCNV_TMP%" md "%IMCNV_TMP%"

:: 差分画像のファイル名
set OUT_IMG=%IMCNV_TMP%\out.png
:: ログファイル名
set VRBS_FILE=%IMCNV_TMP%\verbose
set MEAN_FILE=%IMCNV_TMP%\mean


:: imconvert実行
"%MAYA_BIN%imconvert.exe" -composite -compose difference "%IMG_A%" "%IMG_B%" "%OUT_IMG%"
"%MAYA_BIN%imconvert.exe" -depth 8 -type Grayscale "%OUT_IMG%" "%OUT_IMG%"
"%MAYA_BIN%imconvert.exe" -identify -verbose "%OUT_IMG%" "%OUT_IMG%">%VRBS_FILE%


:: 結果解析
find "mean:" %VRBS_FILE% | find "mean:">%MEAN_FILE%
set RESULT_MEAN=
for /F "tokens=1-3" %%A in (%MEAN_FILE%) do set RESULT_MEAN=%%B


:: 結果表示
echo %RESULT_MEAN%
pause



前のよりもソレっぽい値が出てきた!

2015年11月15日日曜日

2つの画像を比較してみる※mayaをインストールした人用

とある目的で、2つの画像を比較し、違いがどれくらいなのかを数値で表せられないかとネットで調べていたところ、ImageMagickで数値化できそうなことを発見。

しかしツールを新規にインストールするのは美学に反するので、今ある環境でどうにかします。


mayaをインストールするとmayaのbinフォルダ内に幾つかの.exeファイルを見つけることができます。
その中でimconvert.exeというのが、実はImageMagickであるというのは数年前から知っていたので、これを使います。

ただ、本家よりもかなり機能や使い方が変更されているのでなかなか難航。
imconvert.exe -hと本家のリファレンスを見比べつつ、必要なオプションを割り出していきます。


本家のほうには、
compare -metric PSNR

とすることで数値化できるっぽいのですがimconvertの方には見つからず・・・。
似たことができないかとimconvertのヘルプを読んでいると、-identify -verboseを使えば出来そうな予感。

実際、ログを見てみると欲しい情報のmean: ~を発見。
ただ、これだと2つの画像の比較が出来ず、ファイル情報を垂れ流すだけ。
もうひと手間必要。

ファイルの情報が取れるということは、差分の画像ファイルを作ることができれば、そのファイルの-identify -verbosを取ればよいということなので、今度は差分ファイルの作成方法を調べることに。


もともと、ImageMagickはファイル形式の変換や編集、合成をコマンドラインで行うツールのようなので、差分ファイルの作成方法は割と簡単に判明。
-composite -compose difference で作れるらしい。

@echo off

set WORK_AREA=%~dp0
set MAYA_BIN=C:\Program Files\Autodesk\MayaLT2016\bin\

:: 比較する画像
set IMG_A=%WORK_AREA%A.bmp
set IMG_B=%WORK_AREA%B.bmp

:: 結果画像
set OUT_IMG=%WORK_AREA%C.bmp


:: imconvert実行
"%MAYA_BIN%imconvert.exe" -composite -compose difference "%IMG_A%" "%IMG_B%" "%OUT_IMG%"

pause



 
A.bmp      B.bmp    C.bmp

この差分ファイルのC.bmpに対して-identify -verbose を使用する。
なんとなく欲しいデータが取れそう。

これを元にバッチファイルを作成。

@echo off
title %~n0

set WORK_AREA=%~dp0
set MAYA_BIN=C:\Program Files\Autodesk\MayaLT2016\bin\


:: 比較する画像
set IMG_A=%1
set IMG_B=%2
:: 存在確認
if ""=="%IMG_A%" echo IMG_A is blank. & pause & exit /b
if ""=="%IMG_B%" echo IMG_B is blank. & pause & exit /b
if not exist "%IMG_A%" echo %IMG_A% not found. & pause & exit /b
if not exist "%IMG_B%" echo %IMG_B% not found. & pause & exit /b


:: imconvertの作業エリア作成
set IMCNV_TMP=%WORK_AREA%_tmp
if not exist "%IMCNV_TMP%" md "%IMCNV_TMP%"

:: 差分画像のファイル名
set OUT_IMG=%IMCNV_TMP%\out.png
:: ログファイル名
set VRBS_FILE=%IMCNV_TMP%\verbose
set MEAN_FILE=%IMCNV_TMP%\mean


:: imconvert実行
"%MAYA_BIN%imconvert.exe" -composite -compose difference "%IMG_A%" "%IMG_B%" "%OUT_IMG%"
"%MAYA_BIN%imconvert.exe" -identify -verbose "%OUT_IMG%" "%OUT_IMG%">%VRBS_FILE%


:: 結果解析
find "mean:" %VRBS_FILE% | find "mean:">%MEAN_FILE%
set RESULT_MEAN=
for /F "tokens=1-3" %%A in (%MEAN_FILE%) do set RESULT_MEAN=%%B


:: 結果表示
echo %RESULT_MEAN%
pause


画像ファイルを2つ、このバッチファイルへドラッグ&ドロップすると違いの数値が出てくる。


2015年9月17日木曜日

EXCELの条件付き書式(覚書)

最近は、もっぱらリボンUIのタブから選んで設定してばかりいたので、
自前で条件付き書式を書くことが減り、基本的な部分を忘れていた。

書式ルールに数式を選んだ場合、返ってきた値が1だと書式を変えて、
0だとそのまま。
当たり前か。

なので、

=IF($A1="hogehoge",1,0)


となっているとき、該当のセルが「hogehoge」だったら書式が変わる。


dir /s /b のリダイレクトで作ったリストなんかの場合、

=IF($A1=$A2,0,1)


とかにしておけば、階層の切り替わった行に色付けできる。


しかし、LOOKUP関数の使い方とかさっぱり忘れてしまったなぁ・・・。
復習しとくか。