## ICEAttribute.GetDataArray2DChunk

### Description

Returns a read-only 2D 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 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 2D array.

### C# Syntax

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

### Scripting Syntax

    oArray = ICEAttribute.GetDataArray2DChunk( Offset, ChunkSize );

### Return Value

2D Array

### Parameters

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

### Examples

#### Python Example

    #
    # This example shows how to get all attribute 2D data in chunks from an envelope weight property.
    #
    from win32com.client import constants
    xsi = Application
    cone = xsi.CreatePrim("Cone", "MeshSurface", "", "")
    xsi.Create2DSkeleton(2.90328069018741, 3.34950957748764, -0.334950957748767, 4.73127223586102, -8.03882298597018E-02, 8.03882298597003E-03, -5.71059313749964, 0, 0, 4, "", "")
    xsi.AppendBone("eff", 3.70974754857278, -3.02795665804866, 0.302795665804869, "")
    xsi.ApplyFlexEnv( "cone;bone,bone1,eff", -1 )
    xsi.SelectObj("cone.polymsh.cls.EnvelopWeightCls.Envelope_Weights", "", "")
    attrs = xsi.Selection(0).ICEAttributes;
    # Make sure the envelope weight data is generated
    cone.ActivePrimitive.GetGeometry( 0 )
    for attr in attrs:
            if attr.StructureType != constants.siICENodeStructureArray:
                    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
            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.GetDataArray2DChunk( 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.GetDataArrayChunk