ICEAttribute.GetDataArrayChunk

Description

Returns a read-only Array object containing the data defined by this attribute. The data can be accessed in multiple chunks given an index offset that refers to the attribute's global data buffer and a chunk size. This method is particularly useful for minimizing the memory allocation required to store the data retrieved from a very large data set. An empty array is returned if the attribute's structure type is not a singleton.

Scripting Syntax

oArray = ICEAttribute.GetDataArrayChunk( Offset, ChunkSize );

Return Value

Array

Parameters

Parameter Type Description
Offset Long Index offset referring to the global data buffer.
ChunkSize Long The size of the data chunk to get.

Examples

Python Example

#
# 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 );

See Also

ICEAttribute.DataArray ICEAttribute.DataArray2D ICEAttribute.GetDataArray2DChunk