MAXScript の OLE オートメーション機能では、Visual Basic、Excel、Paradox などのアプリケーションに対して 3ds Max を OLE オートメーション サーバとして使用できます。この機能を使用すると、VB や Excel などの OLE オートメーション クライアントから呼び出せる MAXScript 関数を発行して、モデルやアニメーションを生成したり、現在のシーンからデータを返すことができます。スクリプトのサンプルには、簡単なビジネス グラフを作成する一連の MAXScript 関数の定義や、Excel-VB でスクリプト化されたメニューを持ち、セルの選択をこれらの MAXScript 関数に渡してアニメートされた棒グラフを作成する Excel スプレッドシートの例が含まれています。
このメカニズムには、次のような機能と制限があります。
OLE オートメーション クライアントにオブジェクトのメソッドとして示される MAXScript 関数のリストをアタッチできる単一のサーバ オブジェクトを公開します。
公開されているオブジェクトの複数の使用をサポートするローカル サーバを個別のプロセスとして登録します。
インプレース アクティベーションやオブジェクトのリンクと埋め込みはサポートしていません。他の OLE オブジェクトに対するコンテナも提供していません。
アクセス可能なタイプ情報を持たないインタフェースの IDispatch フォームのみがサポートされています。クライアントは、3ds Max サーバ オブジェクトに対する参照をタイプのない総称オブジェクトとして宣言する必要があります。
次のようなメソッドの引数および結果のデータ タイプがサポートされています。
空に等価な MAXScript の値は、undefined
です。
OLE Objects (interfaces)
OLE クライアントは 3ds Max にアクセスする前に、3ds Max を実行し、MAXScript をアクティブにする必要があります。MAXScript は、最初にそのユーティリティ パネルのロールアウトにアクセスしたときにアクティブになります(さらに、startup.ms
スクリプトが作動します)。あるいは、「コマンド ラインからのスクリプトの実行」に記載されている起動スクリプト機能を使って、3ds Max が実行されると即座に OLE サーバ インタフェースを構築できるようにすることもできます。
このリリースで提供されている登録スクリプトを使って、OLE サーバとして Windows に 3ds Max を登録する必要があります。詳細は、「MAXScript の OLE オートメーションの設定」を参照してください。
MAXScript OLE オートメーション クライアント システムでは、MAXScript を使って 3ds Max 内に OLE オートメーション(現在は Active-X)オブジェクトを作成したり、Excel のスプレッドシートの作成やそのセルへの 3ds Max オブジェクト情報の直接挿入など、MAXScript と関連付けられている OLE オートメーション サーバをコントロールできます。
関数
createOLEObject()
は、OLE オートメーション サーバへの接続を確立するときに使用します。createOLEObject()
の戻り値は OLEObject
クラスのインスタンスです。
例:
xl = createOLEObject "Excel.Sheet"
これによって、Excel への接続が開かれ、シート オブジェクトが作成され、それが変数 xl に配置されます。この関数に対する単一の引数は OLE progID 文字列です。新しい OLE オブジェクトのプロパティにアクセスし、メソッドを呼び出すことができます。
例:
xl.application.name
次のように返されます。
"Microsoft Excel"
xl.application.visible = true
デスクトップ上で可視の Excel が生成されます。MAXScript の場合と同様に、ドット「.」表記を使って OLE オブジェクトに対するプロパティを取得します。また、OLE オブジェクト プロパティとして OLE オブジェクト メソッドを参照します。たとえば、Sheet にセル座標をとり、Cell OLE オブジェクトを返すメソッド「cells」があるとします。
xlc = xl.application.cells 1 1
左上のセルを xlc に配置します。値を次のように設定します。
xlc.value = 123.45
createOLEObject()
にアタッチされているサーバ アプリケーションは、作成された MAXScript OLE オブジェクトが最後にガベージ コレクションされるときに解放および停止されます。releaseOLEObject()
関数を使って、OLE サーバ アプリケーションから明示的に接続を切断できます。
形式は次のとおりです。
releaseOLEObject <ole_object>
OLE オブジェクトに対して releaseOLEObject()
を呼び出すと、その OLE オブジェクトは使用不可になり、さらにそれを使用しようとすると、記述エラー メッセージが表示されます。
releaseAllOLEObjects()
関数を使って、すべてのアクティブな OLE サーバ アプリケーションから明示的に接続を切断できます。
この形式は、次のとおりです。
()
releaseAllOLEObjects
この関数を呼び出すと、すべての既存の OLE オブジェクトは使用不可になり、これらのオブジェクトの使用を試みるとランタイム エラーが発生します。