GetDataArrayChunk (ICEAttribute)

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

    ICEAttribute.GetDataArrayChunk( Offset, ChunkSize )

C# Syntax

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

Parameters

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

Return Value

Array

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

See Also

ICEAttribute.DataArray | ICEAttribute.DataArray2D | ICEAttribute.GetDataArray2DChunk

Autodesk Softimage v7.5