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