ClusterElementCollection.ItemsByIndex operator

説明

インデックスによってクラスタエレメント値を設定したり、戻したりします。

Cluster の場合は、要求されたクラスタインデックス(Integer)の関連ジオメトリインデックスの 1D Array に対して、読み取り専用のアクセス与えられます。この配列のサイズは、要求されたインデックスの数に等しくなります。

ClusterProperty の場合は、要求されたクラスタインデックス(Double)のデータを保持する 2D Array を取得したり、設定したりすることができます。最初の次元のサイズは、ClusterProperty に応じて異なります。たとえば、ウェイトマップの場合はエレメントは 1 つしか存在しませんが、エンベロープウェイトマップの場合はサイズはデフォーマの数と等しくなります。2 番目の次元のサイズは、要求されたインデックスの数に等しくなります。

パラメータ

パラメータ タイプ 詳細
Indices Array エレメントインデックスの配列

1. VBScript の例

'
' This example shows how to use ItemsByIndex on a Cluster
'
dim oRoot, oGrid, oCluster, aValues, iElement
set oRoot = Application.ActiveProject.ActiveScene.Root
set oGrid = oRoot.AddGeometry("Grid","MeshSurface")
set oCluster = oGrid.ActivePrimitive.Geometry.AddCluster( _
                                        siPolygonCluster, "PolygonClusterOnGrid", _
                                        array(59,60,61))
'Ask for items 0,1,2 of the cluster - which corresponds to
'pnt 59,60,61.  In fact this is the entire cluster.
aValues = oCluster.Elements.ItemsByIndex( Array(0,1,2) )
'Show the ranges of the returned 1-dimensional array
LogMessage "lbound(aValues,1) = " & lbound(aValues,1)
LogMessage "ubound(aValues,1) = " & ubound(aValues,1)
'Print out the geometry indices of the requested cluster
'elements
for iIndex=lbound(aValues,1) to ubound(aValues,1)
        iElement = aValues(iIndex)
        LogMessage "element(" & iIndex & ") = " & _
                        oCluster.type & "(" & iElement & ") "
next
' Output of above script:
'INFO : "lbound(aValues,1) = 0"
'INFO : "ubound(aValues,1) = 2"
'INFO : "element(0) = poly(59) "
'INFO : "element(1) = poly(60) "
'INFO : "element(2) = poly(61) "

2. VBScript の例

'
' This example demonstrates how to use ClusterElementCollection.ItemsByIndex to read 
' and write values on a VertexColor ClusterProperty object
'
NewScene ,false
set oSphere = ActiveSceneRoot.AddGeometry("Sphere","MeshSurface")
SelectObj oSphere
'This command will create a complete sample cluster
'and a cluster property called MyVertexColor
CreateVertexColorSupport , "MyVertexColor"
set oClusters = oSphere.ActivePrimitive.Geometry.Clusters
set oVertexColors = oClusters(0).LocalProperties( "MyVertexColor" )
'Get the RGB values on sample point 2 and 3.
'This returns a 2-dimensional array, with the RGBA values
'for the two samples we request.
ElArray = oVertexColors.Elements.ItemsByIndex( Array( 2, 3 ) )
'Set the G value at Sample 2
ElArray( 1, 0 ) = 0.0
'Set the B value at Sample 2
ElArray( 2, 0 ) = 0.5
'Set the R value at Sample 3
ElArray( 0, 1 ) = 0.3
'Set the A value at Sample 3
ElArray( 3, 1 ) = 0.2
'Assign our changes back
oVertexColors.Elements.ItemsByIndex( Array( 2, 3 ) ) = ElArray
'Double check by looking at the entire array
AllRGBAValues = oVertexColors.Elements.Array
logmessage "G Value at Sample 2: " & Round( AllRGBAValues( 1, 2 ), 1 )
logmessage "B Value at Sample 2: " & Round( AllRGBAValues( 2, 2 ), 1 )
logmessage "R Value at Sample 3: " & Round( AllRGBAValues( 0, 3 ), 1 )
logmessage "A Value at Sample 3: " & Round( AllRGBAValues( 3, 3 ), 1 )
'Output of this script:
'INFO : "G Value at Sample 2: 0"
'INFO : "B Value at Sample 2: 0.5"
'INFO : "R Value at Sample 2: 0.3"
'INFO : "A Value at Sample 2: 0.2"