ノードのアトリビュートは、ノードで使用されるデータを定義します。ノードのアトリビュートで定義されていないデータをノードで使用してはなりません。
アトリビュート名は、ノード階層全体で一意である必要があります。つまり、ノードのすべての派生クラスと親クラスで一意である必要があります。ただし、関連のないノード間で同じアトリビュート名を再利用することはできます。
アトリビュートを定義する場合は、アトリビュートのタイプと名前を定義する必要があります。さまざまなタイプのアトリビュートで複数の関数セットを使用することができます。これらはすべて MFnAttribute から継承されます。必要なアトリビュート タイプのクラスが存在しない場合は、MFnTypedAttribute または MFnGenericAttribute を使用できます。
アトリビュートは、ノードの initialize() 関数でノードに作成され、設定され、追加されます。
ノードが使用するアトリビュート タイプごとに、アトリビュート関数セットを宣言する必要があります。常に、アトリビュートが処理するデータのタイプに対応するアトリビュート関数セットを使用してください。
例:
MFnNumericAttribute numericAttr; MFnTypedAttribute typedAttr;
各アトリビュート関数セットを使用して、複数のアトリビュートを作成することができます。つまり、アトリビュートごとにアトリビュート関数セットを宣言する必要はありません。アトリビュート タイプごとにアトリビュート関数セットを宣言するだけで済みます。
次のアトリビュートを作成する前に、アトリビュートのすべての特性を設定する必要があります。
output = nAttr.create("output", "out", MFnNumericData::kFloat, 0.0); nAttr.setWritable(false); nAttr.setReadable(true); nAttr.setStorable(false); input1 = nAttr.create("input1", "in1", MFnNumericData::kFloat, 0.0); nAttr.setStorable(false); nAttr.setWritable(true); nAttr.setReadable(false); input2 = nAttr.create("input2", "in2", MFnNumericData::kInt, 2); nAttr.setStorable(false); nAttr.setWritable(true); nAttr.setReadable(false);
アトリビュートの使用方法は、アトリビュートの特性で指定されます。アトリビュートが入力アトリビュートであるのか、出力アトリビュートであるのか、またはグラフを実行するときにアトリビュートの値が保持されるのかを決定する特性を設定するには、setWritable()、setReadable()、setStorable() を使用します。
setReadable() | trueに 設定すると、アトリビュートは出力アトリビュートになります。接続先のノードからこの値を読み取ることができます。既定では、アトリビュートは読み取り可能です。入力ノードには setReadable(false) を指定する必要があります。 |
setWritable() | trueに 設定すると、アトリビュートは入力アトリビュートになります。このアトリビュートに接続されたノードは、このアトリビュートに値を書き込むことができます。既定では、アトリビュートは書き込み可能です。出力ノードには setWriteable(false) を指定する必要があります。 |
setStorable() | false に設定すると、グラフを実行するときにアトリビュートの値が保持されことはなくなります。既定では、アトリビュートは保存可能です。 |
アトリビュート特性の完全なリストについては、MFnAttribute のドキュメントを参照してください。
attributeAffects() を使用して、アトリビュート間の依存関係を設定します。この情報は、評価グラフを作成する場合に使用されます。
attributeAffects(input1, output); attributeAffects(input2, output);
最後に、addAttribute() 関数を使用してノードにアトリビュートを追加します。
addAttribute(input1); addAttribute(input2); addAttribute(output);