[OpenMaya] Attributeを作成する

MelのAddAttrだと int float string enum ぐらいしか作れませんが、Pluginだと割と好き放題作れるようなので調べてみました。

アトリビュート作成は、

この三段階が基本の形になります。
どんなアトリビュートの形が必要なのかに応じて、関数セットを作成し、createします。

ここでいうアトリビュートの型とは、string や float という型ではなく、
Rampなのか、配列アトリビュートなのか、Matrixアトリビュートなのか、のような
もっと大きな枠での型になります。

string や float 等のような型は、 create の3つめの引数で指定します。
指定方法は MFnData の メンバ変数(?)を使用します。 例) MFnNumericData.kDouble 等

 

できあがったトリビュートの一覧。

Melにない特殊なアトリビュートのうち、おもしろそう(使えそう)だったのが
MFnCompoundAttribute
Attributeの親子化 をすることが可能で、↑のように、親子化したアトリビュートを
増減させることができます。
子供アトリビュートを増やす場合は、普通にアトリビュートを定義した後、addAttribute ではなく
nAttr.addChild(strAttr) でaddChildしてあげれば好きに増やすことが出来るようです。

地味に迷ったのが、String型のアトリビュート。
関数セットは MFnTypedAttribute を使用、デフォルト値の作成にはMFnStringData を使用
型は MFnData.kString  という感じで、他の数値とはちょっと違うので探すのに時間がかかりました。
NumericDataのなかにkChar とかがあったので、はじめはコレかなぁと思ったのですが違いました(´・ω・`)

サンプルでは、CompoundAttribute に、String アトリビュートをくっつけてますが、
コメントアウトしてある cls.addAttribute(cls.strAttr) の # を外して
nAttr.addChild(strAttr) にコメントアウトすれば、普通のStringアトリビュートになります。

とりあえず、作るところはだいぶわかったので
次はこのアトリビュートを取得するほうを色々試してみようと思います。

 

コメントを残す

メールアドレスが公開されることはありません。


*