バックエンドのマネージド コードと連携する 3ds Max 用のカスタム プラグインがあります。状況によっては、管理対象オブジェクトを MAXScript に転送して直接対話させたい、つまり関数の 1 つからラップされたオブジェクトを返したい場合があります。
MAXScript は、Max に含まれている別のプラグイン (msxdotNet) (私は 3ds Max 2008 を使用しています) を介して、管理対象オブジェクトを比較的うまく直接操作できます。基本的にオブジェクトをラップし、レイト バインド コールにリフレクションを使用しますが、完全に自己完結型であり、sdk の公開はありません。プラグイン dll 自体も、いくつかのトップレベルのスクリプト化されたクラスを追加するために Max が必要とする最小限のインターフェース以上のものを公開しません。
スクリプト化されたクラスにより、コンストラクターを介して新しいオブジェクトをインスタンス化できます
local inst = (dotNetObject "MyPlugin.MyClass" 0 0 "arg3")
私の場合、使用したいオブジェクトのインスタンスが既にあります。
プラグイン内から dotNetObject ラッパーのインスタンスを作成して Max に戻す方法はありますか?
理想的には、次のような (C++/CLI) シグネチャを持つヘルパー関数が必要です。
Value* WrapObject(System::Object ^obj);
私ができるいくつかの基本的な保証:
- msxdotNet プラグインは既に読み込まれています。
- msxdotNet プラグインとマネージ アセンブリは同じ AppDomain にあります。
msxdotNet プラグインのソースはsdkサンプルとして含まれていますが、管理/健全性のために、それを変更して再コンパイルすることはできません。