この属性によって定義されたデータを含む読み取り専用の 2D Array オブジェクトを戻します。データには、グローバルデータバッファおよびチャンクサイズを参照するインデックスオフセットが設定されている複数のチャンクでアクセスできます。このメソッドは、大規模なデータセットから取得したデータを格納するためにメモリ割り当てを最小化する場合に特に便利です。属性の構造タイプが2D 配列以外の場合は、空の配列が戻されます。
Object ICEAttribute.GetDataArray2DChunk( Int32 in_nOffset, Int32 in_nSize ); |
oArray = ICEAttribute.GetDataArray2DChunk( Offset, ChunkSize ); |
2DArray
# # 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 ); |