maxには地味に、OLEの機能が付いています。
便利な機能なのにリファレンスでもなおざりな扱いをされています。
そして、ネットを探してもそれほど資料が転がっていないので、
これが何かの役に立つことを願いつつ、C#でmaxを下僕に
してみました。
作ってみたのは、ファイル書き出しツール。
1個のファイル書き出しが1分足らずだとしても、塵も積もれば
何とやらで、スケジュールに支障を来すのは明白である。
今回考えたツールは指定フォルダにmaxファイルをコピーすることで
自動的に指定形式への書き出しを行うというもの。
前置きが長くなりましたが、C#からmaxをコントロールする
要点をまとめると、
[ComImport]
[Guid("7FA22CB1-D26F-11d0-B260-00A0240CEEA3")]
public class MAXOLE
{
}
事前にをレジストリに登録しておいたmaxをここでクラス化。
maxにはスタートアップスクリプトにて、”registerOLEInterface”で
呼び出したい関数を登録しておく。
m_oleMax = new MAXOLE();
m_oleMax.GetType().InvokeMember("oleRunExport",
BindingFlags.InvokeMethod,
null,
m_oleMax,
new Object[] { _exportFile });
“oleRunExport”はmax側の関数名、最後の引数がmaxに渡す引数。
これで、向こう側の関数を呼び出す事ができます。
後は、C#側でフォルダを監視する仕組みを作って、フォルダにファイルが
コピーされる度に、maxのドアを叩いてあげればいいだけ。
後から考えれば、C#でフォルダの監視の仕組み作ってるんだから、
maxscriptでやれば良かったと思うも、非同期な処理が難しそうなので
やっぱ、C#でさっくり組むのがハッピーかな。
毎度毎度マニアックなツールなので、欲しい人は連絡してね。