インデックスによってクラスタエレメント値を設定したり、戻したりします。
Cluster の場合は、要求されたクラスタインデックス(Integer)の関連ジオメトリインデックスの 1D Array に対して、読み取り専用のアクセス与えられます。この配列のサイズは、要求されたインデックスの数に等しくなります。
ClusterProperty の場合は、要求されたクラスタインデックス(Double)のデータを保持する 2D Array を取得したり、設定したりすることができます。最初の次元のサイズは、ClusterProperty に応じて異なります。たとえば、ウェイトマップの場合はエレメントは 1 つしか存在しませんが、エンベロープウェイトマップの場合はサイズはデフォーマの数と等しくなります。2 番目の次元のサイズは、要求されたインデックスの数に等しくなります。
// get accessor Object ClusterElementCollection.get_ItemsByIndex( Object vIndices ); // set accessor ClusterElementCollection.set_ItemsByIndex( Object vIndices, Object pVal ); |
パラメータ | タイプ | 説明 |
---|---|---|
Indices | Array | エレメントインデックスの配列 |
' ' 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) " |
' ' 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" |