XRefScene 値は 3ds Max の外部参照シーン オブジェクトを表します。 *xrefs.addNewXRefFile()*
および *xrefs.getXRefFile()*
関数を呼び出すと、外部参照シーン値が返されます。
外部参照シーン オブジェクトはネスト構造にできます。たとえば、シーン ファイル A に外部参照ファイル B を指定する外部参照シーン オブジェクトが含まれ、更に外部参照ファイル B に外部参照ファイル C を指定する外部参照シーン オブジェクトが含まれるようにできます(つまり、A は B を外部参照し、B は C を外部参照します)。ネストされた外部参照シーン オブジェクトにアクセスできるようにするため、該当する XRefScene メソッドにはオプションのルート キーワード パラメータが用意されています。この引数が指定されている場合、これらのメソッドでは指定した外部参照シーン値のルート ノードに作用します。それ以外の場合は、現在のシーンのルート ノードに作用します。A から C に到達するには、A をロードし、次のような処理を行います。
例
bXref = xrefs.getXRefFile 1-- taken from root node of current scene cXref = xrefs.getXRefFile 1 root:bXref-- taken from root of bXref cRoot = cXref.tree -- to get root of C
スクリプトに外部参照されているシーンのオブジェクトへの明示的な参照($sphere01 など)があるスクリプト コントローラのシーンには、外部参照シーンにおけるオブジェクトが MAXScript で表示できないため、スクリプト作成ができないという問題があります。これは実際には外部参照に関して一般的に見られる問題で、外部参照ファイル内には、明示的なシーン オブジェクト参照に依存するどんなスクリプト(スクリプト コントローラ、パラメータの関連付け、コールバック スクリプトなど)も含めることはできません。
この問題は、3ds Max 8 以降で解決されています。スクリプト コントローラは、パラメータ ブロックを使用して参照を格納し、ネストされた外部参照内でこれらを解決できます。
コンストラクタ
xrefs.addNewXRefFile <filename_string> [ #noLoad] [ root: <XRefScene>]
新規の外部参照シーン オブジェクトを追加し、外部参照シーン値を返します。*#noLoad*
が指定されていない場合は、外部参照シーン ファイルはすぐにロードされ、シーンが更新されます。*#noLoad*
が指定されている場合は、シーンはユーザが要求するまで更新されません。変更した外部参照シーン オブジェクトを更新するには、*updateXRef()*
メソッドを使用して外部参照シーン オブジェクトをロードしてください。
*root:<XRefScene>*
が指定されている場合、外部参照シーン オブジェクトは、指定された外部参照シーン値に対応するファイルの外部参照シーン オブジェクトのように、現在のセッション中に現在のファイル内で扱われます。現在のシーンが保存され再ロードされた、または *updateXRef()*
がルート外部参照オブジェクト上で実行されたという理由で、外部参照シーン オブジェクトはシーンから削除されます。
DRF ファイルが渡された場合、*xrefs.addNewXRefFile*
はエラーを返しません。この場合、undefined とは違う値を返し、外部参照された DRF ファイルは「問題」のあることを示すように赤で表示されます。この動作は、ユーザが[外部参照シーン](Xref Scene) | [追加] (Add)ダイアログ ボックスで[すべてのファイル(.)
xrefs.getXRefFile <index> [ root: <XRefScene>]
*root*
が指定されていない場合、[外部参照シーン](XRef Scene)ダイアログ ボックス内でインデックス指定された外部参照シーン オブジェクトに対応する外部参照シーン値が返されます。*root:<XRefScene>*
が指定されている場合、外部参照シーンの外部参照シーン オブジェクト内にネストされた外部参照シーン オブジェクトに対応する外部参照シーン値が返されます。インデックスは 1 で始まり、[外部参照シーン](XRef Scene)ダイアログ ボックスにリスト表示されている外部参照シーン オブジェクトの順番に対応しています。*xrefs.getXRefFileCount()*
メソッドを使用してシーンの外部参照シーン オブジェクト数を判断できます。
<RootNode> as XRefScene
3ds Max 2018 以降で使用可能: この外部参照シーン オブジェクトの「所有元」の外部参照シーンです。これは読み込み専用のプロパティです。これがトップ レベルの外部参照シーンである場合は、undefined が返されます。
例:
aXref = xrefs.getXRefFile 1 --> XRefScene:"xrefed_teapot.max" bXref = xrefs.getXRefFile 1 root:aXref --> XRefScene:"teapot.max" aXref.owner --> $<root> classof aXref.owner --> MAXRootNode aXref.root --> undefined bXref.owner --> $<root> classof bXref.owner --> MAXRootNode bXref.root --> XRefScene:"xrefed_teapot.max" classof bXref.root --> XRefScene
<XRefScene>.tree : MAXRootNode
外部参照シーンオブジェクトのルート ノードです。これは読み込み専用のプロパティです。このプロパティを使用すると、外部参照シーン オブジェクトの子オブジェクトにアクセスできます。
例:
aXref=xrefs.getXRefFile 1-- returns first XRef Scene object aXref.tree.children-- objects in the XRef Scene object, -- for example, may return: -- #children($Box01, $Box02) aXref.tree.children[1].width-- returns width value of $Box01 -- Get user defined properties getUserPropBuffer (aXref.tree)
<XRefScene>.parent Node default: undefined
外部参照シーン オブジェクトの親です。既定ではこれは *undefined*
ですが、シーン内の任意のノードに設定できます。
<XRefScene>.autoUpdate Boolean default: false
true の場合、外部参照ファイルの自動更新がオンになります。
<XRefScene>.boxDisp Boolean default: false
true の場合、外部参照シーン オブジェクトのすべてのノードがボックス表示モードで表示されます。
<XRefScene>.hidden Boolean default: false
true の場合、外部参照シーン オブジェクトが非表示になります。
<XRefScene>.disabled Boolean default: false
true の場合、外部参照シーン オブジェクトが無効になります。
<XRefScene>.ignoreLights Boolean default: false
true の場合、外部参照シーン オブジェクト内のライトは表示されません。
<XRefScene>.ignoreCameras Boolean default: false
true の場合、外部参照シーン オブジェクト内のカメラは表示されません。
<XRefScene>.ignoreShapes Boolean default: false
true の場合、外部参照シーン オブジェクト内のシェイプは表示されません。
<XRefScene>.ignoreHelpers Boolean default: false
true の場合、外部参照シーン オブジェクト内のヘルパーは表示されません。
<XRefScene>.ignoreAnimation Boolean default: false
true の場合、外部参照シーン オブジェクト内のすべてのアニメーションは無視されます。
<XRefScene>.overlay Boolean default: false
true の場合、外部参照シーンはオーバーレイとして処理されます。オーバーレイを利用すれば、循環従属が作成されるリスクを伴わずに、複数のシーンを参照できます。overlay = true に設定された外部参照シーンは、それが参照するドライバ シーンにのみロードされます。そのオーバーレイを使用するドライバ ファイルを外部参照するその他のシーンからは見ることができません。
メソッド
delete <XRefScene>
外部参照シーン オブジェクトを削除します。
merge <XRefScene>
外部参照シーン オブジェクトのノードをシーンに合成し、外部参照シーン オブジェクトを削除します。
updateXRef <XRefScene>
外部参照シーン オブジェクトの再読み込みを試みます。処理が正常に終了した場合は *true*
、その他の場合は *false*
を返します。
flagChanged <XRefScene>
このメソッドは、指定した外部参照シーン オブジェクトが変更されており、更新されるべきであることを示します。変更した外部参照シーン オブジェクトを更新するには、*xrefs.updateChangedXRefs()*
メソッドを使用します。
関連するメソッド
xrefs.getXRefFileCount [root: <XRefScene>]
*root*
が指定されていない場合、シーンにあるトップレベルの外部参照シーン オブジェクトの総数が返されます。*root:<XRefScene>*
が指定されている場合、外部参照シーンの外部参照ファイル内にネストされている外部参照ファイルに含まれる外部参照シーン オブジェクトの総数が返されます。
xrefs.deleteAllXRefs [root: <XRefScene>]
*root*
が指定されていない場合、外部参照シーン オブジェクトはすべて削除されます。*root:<XRefScene>*
が指定されている場合、指定した外部参照シーンの外部参照シーン オブジェクトとその内部にネストされている外部参照シーン オブジェクトだけが削除されます。
xrefs.updateChangedXRefs [#noRedraw] [root: <XRefScene>]
*root*
が指定されていない場合、変更のフラグが設定されているすべての外部参照シーン オブジェクトが更新されます。*root:<XRefScene>*
が指定されている場合、指定した外部参照シーンの外部参照シーン オブジェクトのうち、変更フラグが設定されているオブジェクトだけが更新されます。*#noRedraw*
が指定されている場合、ビューポートは外部参照シーン オブジェクトがロードされるまで更新されません。外部参照シーン オブジェクトが正常にロードされた場合は *true*
、その他の場合は *false*
を返します。
xrefs.findUnresolvedXRefs [root: <XRefScene>]
*root*
が指定されていない場合、すべての未解決の外部参照シーン オブジェクトに対してファイル名文字列の配列を返します。*root:<XRefScene>*
が指定されている場合、指定した外部参照シーンの外部参照シーン オブジェクト内の未解決の外部参照シーン オブジェクトだけが返されます。
xrefs.attemptUnresolvedXRefs [root: <XRefScene>]
*root*
が指定されていない場合、現在未解決の外部参照シーン オブジェクトがあれば、そのロードを試行します。*root:<XRefScene>*
が指定されている場合、指定した外部参照シーンの外部参照シーン オブジェクト内の未解決の外部参照シーン オブジェクトだけがロードされます。