3ds Max 9 の MAXScript 言語に関する改良点

以下では、3ds Max 9 での MAXScript 言語に対する内部変更と「微調整」について説明しています。ここで紹介する変更では、「新機能」のトピック以外の新しいオブジェクト、クラス、メソッド、インタフェースは導入されていませんが、MAXScript の内部の動作が変更されています。これらの変更では通常、パフォーマンスの向上またはプログラミングの単純化が図られています。

64 ビット値と演算

64 ビット値 - Dobule、Integer64、IntegerPtr

3 つの新しい 数値クラス Double、Integer64IntegerPtr が MAXScript に追加されました。これらのクラスは、「数値」トピックで説明されている実数および整数の値に対する、すべての演算操作をサポートします。

is64bitApplication メソッド

MAXScript が 32 ビットまたは 64 ビットのどちらのビルドで実行されているかを判断するための「新しいメソッド」が追加されました。

Double と Integer64 の変換用ビット メソッド

Double の値と Integer64 の値を明示的に変換するための 2 つの新しいメソッド bit.doubleAsInt64() bit.int64AsDouble() が MAXScript の bit 構造体に追加されました。

の 2 つが MAXScript のビット構造に追加されました。

MAXScript における DotNet

すべての ActiveX コントロールが Microsoft Windows の 64 ビット バージョン用に再コンパイルされているわけではありません。3ds Max ユーザ インタフェースのさまざまな領域が TreeView および ListView などの ActiveX コントロールに依存しています。これらのコントロールやその他のコントロールの代替実装を提供するため、3ds Max 9 には、DotNet クラス、オブジェクト、メソッド、およびコントロールに対するアクセス機能が追加されました。これらは 3ds Max の32 ビットおよび 64 ビットの両ビルドで使用できます。

MAXScript エディタのオプション

[MAXScript エディタ](MAXScript Editor)ウィンドウ

新しいシステム グローバル変数である editorShowPath は、MAXScript エディタのタイトル バーに編集しているスクリプトの絶対パスを表示 (true、3ds Max 9 の既定値) するか、ファイル名のみを表示 (false、3ds Max 9 以前のバージョンではこの設定しかありませんでした) するかをコントロールします。この値を変更すると、開いている MAXScript エディタ ウィンドウの表示が更新されます。

エディタ ウィンドウで[開く](Open)または[名前を付けて保存](Save As)を実行したとき、エディタ ウィンドウにファイル名が関連付けられている場合は、[開く](Open)/[保存](Save)ダイアログ ボックスではそのファイルへのパスが開かれます。ファイル名の付いていない状態でエディタ ウィンドウから[開く](Open)、[保存](Save)、[名前を付けて保存](Save As)を実行したり、リスナーまたは Max のメイン ウィンドウからこれらの操作を実行する場合は、(ダイアログ ボックスの外部からキャンセルを実行しない限り) MAXScript スクリプト ファイルの[開く](Open)/[保存](Save)ダイアログ ボックスで最後に指定したディレクトリが使用されます。

MAXScript のソース ファイル名とファイル オフセット アクセス

MAXScript のソース ファイル名へのアクセス

新しいメソッドとして、MAXScript コードが自身を呼び出したソース ファイルをクエリーするための getSourceFileName() が追加されました。

新しいメソッド getSourceFileOffSet() が追加され、ソース スクリプト ファイルにおける文字の位置を戻します。ソース スクリプト ファイルから呼び出されたものでない場合は、「undefined」を返します。

[Esc]キーの動作

[Esc]による中止

 [Esc]キーによって実行を中止するかどうかを設定するシステム グローバル変数 escapeEnable の既定値が「false」に変更されました。この既定値は 3ds Max 9 以前のバージョンでは「true」でした。

配列のディープ コピー

配列の値

新しいメソッド deepCopy() が、配列値用に実装されました。ある配列とその全要素のコピーが作成され、ネストされた配列もサポートされます。

出力のフォーマット

FormattedPrint

数値のフォーマットをコントロールできる新しいメソッド3ds Max 9 に追加されました。 これは従来 Avguard DLX 機能拡張によって使用できるようになっていた機能です。

ヒープおよびメモリの管理

メモリの割り当てとガベージ コレクション

HeapSize および HeapFree MAXScript システム グローバル変数 が、64 ビット システムのメモリ アドレス空間の増加に伴って Integer から Integer64 に変更されました。

ヒープ サイズの初期値は 512MB に制限されるようになりました。ヒープ サイズの初期値が高すぎて、指定されたメモリ ブロックを割り当てられない場合は、メモリ ブロックを割り当てられるようになるまでヒープ サイズの初期値が 10% ずつ小さくされていきます。1MB のメモリ ブロックを割り当てることができない場合は、アサートがトリガされて 3ds Max セッションが中止されます (システムの起動時に 1MB を割り当てられないとすると、何らかの致命的な障害が発生している可能性があります)。それ以外の場合は、要求されたヒープ サイズが自動的に減少されたことを示すメッセージと、実際に割り当てられたヒープ サイズがステータス パネルに表示されます。

ヒープ サイズの初期値が最低でも MXS の必須要件である 12 バイトであることを確認するためのテストが追加されています。

新しい値が割り当てられた場合に、ヒープ サイズが必要に応じて (ガベージ コレクションを完全に実行した後に要求されたメモリ サイズが利用できない場合など) 自動的に増加されるようにするためのコードが追加されています。まず、要求されたサイズの 50 倍または 512KB を増加しようとします。この割り当てに失敗すると、割り当てるサイズを削減して何回かの割り当てが試行され、最後の割り当ては要求されたサイズの最大値または 256KB になります。この最後の割り当てが失敗すると、ランタイム エラーとなります。それ以外の場合は、ステータス パネルに、要求されたヒープ サイズが自動的に増加されたことを示すメッセージと、新しいヒープ サイズが表示されます。

新しい heapCheck() メソッドが MAXScript に追加されました。このメソッドは内部的なデバッギングに使用されるものです。ヒープの最低限の整合性チェックを実行するために、ツールから呼び出されます。

MAXScript システム グローバル

MAXScript スタック サイズが 1024000 バイトから 2048000 バイトに増加されました。MAXScript システム グローバル変数 stackSize は新しいサイズを返しますが、スタック サイズを変更して有効にすることはできません。この変数の値を大きくしても、効果はありません。

ユーザ インタフェース コントロール

新しい . tooltip プロパティが ButtonCheckbuttonMapbuttonMaterialbuttonPickbutton の各 UI コントロールに追加されました。このプロパティは、MAXScript から取得および設定できるようになりました。3ds Max 9 以前のバージョンでは、 tooltip: は作図パラメータとしてしか使用できませんでした。

[作成](Create)パネル

作成パネル

以前のドキュメントに記載されていなかった isCreatingObject() メソッドは、引数なしで呼び出されたときに[作成](Create)パネルでオブジェクトが作成されている場合は true を返します。これまでは、必ず 1 つのパラメータを指定する必要がありました。

コールバック

名前付き選択セットに関連する新しいコールバックが、一般イベント コールバック機能の新しい名前付き選択セットの通知セクションにに追加されました。

#NamedSelSetCreated callbacks.notificationParam() を呼び出すと、新しい名前が返されます。

#NamedSelSetDeleted callbacks.notificationParam() を呼び出すと、削除された選択セットの名前が返されます。

#NamedSelSetRenamed callbacks.notificationParam() を呼び出すと、古い名前と新しい名前を含んだ配列が返されます。

モディファイヤ パネルのサブオブジェクト レベルに関連する新しいコールバックが、一般イベント コールバック機能の既存のモディファイヤ パネルの通知セクションに追加されました。

#ModPanelSubObjectLevelChanged callbacks.notificationParam() を呼び出すと、新しいサブオブジェクト レベルの数値と古いサブオブジェクト レベルの数値を含む配列が返されます。

Direct3D デバイスのリセット (たとえば、3ds Max とその他のアプリケーション、スクリーン セーバなどを切り替える場合など) に関連する新しいコールバックが一般イベント コールバック機能の新しいDirect3D の通知セクションに追加されました。

#D3DPreDeviceReset

#D3DPostDeviceReset

MAXScript デバッガ

インタフェース: MXSDebugger

ブレークが発生したときに出力メッセージ ウィンドウをクリアするためのオプションが MAXScript デバッガに追加されました。

このオプションは MAXScript オプション ダイアログ ボックスに通常のチェック ボックスとして追加されており、INI ファイルに保存され、このファイルからロードされます。

また、このオプションは MXSDebugger インタフェースを通して公開されます。従来は、デバッガの使用中は、新しいブレークが発生した場合でも、出力メッセージ ウィンドウにすでに表示されているすべての出力は表示されたままになっていました。このため、新しいスタック ダンプが出力ウィンドウに表示された場合に、新しいダンプがどこから開始され、古いダンプがどこで終了しているかがわかりにくく、混乱の原因となっていました。今回の修正では、出力ウィンドウがクリアされ、出力ウィンドウの一番上にスクロールされようになりました。

デバッガのスタック ダンプ中はスタック レベル ダンプごとの出力フォーマットに水平なラインが追加され、スタック レベルがどこから変わっているのかを見分けやすくなりました。

アイコン ビットマップ

新しい Colorman インタフェース メソッド

Colorman インタフェースに、 colorman.reInitIcons() メソッドと colorman.resolveIconFolder() メソッドが追加されました。これらのメソッドは、追加アイコン ファイルの再読み込みや、アイコン パスを使用したファイル名の解決に使用できます。

アイコン ビットマップ ファイルの作成

CUI アイコン ファイル (*_16i.bmp、*_16a.bmp、*_24i.bmp、*_24a.bmp) は、最初にユーザ アイコン ディレクトリから読み込まれ、次に 3DS Max システム ディレクトリ、次に <3dsmax.exe>¥ui¥icons ディレクトリ、と順に読み込まれます。複数のディレクトリに同じファイル セットが存在する場合は、最初のディレクトリに含まれているものが使用されます。

loadPicure への引数として指定されるアイコン ファイル名、UI 項目用の画像配列に含まれるファイル名、およびビットマップ UI 項目用のファイル名には、アイコン フォルダのパスを指定する必要はなくなりました。アイコン ファイル名は複数のディレクトリ内を検索されます。詳細は上記リンクを参照してください。

マテリアルとマテリアル ライブラリ

マテリアル ライブラリを(現在のライブラリとは対照的に)一時的なライブラリとしてロードおよび保存するために、 loadTempMaterialLibrary() saveTempMaterialLibrary() の 2 つの新しいメソッド が追加されました

loadMaterialLibrary() メソッドが、マテリアル ライブラリ パスも検索するように修正されました。

MtlBaseLib インスタンスのラップが適切に行われていませんでした。

refs.dependents a[1]
#(#materialLibrary())
--previously would return something like:
RefTarg:MtlBaseLib

"Least Privileged" アクセスに対応した新しいユーザ ディレクトリ

マクロスクリプトの 2 番目のロード元を示す新しいシステム パス userMacroScripts が追加されました。exe¥macroscript にあるものと重複するスクリプトがこの場所に存在する場合は、この場所が優先されます。その他の詳細:

userMacroScripts ディレクトリを max マクロ ディレクトリに設定すれば、従来と同じ動作を保持することができます。

新しい userStartupScripts は、起動時に実行させたいスクリプトをユーザが配置する場所です。

新しい temp システム ディレクトリは、一時ファイルを安全に書き込むことができる場所として使用できます。このディレクトリに対して特にクリーンアップが行われるわけではありません。この変数はクライアントが一時ファイルを書き込む場所との混同を避けるために設定するものです。従来は、プラグインは max のルート ディレクトリや C:¥temp、あるいは TMP 環境変数に指定された場所など、あらゆる場所に書き込んでいました。Windows Vista 環境では、このような場所のほとんど (TMP 環境変数を使用する場合を除く) が無効になります。temp ディレクトリは安全に書き込みできる場所に変更されます。

フォルダの検索順序

スタートアップ スクリプト

3ds Max のシステム スタートアップ スクリプト ディレクトリにあるスタートアップ スクリプトが最初に実行され、次にユーザのスタートアップ スクリプト ディレクトリにあるスタートアップ スクリプトが実行されます。このような仕組みによって、ユーザのスタートアップ スクリプト ディレクトリと Max システム スタートアップ ディレクトリを区別することができます。startup.ms ファイルは、以下の順序で検索されます。

openFile()、encryptScript()、include() 、および editScript() に対して引数として指定されるファイル名は、ユーザ スクリプト ディレクトリでも検索されるようになります。

記号パス名

記号パス名

以下の新しい記号パス名がMAXScriptに追加されました。

 
  $exports
  $help
  $expressions
  $previews
  $maxstart
  $vpost
  $drivers
  $autoback
  $marketDefaults
  $icons
  $renderOutput
  $animation
  $archives
  $photometrics
  $renderAssets
  $userScripts
  $userMacros
  $userStartupScripts
  $userIcons
  $maxData
  $maxSysIcons

$maps および $plugins シンボル パス名ではインデックスも指定できるようになり、インデックスで指定されたディレクトリが使用されます。

"$maps[2]\\mybitmap.tga"

SymbolicPaths 構造体

新しい symbolicPaths 構造体は、システム シンボル パスへのアクセスおよびユーザ定義のシンボル パスの管理を行うための高度なメソッドを公開します。

ビットマップの比較

compareBitmaps() メソッド

新しい compareBitmaps() メソッドは、引数として指定された 2 つのビットマップが同一であるとみなされた場合には true、同一でないとみなされた場合には false を返します。

その他の修正点

3ds Max R2 以降で表示されていた「positive」の代わりに「+ve」が使用されている例外レポートを修正しました。

Function Pulished インタフェースの範囲確認で使用される、範囲外であることを示すエラー メッセージが変更されました。

-- ランタイム エラー: パラメータ値が範囲外です : 100

と表示されていたものが、次のようになっています。

-- ランタイム エラー: パラメータ値が範囲外です : < 1 または> 99: 100

MAXScript の検査方法が修正され、「出力可能な」名前を返すようになりました。この名前は句読点を「_」で置き換えたものです。アクセサ メソッドも修正され、出力可能な名前をテストできるようになりました。「raw」の名前の解決を先にテストし、次に出力可能な名前をテストするので、既存のスクリプトも引き続き実行できます。

const Primitive から const Generic に変更されたメソッド

次のメソッドは、const Primitive の代わりに const Generic から継承されるようになりました。 acos()、asin()、atan()、atan2()、ceil()、cos()、cosh()、floor()、getInterface()、getInterfaces()、log()、log10()、mod()、pow()、showMethods()、sin()、sinh()、sqrt()、tan()、tanh()。

この変更は SDK の内部構成を理由としたものであり、パフォーマンスや機能には一切影響ありません。

関連事項