ICEAttribute.DataArray

説明

この属性によって定義されたデータを含む 1D Array オブジェクトを設定または戻します。ICEAttribute.IsConstant が true の場合、配列には定数値を含む 1 つのアイテムが含まれます。属性の構造タイプがシングルトン以外の場合は、空の配列を戻します。

C#構文

// get accessor

Object rtn = ICEAttribute.DataArray;

// set accessor

ICEAttribute.DataArray = Object;

1. Python の例

#

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

2. Python の例

#

# 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).ActivePrimitive2.AddICEAttribute("MyVec3", constants.siICENodeDataVector3, constants.siICENodeStructureSingle, constants.siICENodeContextComponent2D );

myDataArray = [ XSIMath.CreateVector3( 0.0, 0.0, 0.0 ) ] * attr.ElementCount

myDataArray[0] = XSIMath.CreateVector3( 1.0, 2.0, 3.0 )

myDataArray[1] = XSIMath.CreateVector3( 4.0, 5.0, 6.0 )

attr.DataArray = myDataArray

#Type = String, context = One element per vertex or point.

attr = xsi.Selection(0).ActivePrimitive2.AddICEAttribute("MyString", constants.siICENodeDataString, constants.siICENodeStructureSingle, constants.siICENodeContextComponent0D );

myDataArray = [ "" ] * attr.ElementCount

myDataArray[0] = "text"

myDataArray[1] = "why"

myDataArray[2] = "How"

attr.DataArray = myDataArray

#Type = Quaternion, context = One element per geometry. 

attr = xsi.Selection(0).ActivePrimitive2.Geometry.AddICEAttribute("MyQuat", constants.siICENodeDataQuaternion, constants.siICENodeStructureSingle, constants.siICENodeContextSingleton );

myDataArray = [ XSIMath.CreateQuaternion( 1.0, 2.0, 3.0, 4.0 ) ] * attr.ElementCount

myDataArray[0] = XSIMath.CreateQuaternion( 1.0, 2.0, 3.0, 4.0 )

attr.DataArray = myDataArray

#Type = Rotation, context = One element per edge. 

attr = xsi.Selection(0).ActivePrimitive2.Geometry.AddICEAttribute("MyRot", constants.siICENodeDataRotation, constants.siICENodeStructureSingle, constants.siICENodeContextComponent1D );

myDataArray = [ XSIMath.CreateRotation( 0.0, 0.0, 0.0 ) ] * attr.ElementCount

myDataArray[0] = XSIMath.CreateRotation( XSIMath.DegreesToRadians( 70 ), XSIMath.DegreesToRadians( 40 ), XSIMath.DegreesToRadians( 45 ) )

myDataArray[1] = myDataArray[0]

myDataArray[2] = myDataArray[0]

attr.DataArray = myDataArray

# Display the first values of the newly added attributes

attrs = xsi.Selection(0).ActivePrimitive2.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)

関連項目

ICEAttribute.DataArray2D ICEAttribute.GetDataArrayChunk ICEAttribute.GetDataArray2DChunk