ClusterElementCollection.Array operator

説明

エレメント値の配列を設定したり、戻したりします。

Clusterの場合にこのプロパティを使用すると、各コンポーネントの関連ジオメトリインデックス(Integer)の 1DArrayに対し、読み取り専用のアクセス権が与えられます。

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

C#構文

// get accessor

Object rtn = ClusterElementCollection.Array;

// set accessor

ClusterElementCollection.Array = Object;

1. VBScript の例

dim oRoot, oGrid, oCluster, aElements

set oRoot = Application.ActiveProject.ActiveScene.Root

set oGrid = oRoot.AddGeometry("Grid","MeshSurface")

set oCluster = oGrid.ActivePrimitive.Geometry.AddCluster( _

	siPolygonCluster, "PolygonClusterOnGrid", _

	array(59,60,61))

aElements  = oCluster.Elements.Array

LogMessage "lbound(aElements,1) " & lbound(aElements,1)

LogMessage "ubound(aElements,1) " & ubound(aElements,1)

for iIndex=lbound(aElements,1) to ubound(aElements,1)

	iElement = aElements(iIndex)

	LogMessage "element(" & iIndex & ") = " & _

		oCluster.Type & "(" & iElement & ") "

next

2. JScript の例

/*

	This example demonstrates how to work with the safearray returned

	from ClusterElementCollection.Array using the GridData object

*/

// ***************************************

//

// 		SETUP

//

// Create scene with sphere

NewScene( null, false );

var obj = ActiveSceneRoot.AddGeometry( "Grid", "MeshSurface" ) ;

obj.subdivu = 2;

obj.subdivv = 1;

AddVertexColorsToMesh( obj )

// ***************************************

//

// 		FIND VERTEX COLORS

//

// Get current polygon mesh geometry

var polymesh = obj.ActivePrimitive.Geometry;    

// Returns a ClusterPropertyCollection

var vertexcolors = polymesh.VertexColors;

Application.LogMessage( vertexcolors.Count );

for ( var j=0; j<vertexcolors.Count; j++ ) { 

	// Gets a ClusterProperty

	var vertexcolor = vertexcolors(j);

	Application.LogMessage( vertexcolor.Fullname );

	// Returns a ClusterElementCollection

	var cls_prop_elems = vertexcolor.Elements;

	// Returns a VBArray

	var vbValues = cls_prop_elems.Array;

	Application.LogMessage( "# of dimensions: " + vbValues.dimensions() );

	for ( var d=1; d<=vbValues.dimensions(); d++ ) {

		Application.LogMessage( "range of dimension " + d + ": " + vbValues.lbound(d) + ".." + vbValues.ubound(d) );

	}

	// DISPLAY INFO

	var gridtable = MakeMeAPPG( vbValues );

	var canceled = InspectObj( gridtable, "", "", siModal, false );

	// CHANGE INFO

	if ( !canceled ) {

		grid_mod = gridtable.Parameters("VertexColorChart").Value;

		grid_mod.SetCell( 0, 0, 1.23 );

		DeleteObj( gridtable );

		gridtable = MakeMeAPPG( grid_mod.Data );

		// RE-DISPLAY MODIFIED INFO

		InspectObj( gridtable, "", "", siModal, false );

	}

}  

// ***************************************

//

// 		ADD VERTEX COLORS

//

function AddVertexColorsToMesh( in_Mesh ) 

{

	// Get mesh's material

	var mat = in_Mesh.Material;

	// If material is not local add one

	if ( mat.IsA(siSharedPSet) ) {

		mat = in_Mesh.AddMaterial();

	}      

	// Get polygon mesh geometry

	var polymesh = in_Mesh.ActivePrimitive.Geometry;    

	polymesh.AddVertexColor();

}

// ***************************************

//

// 		Functions to support PPG

//

function MakeMeAPPG( in_VBArray )

{

	var gprop = ActiveSceneRoot.AddProperty( "CustomProperty", false, "Visual2DArray" );			

	var gparam = gprop.AddGridParameter( "VertexColorChart" );

	var ugrid = gparam.Value;

	// Set bounds of this grid

	ugrid.ColumnCount = in_VBArray.ubound(1)+1;

	ugrid.RowCount = in_VBArray.ubound(2)+1;

	ugrid.Data = in_VBArray;

	// Set up the labels

	var tmp = new Array( "R", "G", "B", "A" );

	for ( var c=0; c<ugrid.ColumnCount; c++ ) {

		ugrid.SetColumnLabel( c, tmp[c]) ;

	}

	for ( var r=0; r<ugrid.RowCount; r++ ) {

		ugrid.SetRowLabel( r, "Cluster " + r.toString() );

	}

	// Return the Property Set (not the Grid itself)

	return gprop;

}