3ds Max バージョン 4 で導入された関数公開システムでは、プラグインの外部のコードがプラグインの主要な関数の検出および照会を行い、共通の呼び出しメカニズムを使って呼び出せるようにして、これらの関数および演算をパブリッシュすることができます。システム全体は Window の COM および OLE オートメーション システムに非常に似ており、アーキテクチャでは同様の概念を数多く共有しています。ただし、関数公開システムは COM および OLE に基づいていませんが、3ds Max 用に最適化されたカスタム アーキテクチャです。関数公開 API はさまざまな目的で使用できます。サード パーティの開発者は関数公開 API を使って、外部ソースで使用されるプラグインの重要な部分を開発し、ユーザがそれらを直接拡張およびコントロールできるようにすることができます。
プラグイン コードをモジュラー化してさまざまな「エンジン」を作成し、3ds Max の他の部分やサード パーティ製プラグインにサービスを提供、またはさまざまなユーザ インタフェースを介してユーザに提供します。
マニピュレータ システム、スクリプト化されたメニュー、クアッド メニュー、キーボード ショートカット、macroScript、ツールバー ボタンなどの UI でプラグイン機能を呼び出すための代替手段を提供します。
MAXScript マクロ レコーダで自動的に関数を公開するための呼び出しを生成できるようにして、拡張 ParamMap2 システム、またはキーボード ショートカットやメニュー項目などの UI メカニズムによって公開された関数を呼び出せるようにします。
関数は、1 つまたは複数のインタフェースでプラグインによってパブリッシュされます。アクション関数は、インタフェースの独自のセットでパブリッシュする必要があります。各インタフェースは、基本クラス FPInterface から派生するクラスのインスタンスによって表現されます。外部システムは、インタフェース定義オブジェクトにアクセスする ClassDesc に対してさまざまなクエリー メソッドを呼び出すことで、公開されたインタフェースを認識することができます。これらの問い合わせまたは「反映」メソッドの他に、FPInterface には、インタフェース内の特定の関数を実際に呼び出すための呼び出しメソッドもあります。このため、いずれかのインタフェースを認識した場合は、任意の公開関数を呼び出すことができます。
アクション インタフェースは、特殊なインタフェースです。これらのインタフェースには、UI のボタンおよびキーを「押す」ためのプログラム方法をプラグインに提供する、UI アクション関数が含まれています。
MAXScript は、このように定義されたプロパティを直接ドット表記プロパティとしてインタフェースに公開します。たとえば、次の円柱 mixin の例に示すように、Get/SetRadius に関数としてアクセスする場合があります。
これは、MAXScript に存在するすべての関数公開インタフェース(static、Mixin、Core)に当てはまります。一層の最適化として、MAXScript はすべてのインタフェース メソッドおよびプロパティをインタフェースのレベルまで効果的に格上げします。このため、オブジェクトまたはクラスのすべてのインタフェースで、個々のメソッドおよびプロパティが固有の名前を持つ場合は、インタフェース名を省略することができます。
MAXScript では、関数公開システムを通じて、プラグインによってパブリッシュされたすべての関数に自動的にアクセスすることができます。各プラグイン クラスは、MAX クラス オブジェクトとして MAXScript に表示されます。このため、プラグインのインスタンスの生成やクラスのテストなどに使用することができます。プラグインがインタフェースをパブリッシュする場合、それらのインタフェースは、このクラス オブジェクトのプロパティとして MAXScript に表示されます。インタフェースの内部名は、プロパティ名として使用されます。インタフェース内のすべての関数には、インタフェースの名前付きプロパティとしてアクセスできます。上記の例で示したインタフェースが EditMesh によってパブリッシュされた場合、次のスクリプト フラグメントを使用できます。
上記のスクリプトは、 $foo のメッシュ、面 1、2、3、量 10 単位について FaceOps インタフェースの押し出し関数を呼び出します。
アクション関数を取得して、表示します。各インタフェースは、構造体定義としてクラス オブジェクトに格納されます。
作成モードを開始(または停止)します。これには、EditMesh ロールアップの[作成](Create)ボタンをハイライト/ハイライト解除する副作用があります。MAXScript のアクション関数が FPS_OK を返す場合、アクション関数の呼び出しは true を返し、それ以外の場合は false を返します。
このように、アクション関数用の述語関数を、アクション関数オブジェクト自体のプロパティとして使用できます。次のように問い合わせを行うことで、述語が指定されているかどうかを確認することができます。
インタフェースへのアクセスには、スタンドアロン インタフェースとしてアクセスする方法と特定のオブジェクトのインタフェースとしてアクセスする方法があります。インタフェースに直接アクセスする場合は、操作するオブジェクトをインタフェースに渡す必要があります。