XSICollection

Object Hierarchy

導入

v1.0

詳細

Collection は複数のオブジェクトの"list"または"grouping"を格納するオブジェクトです。XSICollection は、通常、シーン内からのオブジェクトの一時リストを作成し、プロセスを処理するために使用されます。XSICollection の一般的な使用方法を、Shaderオブジェクトに対する例の 1 つとして示します。

XSICollection のインスタンス化は継承されず、Groupオブジェクトと違い、Sceneの一部にはなりません。XSICollection の内容を保持する方法の 1 つが、CustomProperty内のStringParameter内部のXSICollection.GetAsTextの戻り値を格納することです。

オブジェクトモデルには、その他多くのコレクションオブジェクト(PropertyCollectionParameterCollectionなど)が含まれます。これらすべてのオブジェクトを列挙することは、Item と Count プロパティを使用することと同じです。ただし、その他のコレクションのみが 1 つのタイプのオブジェクトに含まれますが、スクリプトの記述者はこれらのコレクション内でオブジェクトを追加または削除できません。このため、XSICollection の使用は多くのスクリプトの中でも最も適しています。

また各スクリプト言語は、XSICollection オブジェクトに類似している独自のArrayサポートを提供しています。この"ネイティブ"コレクションは、スクリプトの実装内では便利ですが、C++またはその他のスクリプト言語によって簡単に解釈することはできません。たとえば、カスタムCommandは、JScript配列を引数として受け取ることはできません。XSICollectionがオブジェクトの表現文字列とオブジェクトモデルの表現間で変換する機能と同じような便利な機能は、これらのコレクションオブジェクトにはありません(XSICollection.SetAsTextを参照)。

C++ API でこれに相当するオブジェクトは CRefArrayです。

メソッド

Add AddItems Expand FindObjectsByMarkingAndCapabilities
GetAsText Remove RemoveAll RemoveItems
SetAsText      
       

プロパティ

Count Item Type Unique

1. VBScript の例

Dim oColl                     ' object pointer for collection
Dim oItem                       ' for enumerating the collection
Dim iCounter            ' for looping through the collection
' Create the collection as an ActiveX object
Set oColl = CreateObject("XSI.Collection")
' Add some items to it 
oColl.Add "Camera"
oColl.Add "Light"
' You can enumerate the collection...
For Each oItem In oColl
        Application.LogMessage oItem
Next
' ... or loop through it...
For iCounter = 0 To oColl.Count - 1
        Application.LogMessage oColl(iCounter)
Next
' ... or convert it to a string expression
Application.LogMessage oColl.GetAsText
' You can also find out if the collection is unique
Application.LogMessage "Is the collection unique? -- " & oColl.Unique
'--------------------------------------------------
' Output of above script:
'INFO : "Camera"
'INFO : "light"
'INFO : "Camera"
'INFO : "light"
'INFO : "Camera,light"
'INFO : "Is the collection unique? -- False"

2. JScript の例

// Create the collection as an ActiveX object
var oColl = new ActiveXObject("XSI.Collection") ;
// Add the default camera by name
oColl.Add( "Camera" ) ;
// Add an item by its Object Model reference
var oNull = ActiveSceneRoot.AddNull() ;
oColl.Add( oNull ) ;
// You can enumerate the collection...
var eCollItems = new Enumerator( oColl );
eCollItems.moveFirst();
for (; !eCollItems.atEnd(); eCollItems.moveNext() )
{
        var oItem = eCollItems.item();
        Application.LogMessage( oItem ) ;
}
// ... or loop through it...
for (var iCounter = 0 ; iCounter < oColl.Count ; iCounter++ )
{
        Application.LogMessage( oColl(iCounter) ) ;
}
// ... or convert it to a string expression
Application.LogMessage( oColl.GetAsText() ) ;
// By default collections are not set to Unique
Application.LogMessage( "Is the collection unique? -- " + oColl.Unique ) ;
//--------------------------------------------------
// Output of above script:
//INFO : Camera
//INFO : null
//INFO : Camera
//INFO : null
//INFO : Camera,null
//INFO : Is the collection unique? -- false

3. VBScript の例

'===========================================================
' This example demonstrates how to create an XSICollection,
' how to work with collection items, and how to set the 
' get its family information 
' Create the collection and the main object to go in it
Set oXSIColl = CreateObject( "XSI.Collection" )
Set oStuff = CreatePrim( "Torus", "MeshSurface" )
' Add the object to the new collection and print out
' the family info
getMembers oStuff
' Apply an operator to make the Families seach more 
' interesting on the construction history 
ApplyOp "Twist"
' Add each operator to the collection, etc.
Set oThingey = oStuff.ActivePrimitive.ConstructionHistory
For Each s in oThingey
        getMembers s
Next
' Finally, what is in the XSICollection?
LogMessage "This collection contains these members:"
For Each c in oXSIColl
        LogMessage vbTab & c & " (" & typename( c ) & ")"
Next
'========================================================
function getMembers( in_object )
        ' Make an empty collection item and assign an 
        ' object to it.
        Set oCache = CreateObject( "XSI.CollectionItem" )
        oCache.Value = in_object
        ' Print out the family information on the new item
        aMembership = oCache.Families
        LogMessage in_object & " is a member of these families: " 
        LogMessage vbTab & aMembership & vbLf
        ' Assign the new collection item to the collection
        oXSIColl.Add oCache
end function
'========================================================
'OUTPUT:
'INFO : "torus is a member of these families: "
'INFO : "       3D Objects
'"
'INFO : "torus.polymsh.twistop is a member of these families: "
'INFO : "       Operators,DeformOperators
'"
'INFO : "torus.polymsh.geom is a member of these families: "
'INFO : "       Operators,Converters
'"
'INFO : "This collection contains these members:"
'INFO : "       torus (X3DObject)"
'INFO : "       torus.polymsh.twistop (Operator)"
'INFO : "       torus.polymsh.geom (Operator)"

関連項目

CollectionItem siBranchFlag ArgumentHandler Shader Group.AddMember Array