3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

addAttrのcompoundを使うと夢が広がる

overrideEnabledやoverrideDisplayType…
これらは現場で働く人なら必ずしもよく触れると思います。

私の場合はsetsを作りそこにoverrideEnabled等を追加して、
TransformノードやShapeにコネクトしていました。
CompoundではなくLeafでコネクトしてたということですね。

今日気づいたのは、
ソース側にCompoundでdrawOverrideのアトリビュートを追加して、
ターゲット側のdrawOverride(Compound)にコネクトする。

LeafでコネクトしてたのをCompoundで繋ぐってことだけなんですが…

~~ CompoundとLeafについて ~~~~~~~~~~~~~~~~~~~~~~~~
Leafというのは勝手に言ってるだけですが、
Mayaのアトリビュートは以下のように作られているものもあります。
Translate (Compound)
├ TranslateX (Leaf)
├ TranslateY (Leaf)
└ TranslateZ (Leaf)
こういったものをCompound、Leafと別々に呼ぶようにしたかっただけです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

例えば、
1. sets_display というobjectSetを作成

sets = cmds.sets(n="sets_display",em=True)

2. display_sets にコンパウンドアトリビュートを追加

cmds.addAttr(sets, longName='drawOverride', numberOfChildren=8, attributeType='compound' )
cmds.addAttr(sets,  longName='overrideEnabled',at="bool", dv=0, parent='drawOverride' )
cmds.addAttr(sets,  longName='overrideDisplayType',at="enum", en="Normal:Template:Reference", parent='drawOverride' )
cmds.addAttr(sets,  longName='overrideLevelOfDetail',at="enum", en="Full:BoundingBox", parent='drawOverride' )
boolAttrs = ["Shading","Texturing","Playback","Visibility"]
for attr in boolAttrs:
    cmds.addAttr(sets,  longName='override%s' %attr, at="bool",dv=1, parent='drawOverride' )
cmds.addAttr(sets, longName='overrideColor',at="byte",dv=0, parent='drawOverride')

これでsets_displayのExtraAttributes内は以下のような状態になります。
f:id:blendcomp:20150120230954j:plain

これで後は、
sets_display.drawOverride と 対象のトランスフォームノード.drawOverride
をコネクトするだけです。

こっちの方がコネクションが1本で管理できますし、
少しは軽い?かもしれないのでいいかもしれませんね。

そんなかるーいTipsでした。マニアックなお話ですがお試しあれ~。