コレクションを使用する

 
 
 

コレクションとは、オブジェクトのグループをいいます。 たとえば、コレクションとして保存されるものとしては、選択リストがあります。

' 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);
}

Python を使用して、コレクションに関する情報を取得するには<

Python では、For ステートメントを使用したコレクション全体にわたる繰り返し処理をサポートしています。以下のようにして、コレクション内の項目のインデックスが作成されます。

oSelList = Application.Selection
for iSel in range(oSelList.Count):
   Application.LogMessage(oSelList.Item(iSel).FullName)