この属性によって定義されたデータを含む 1D Array オブジェクトを設定または戻します。ICEAttribute.IsConstant が true の場合、配列には定数値を含む 1 つのアイテムが含まれます。属性の構造タイプがシングルトン以外の場合は、空の配列を戻します。
// get accessor Object rtn = ICEAttribute.DataArray; // set accessor ICEAttribute.DataArray = Object; |
# # This example shows how to access all attribute data on a geometry. # from win32com.client import constants xsi = Application xsi.CreatePrim("Cone", "MeshSurface", "", "") attrs = xsi.Selection(0).ActivePrimitive.Geometry.ICEAttributes; for attr in attrs: 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; data = attr.DataArray; 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: SurfaceGeometricNormal # INFO : DataType: 16 # INFO : StructType: 1 # INFO : ContextType: 1048576 # INFO : IsDefined: False # INFO : IsConstant: False # INFO : Readonly: True # INFO : AttributeCategory: 1 # INFO : Element count: 0 # INFO : ******************************************************************* # INFO : Name: Volume # INFO : DataType: 4 # INFO : StructType: 1 # INFO : ContextType: 1 # INFO : IsDefined: True # INFO : IsConstant: True # INFO : Readonly: True # INFO : AttributeCategory: 1 # INFO : Element count: 1 # INFO : float: 3.77123618126 # etc. |
# # This example shows how to add an attribute and set its data. # from win32com.client import constants xsi = Application xsi.NewScene("", "false") xsi.CreatePrim("Cone", "MeshSurface", "", "") #Type = Vector3, context = One element per polygon. attr = xsi.Selection(0).ActivePrimitive.AddICEAttribute("MyVec3", constants.siICENodeDataVector3, constants.siICENodeStructureSingle, constants.siICENodeContextComponent2D ); attr.DataArray = [ XSIMath.CreateVector3( 1.0, 2.0, 3.0), XSIMath.CreateVector3( 4.0, 5.0, 6.0) ] #Type = String, context = One element per vertex or point. attr = xsi.Selection(0).ActivePrimitive.AddICEAttribute("MyString", constants.siICENodeDataString, constants.siICENodeStructureSingle, constants.siICENodeContextComponent0D ); c1 = "text" c2 = "why" attr.DataArray = [ c1, c2, "How" ] #Type = Quaternion, context = One element per geometry. attr = xsi.Selection(0).ActivePrimitive.Geometry.AddICEAttribute("MyQuat", constants.siICENodeDataQuaternion, constants.siICENodeStructureSingle, constants.siICENodeContextSingleton ); q1 = XSIMath.CreateQuaternion( 1.0, 2.0, 3.0, 4.0 ) attr.DataArray = [ q1 ] #Type = Rotation, context = One element per edge. attr = xsi.Selection(0).ActivePrimitive.Geometry.AddICEAttribute("MyRot", constants.siICENodeDataRotation, constants.siICENodeStructureSingle, constants.siICENodeContextComponent1D ); r1 = XSIMath.CreateRotation( XSIMath.DegreesToRadians( 70 ), XSIMath.DegreesToRadians( 40 ), XSIMath.DegreesToRadians( 45 )); attr.DataArray = [ r1, r1, r1 ] # Display the first values of the newly added attributes attrs = xsi.Selection(0).ActivePrimitive.Geometry.ICEAttributes; for attr in attrs: if attr.Name.find("My") == -1 : continue xsi.LogMessage( "*******************************************************************" ) xsi.LogMessage( "Name: " + attr.Name ) xsi.LogMessage( "Element count: " + str(attr.ElementCount) ) if attr.IsDefined == 0 : continue dataType = attr.DataType; data = attr.DataArray; i = 0 for elem in data: i += 1 if i > 4 : continue 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(round(elem.RotX)) + ":" + str(round(elem.RotY)) + ":" + str(round(elem.RotZ)) ) elif dataType == constants.siICENodeDataString: xsi.LogMessage( "String: " + elem ); # Expected results: # INFO : ******************************************************************* # INFO : Name: MyQuat # INFO : Element count: 1 # INFO : Quaternion: 1.0:2.0:3.0:4.0 # INFO : ******************************************************************* # INFO : Name: MyRot # INFO : Element count: 56 # INFO : Rotation: 70.0:40.0:45.0 # INFO : Rotation: 70.0:40.0:45.0 # INFO : Rotation: 70.0:40.0:45.0 # INFO : Rotation: 0.0:0.0:0.0 # INFO : ******************************************************************* # INFO : Name: MyString # INFO : Element count: 26 # INFO : String: text # INFO : String: why # INFO : String: How # INFO : String: # INFO : ******************************************************************* # INFO : Name: MyVec3 # INFO : Element count: 32 # INFO : Vector3: 1.0:2.0:3.0 # INFO : Vector3: 4.0:5.0:6.0 # INFO : Vector3: 0.0:0.0:0.0 # INFO : Vector3: 0.0:0.0:0.0 |