Maya Pythonでアトリビュート値を取得・設定する

こんにちは、M.Sです。

弊社ではMelとPythonを使用してMaya作業の効率化を図っているのですが、
今回は初めてPythonのコードで、アトリビュートの数値を設定しようとした際に
躓いてしまったこととその解決法についてご紹介したいと思います。

是非、参考になれば幸いです。

getAttrとsetAttr

Mayaでアトリビュートの数値を取得する際、基本的にはgetAttrで数値を取得します。
こういった場合、トランスフォーム名の後ろに取得したいアトリビュートを指定する必要があります。

#指定したトランスフォームのX軸の回転の数値を取得
import maya.cmds as cmds
cmds.getAttr(トランスフォーム名+'.rotateX')

このようにトランスフォーム名の後ろにアトリビュートを指定することで、その数値を取得することができます。

それはsetAttrでも基本的な構成は同じで、下記のコードのように、
トランスフォーム名 + アトリビュート + そこに入力したい数値、でその数値を自動で入力することができます。

#指定したトランスフォームをX軸に90度回転
import maya.cmds as cmds
cmds.setAttr(トランスフォーム名+'.rotateX',90)

次はアトリビュートを数値をすべて取得した場合のそれぞれの抽出方法、
アトリビュートのXYZをまとめて入力する方法をご紹介します。

まとめて設定・取得する方法

setAttrとgetAttrを使用しているとまとめて取得、入力を行いたい時があります。
その場合、下記のようなコードでアトリビュート値をまとめて取得することができます。

・setAttrの場合
#指定したトランスフォームの回転値の数値を設定
import maya.cmds as cmds
cmds.setAttr(トランスフォーム名+'.rotate', 0.0, 0.0, 0.0)
・getAttrの場合
#指定したトランスフォームの回転値の数値を取得
import maya.cmds as cmds
cmds.getAttr(トランスフォーム名+'.rotate')

上記のコードの説明では後ろにXをつけましたが、今回はrotateをそのまま使用しています。
setAttrの場合は数値入力の際にカンマで区切りつつ、3つ数値を入れることで数値を設定することができます。

getAttrの場合は少し特殊で、取得した数値は上記のような形になります。

[(0.0, 0.0, 0.0)]

次はこの数値をどのように取り出すことができるか説明したいと思います。

リストとタプルで取得されるアトリビュート値

この形で取得するとリストの中にタプルがあり、その中に数値がある状態になります。
このリストとタプルが少々複雑で手間取ってしまうのですが、
今回はリストとタプルについては省略して、取得の仕方をメインで説明したいと思います。

例として、下記のようなコードで数値を取り出すことができます。

#指定したトランスフォームの回転値の数値を取得後、Z軸の回転値のみ取得。
import maya.cmds as cmds
rot=cmds.getAttr(トランスフォーム名+'.rotate')
rotZ=rot[0][2]

上記のコードは数値を取得後”[0]””[2]”で数値を取り出しています。
→[]内の数値は以下のようになります。
“[0]”:リストの先頭を取得
“[2]”:取得したリストの先頭のタプル内からZ軸の数値を取得
[0][2]という形で変数の後ろに並べることで”[( )]”で取得された数値を取り出すことができます。

まとめ

getAttrとsetAttrはMayaでツールを作成する際によく使用しているので、復習の意も込めて記事の内容にさせていただきました。
リストとタプルの部分に関しては意外と単純なのですが、Pythonを初めたての時に躓いてしまった箇所なので、同じ箇所で悩んでる方の一助になれば幸いです。
最後までお読み頂きありがとうございました。それでは良い一日を