Returns a 2D read-only Array object containing the 2D data defined by this attribute. If ICEAttribute.IsConstant is true, the array has only one item which contains the constant value. Returns an empty array if the attribute's structure type is not an array.
# # This example demonstrates how to extract the 2D Array data 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 dataType = attr.DataType data2D = attr.DataArray2D for data in data2D: 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 ); # Expected results: # INFO : ******************************************************************* # INFO : Name: EnvelopeWeightsPerDeformer # INFO : DataType: 4 # INFO : StructType: 2 # INFO : ContextType: 2 # INFO : IsDefined: True # INFO : IsConstant: False # INFO : Readonly: False # INFO : AttributeCategory: 1 # INFO : Element count: 26 # INFO : float: (0.0, 0.0, 0.0) # INFO : float: (0.0, 0.0, 0.0) # INFO : float: (0.0, 0.0, 0.0) # INFO : float: (0.0, 0.0, 0.0) # INFO : float: (0.0, 0.0, 0.0) # etc. |