コレクションとは、オブジェクトのグループをいいます。 たとえば、コレクションとして保存されるものとしては、選択リストがあります。
' Get the selection using the native Softimage commands Set oList = GetValue( "SelectionList" ) ' Get the selection using the object model Set oList = Selection
選択範囲を取得する際にコマンドまたはオブジェクト モデルのどちらを使用したかに関係なく、オブジェクトがメンバをいっさい持たない場合でも、上の両方の例では有効なコレクションとしてのオブジェクト(oList)が返されます(また、Count プロパティは 0 を返します)。
' Print out the number of items in the selection LogMessage oList.Count & " items are selected."
上のコードの断片では、Selection コレクション内にあるオブジェクトの数が oList.Count として与えられます。
時にはコレクションが空になることがあります。 たとえば、シーン内にあるすべての CurveLists から何も含まれていない(意図的に空にした可能性のある)コレクションを取得しようと試みた場合は、空のコレクションが返されます。
空のコレクションは、エラーの原因になることがあります。 存在していないものを検索の対象に SIFilter コマンドまたは Filter メソッドのどちらかを使用すると、nothing が返されます。 無効なオブジェクトまたはコレクション(nothing)の使用を試みると、スクリプトは失敗します。 この理由から、さらに処理を進める前に、戻り値をテストしておかなければなりません。 詳細については、「オブジェクトおよびコレクションに関する注意事項」を参照してください。
Softimage コマンドおよびオブジェクトの多くは、コレクションを使用してパラメータを保存しています。 Softimage の選択リスト全体にわたる繰り返し処理、および選択された各オブジェクトの名前のログ出力については、以下に例を示します。
VBScript を使用して、コレクションに関する情報を取得するには
VBScript では、コレクション全体にわたる繰り返し処理方法として 2 種類が用意されています。 その 1 つは、以下のように For Each ステートメントを使用します。
For Each oSel In Selection LogMessage oSel Next
コレクション内の項目のインデックス作成方法としては、前述した以外にも、以下のように For ステートメントを使用する方法があります。
Set oSelList = Selection For i = 0 To oSelList.Count - 1 LogMessage oSelList(i) Next
JScript を使用して、コレクションに関する情報を取得するには
JScript では、コレクション全体にわたる繰り返し処理方法として 2 種類が用意されています。 その 1 つは、以下のようにコレクション内の項目のインデックス作成に For ステートメントを使用します。
oSelList = Selection; for (iSel = 0; iSel < oSelList.Count; ++iSel) { LogMessage(oSelList(iSel)); }
その他、以下のように Enumerator オブジェクトを使用する方法もあります。
e = new Enumerator(Selection); for (; !e.atEnd(); e.moveNext()) { LogMessage(e.item()); }
PerlScript を使用して、コレクションに関する情報を取得するには
PerlScript では、コレクション全体にわたる繰り返し処理方法として 2 種類が用意されています。 その 1 つは、以下のように For Each ステートメントを使用します。
$oSelList = $Application->Selection; foreach $oSel (in $oSelList) { $Application->LogMessage($oSel->FullName); }
コレクション内の項目のインデックス作成方法としては、前述した以外にも、以下のように For ステートメントを使用する方法があります。
$oSelList = $Application->Selection; $iCount = $oSelList->Count; for ($iSel = 0; $iSel < $iCount; ++$iSel) { $Application->LogMessage( $oSelList->Item($iSel)->FullName); }