以下では、3ds Max 8 での MAXScript 言語に対する内部変更と「微調整」について説明しています。ここで紹介する変更では、「新機能」のトピック以外の新しいオブジェクト、クラス、メソッド、インタフェースは導入されていませんが、MAXScript の内部の動作が変更されています。これらの変更では通常、パフォーマンスの向上またはプログラミングの単純化が図られています。
MAXScript デバッガでは、3ds Max のメイン スレッドを中断したり、3ds Max スレッドが動作していない間にグローバル変数とローカル変数の値の調査と変更を行ったり、コマンド ラインから MAXScript コマンドを実行したり、MAXScript コード内からメソッドを呼び出して実行を中断することができます。デバッガでは、中断したコードの実行の停止や継続を行うこともできます。
シーン ファイルの保存を試みた後、クラッシュ ハンドラによって MAXScript は変更済みの開いたスクリプト ウィンドウの保存を試みることができるようになりました。
これまでは、コントローラをトラックに割り当てると、新しいコントローラがトラックの値を使用していました。新しいコントローラ クラスを既存トラックに割り当てる場合、これは正常に動作しますが、すでに値がある既存コントローラをインスタンス化する場合は、予想外の結果となっていました。スクリプト コントローラをトラックに割り当てる場合、割り当て前のスクリプト文字列セットは、トラックの現在の値で常に上書きされていました。
3ds Max 8 ではこれが修正されました。コントローラが「新しくない」場合、フラグが内部的に設定され、インスタンス化されるコントローラの既存データが、フレーム 0 のトラックの値の代わりに使用されます。
スクリプト コントローラにおいてはトラックの現行値でスクリプト文字列が置き換えられましたが、前の段落で説明したコントローラの変更により、これは修正されました。スクリプト コントローラか式コントローラの設定を変更した場合、コントローラは「新しくない」とマークされ、既存のスクリプトや式が、ターゲット トラックの値の代わりに使用されます。
式コントローラとスクリプト コントローラにおけるノードの簡潔なリファレンス
ノードを示す式コントローラの変数は、新しい nodeTransformMonitor クラスを使用してノードの参照を維持するようになりました。これにより、ノード変数を含む式コントローラを使用しているシーンの速度が上がります。
RCMenu において修正された .Checked プロパティと .Enabled プロパティ
ダイアログに使用される RCMenu のメニュー項目のプロパティ .enabled および .checked が変更された場合に、メニュー項目が正しく更新されます。
ユーティリティおよびロールアウトのプロパティ、メソッド、およびイベント ハンドラ
読み取り専用の .owner プロパティがロールアウト値に追加されました。スクリプト プラグインか CA によってロールアウトが表示されている場合、このプロパティにはスクリプト プラグインか CA のインスタンスが含まれます。ロールアウト イベント ハンドラでデバッガのブレークが発生したとき、スクリプト プラグインか CA のインスタンスの変数に簡単にアクセスできるようにするため、このプロパティが追加されました。この場合、イベント ハンドラの所有者はロールアウトなので、getVar owner.owner を使用してスクリプト プラグインか CA のインスタンスにアクセスできます。
スクリプト プラグインにおいて事前定義されている次のローカル変数は、読み取り専用になりました。
すべてのプラグイン タイプ: this、loading 。version は以前から読み取り専用でした。
名前の前に「::」を付けることで、グローバル変数名を指定できるようになりました。このような名前はグローバル変数プールのみで検索され、現存しない場合に作成されます。
ファイル内でマージか外部参照を行い (シーンやオブジェクトの外部参照は、マージの特別なケース)、永続グローバル変数を読み込むとき、シーン ファイルから読み込んだ変数が永続グローバル変数としてすでに存在する場合、永続グローバル変数の値は上書きされません。
新しく[ using:<maxclass> ]オプション キーワード引数が ImportFile() 関数と ExportFile() 関数に追加されました。
この引数は、呼び出される正確なインポータ/エクスポータの max クラスを渡すために使用できます。したがって、同一の拡張子が複数のファイルにサポートされていても競合が防止されます。
新しく[ quiet:<bool> ]オプション キーワード引数が SaveMaxFile() 関数と SaveNodes() 関数に追加されました。このメソッドは、OK を返す代わりに、正常に終了した場合に true、エラーが発生した場合 (ターゲット ファイルが存在して書き込み保護されている場合など) に false を返します。
新しく[ quiet:<bool> ]オプション キーワード引数がビットマップ値の Save()メソッドに追加されました。このメソッドは、OK を返す代わりに、正常に終了した場合に true、エラーが発生した場合 (ターゲット ファイルが存在して書き込み保護されている場合など) に false を返します。
新しく[ quiet:<bool> ]オプション キーワード引数が fileSaveMatLib() メソッドに追加されました。対応する SDK メソッドが正常終了かエラーの有効な結果を返さないので、OK が返されます。
新しく[ initialDir:<pathname> ]オプション キーワード引数が getSavePath() メソッドに追加されました。これを指定すると、指定したパスでダイアログ ボックスが開きます。
新しいオプション キーワード引数が既存の gw.snapPoint メソッドに追加されました。ユーザがこの引数を使用することにより、XY 平面をマップする snapPlane matrix3 値をカスタム スナッピング平面に与えることができます。
matrix3 値をカスタム スナッピング平面に与えることができます。Effect8::SupportsBitmap() が実装され、すべてのケースで true を返します。
スクリプト化されたレンダリング効果は、適切な GetPixel() メソッドのみでビットマップにアクセスし、スクリプトでカラーを意図的にクリッピングするかカラーを整数に変換しない限り、クリッピングなしで高度なダイナミック範囲イメージが自動的にサポートされるので、すべてのタイプのビットマップと互換性があるとみなされます。
デレゲート マテリアルがサポートされている限り、スクリプト マテリアルは mental ray によってサポートされるようになりました。デレゲート マテリアルは、レンダリングに使用される実際のマテリアルとして mental ray によって正しく解釈されます。スクリプト マテリアルの[mental ray コネクション](mental ray Connection)ロールアウトの使用と初期化も正しく行われます。
#sceneUndo および #sceneRedo コールバックは、 callbacks.notificationparams() の元に戻す/やり直し名前エントリを返すようになりました。
showProperties、getPropNames、および hasProperty メソッドに、FPS インタフェース プロパティが含まれるようになりました。
[エディタ](Editor)メニューに新しく[編集](Edit) > [すべてクリア](Clear All)コマンドが追加されました。このオプションは、これまでリスナーのみで使用可能でした。実行すると、エディタの内容がクリアされます。
既定アクションを指定する新しいコンテキストが追加されました。
現在の抑制モードを指定する新しいコンテキストが追加されました。
render、loadMaxFile、fetchMaxFile、mergeMaxFile 、および getMAXFileObjectNames の既定値のアクション引数として、オプション #default が追加されました。 #default を指定すると、現在の defaultAction コンテキストの状態が使用されます。
render、loadMaxFile、fetchMaxFile、mergeMaxFile 、および getMAXFileObjectNames に既定値のアクション引数を指定しない場合、現在の defaultAction コンテキストの状態が既定値になります。
MAXScript render、loadMaxFile、fetchMaxFile、mergeMaxFile、getMAXFileObjectNames メソッドの「quiet」キーワード引数で既定値が修正されました。これまでの既定値は FALSE でした。現在の既定値は、現在の抑制モードです。
MXS mergeMAXFile メソッドに、missingExtFilesAction:、missingExtFilesList:、missingXRefsAction:、missingXRefsList: というキーワード引数が追加されました。
新しいキーワード引数 unsupportedRenderEffectAction : および unsupportedRenderEffectList : が MAXScript render メソッドに追加されました。
ファイル リンクのダイアログ ボックスでは、抑制モードを尊重するようになりました。ファイル リンクのすべてのダイアログ ボックス(アタッチ、再ロード、デタッチ、またはバインドの間に現れるダイアログ ボックス)では、この設定を尊重するようになりました。
新しいキーワード パラメータ splitEmptyTokens: が filterString メソッドに追加されました。 splitEmptyTokens が false の場合、または指定されない場合は、連続トークンが 1 つのトークンとして処理され、文字列の先頭か末尾のトークンが無視されます。 splitEmptyTokens を true にすると、見つかったそれぞれのトークンが出力の文字列要素となり、上で無視された場合の文字列要素は空の文字列になります。
新しい SafeArrayWrapper クラスのインスタンスがユーザによって作成可能になり、SAFEARRAY 値を返す OLE メソッドによって返されます。
これまでのリリースでは、MAXScript 文字列と OLE 文字列の変換ルーチンでスタック メモリが使用されていました。特定のメソッドでは、文字列サイズの 2 倍の割り当てがスタックで試されていました。非常に長い文字列の場合は、スタック オーバーフローが発生していました。3ds Max 8 では、MAXScript でより適切な変換ルーチンが使用され、実際に必要なときに限りスタック メモリが使用されるためスタック メモリ要件が小さくなりました。
新しいグローバル変数 options.showGCStatus が追加されました。 true に設定すると、MAXScript のガベージ コレクション中にステータス バーにメッセージ「MXS GC」が表示されます。 false に設定すると、メッセージは表示されません。設定は、3dsmax.ini ファイルの[MAXScript]セクションに保存されます。
以前のリリースでは、MAXScript を使用して N 個のオブジェクトを削除すると MacroScript isEnabled ハンドラが N 回呼び出される問題がありました。この問題は解決されました。これは修正されました。オブジェクトの削除中はシーンの再描画が無効になり、シーンの再描画が再び有効になってから MacroScript ハンドラが 1 回だけ呼び出されます。
これまでのリリースでは、記述されていた showHidden オプション キーワードが破壊されていました。現在は予想どおりに動作するようになりました。
これまでのリリースでは、スピナー コントロールのみを controller: 作成パラメータによってコントローラにリンクできました。現在ではスライダでも同じことを実行できます。
Button または Checkbutton のいずれかで .images プロパティの値を undefined に設定すると、コントロールがイメージではなくキャプションで表示されるように設定されます。
新しい rightclick イベントが、button、checkButton、mapButton、materialButton、pickButton、および imgTag に追加されました。
ダイアログ ボックスで検出されるイベントと同様の複数の新しいイベント( lbuttondown、lbuttonup、lbuttondblclk、mbuttondown、mbuttonup、mbuttondblclk、rbuttondown、rbuttonup、rbuttondblclk など)が、imgTag に追加されました。
スクリプト カメラ、スクリプト ライト、スクリプト ヘルパーでこのイベント ハンドラを使用することができ、開発者は、ビューポートでオブジェクトを描画するときにノードのワイヤ カラーを使用するか、オブジェクト タイプ (ヘルパーにはダミー オブジェクト、ライトにはライト オブジェクト、カメラにはカメラ オブジェクト) の UI カラーを使用するかを指定できます。このハンドラが true を返す場合は、ノードのワイヤ カラーが使用されます。 false を返す場合は、オブジェクト タイプの UI カラーが使用されます。イベント ハンドラを指定しない場合は、ワイヤ カラーが使用されます。 getDisplayMesh ハンドラを指定した場合に限って、このハンドラを使用できます。
以前はスクリプト カメラおよびヘルパーで使用できた getDisplayMesh イベント ハンドラが、スクリプト ライト プラグインでも使用可能になりました。
既定の[F11]キーを使用して、[MAXScript リスナー](MAXScript Listener)のオンとオフを切り替えることができるようになりました。これまではショートカットを使用して開いていましたが、閉じることはできませんでした。