ICEAttribute.GetDataArrayChunk

ICEAttribute.GetDataArrayChunk

説明

この属性によって定義されたデータを含む読み取り専用の Array オブジェクトを戻します。データには、属性のグローバルデータバッファおよびチャンクサイズを参照するインデックスオフセットが設定されている複数のチャンクでアクセスできます。このメソッドは、大規模なデータセットから取得したデータを格納するためにメモリ割り当てを最小化する場合に特に便利です。属性の構造タイプがシングルトン以外の場合は、空の配列が戻されます。

C#構文

Object ICEAttribute.GetDataArrayChunk( Int32 in_nOffset, Int32 in_nSize );

スクリプト構文

oArray = ICEAttribute.GetDataArrayChunk( Offset, ChunkSize );

戻り値

Array

パラメータ

パラメータ タイプ 説明
Offset Long グローバルデータバッファを参照するインデックスオフセット。
ChunkSize Long 取得するデータチャンクのサイズ。

Python の例

#

# This example shows how to access all attribute data in chunks on a geometry.

#

from win32com.client import constants

xsi = Application

xsi.CreatePrim("Sphere", "MeshSurface", "", "")

attrs = xsi.Selection(0).ActivePrimitive.Geometry.ICEAttributes

for attr in attrs:

	if attr.StructureType != constants.siICENodeStructureSingle:

		continue

	xsi.LogMessage( "*******************************************************************" )

	xsi.LogMessage( "Name: " + attr.Name )

	xsi.LogMessage( "DataType: " + str(attr.DataType) )

	xsi.LogMessage( "StructType: " + str(attr.StructureType) )

	xsi.LogMessage( "ContextType: " + str(attr.ContextType) )

	xsi.LogMessage( "IsDefined: " + str(attr.IsDefined) )	

	xsi.LogMessage( "IsConstant: " + str(attr.IsConstant) )

	xsi.LogMessage( "Readonly: " + str(attr.IsReadonly) )

	xsi.LogMessage( "AttributeCategory: " + str(attr.AttributeCategory) )

	xsi.LogMessage( "Element count: " + str(attr.ElementCount) )

	if attr.IsDefined == 0:

		continue

	# Compute the chunk vector to access the data

	nChunkCount = 4

	nChunk = attr.ElementCount / nChunkCount

	nLastChunk = attr.ElementCount % nChunkCount

	chunks = []

	for i in range(nChunkCount):

		chunks.append( nChunk )

	chunks.append( nLastChunk )

	nOffset = 0	

	dataType = attr.DataType		

	for i in range(len(chunks)):

		nChunk = chunks[i]

		if nChunk == 0:

			continue;

		xsi.LogMessage( ">>>>offset: " + str(nOffset) + " chunk size: " + str(nChunk) )			

		data = attr.GetDataArrayChunk( nOffset, nChunk );

		nOffset += nChunk

		for elem in data:

			if dataType == constants.siICENodeDataFloat:

				xsi.LogMessage( "float: " + str(elem) )

			elif dataType == constants.siICENodeDataLong: 

				xsi.LogMessage( "long: " + str(elem) )

			elif dataType == constants.siICENodeDataBool: 

				xsi.LogMessage( "bool: " + str(elem) )

			elif dataType == constants.siICENodeDataVector3: 

				xsi.LogMessage( "Vector3: " + str(elem.X) + ":" + str(elem.Y) + ":" + str(elem.Z) )

			elif dataType == constants.siICENodeDataQuaternion: 

				xsi.LogMessage( "Quaternion: " + str(elem.W) + ":" + str(elem.X) + ":" + str(elem.Y) + ":" + str(elem.Z) )

			elif dataType == constants.siICENodeDataRotation: 

				xsi.LogMessage( "Rotation: " + str(elem.RotX) + ":" + str(elem.RotY) + ":" + str(elem.RotZ) )

			elif dataType == constants.siICENodeDataMatrix33: 

				xsi.LogMessage( "Matrix33:" );

				xsi.LogMessage( str(elem.Value(0,0)) + ":" + str(elem.Value(0,1)) + ":" + str(elem.Value(0,2)) )

				xsi.LogMessage( str(elem.Value(1,0)) + ":" + str(elem.Value(1,1)) + ":" + str(elem.Value(1,2)) )

				xsi.LogMessage( str(elem.Value(2,0)) + ":" + str(elem.Value(2,1)) + ":" + str(elem.Value(2,2)) )

			elif dataType == constants.siICENodeDataMatrix44: 

				xsi.LogMessage( "Matrix44:" );

				xsi.LogMessage( str(elem.Value(0,0)) + ":" + str(elem.Value(0,1)) + ":" + str(elem.Value(0,2)) + ":" + str(elem.Value(0,3)))

				xsi.LogMessage( str(elem.Value(1,0)) + ":" + str(elem.Value(1,1)) + ":" + str(elem.Value(1,2)) + ":" + str(elem.Value(1,3)))

				xsi.LogMessage( str(elem.Value(2,0)) + ":" + str(elem.Value(2,1)) + ":" + str(elem.Value(2,2)) + ":" + str(elem.Value(2,3)))

				xsi.LogMessage( str(elem.Value(3,0)) + ":" + str(elem.Value(3,1)) + ":" + str(elem.Value(3,2)) + ":" + str(elem.Value(3,3)))

			elif dataType == constants.siICENodeDataColor4: 

				xsi.LogMessage( "Color:" );

				xsi.LogMessage( str(elem.Red) + ":" + str(elem.Green) + ":" + str(elem.Blue) + ":" + str(elem.Alpha) )

			elif dataType == constants.siICENodeDataString: 

				xsi.LogMessage( "String: " + elem );

関連項目

ICEAttribute.DataArray ICEAttribute.DataArray2D ICEAttribute.GetDataArray2DChunk