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