0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MayaAdvent Calendar 2022

Day 22

componentTagをデフォーマーにセットする

Posted at

2022から追加された componentTag
アトリビュートエディタ以外からの編集方法がよくわからなかったので、
とりあえず自前で何とかしてみようかと

観察

アトリビュートエディタで足して
image.png

わかりやすくアトリビュートがおりました
image.png

デフォーマーの方は
image.png

あー多分こいつだな
image.png

inputのindexと、outputGeometryのindexは一致してるのかしら?
image.png

とりあえずやってみる

デフォーマーの影響下にあるシェイプのcomponentTagを任意の物に指定したい。

ので

  • オブジェクト名からデフォーマー内のinputのindexを特定
  • input/componentTagExpression に 任意のcomponentTagをセットする

という感じで。

オブジェクト名からデフォーマー内のinputのindexを特定

安易に考えると、
listConnections で outputGeometory の先を確認するか、 
input[n].inputGeometory でソースを取ってlistRelativesとか
なんですが

安易だった
image.png

このようなケースの場合
outputGeometory だと ffd1の場合は探せない
inputGeometory だと ffd2の場合は探せな

一旦リファレンス確認

ん~

cmds.deformer(deformer,q =True,g=True)

これで対象のshapeは取れそう

indexはこっちかな?

cmds.deformer(deformer,q =True,gi=True)
def setComponentTagExp(target,deformer):
    index = cmds.deformer(deformer,q =True,gi=True)
    outputShapes = cmds.deformer(deformer,q =True,g=True)

    for i,outputShape in zip(index,outputShapes): 
        outputTransform = cmds.listRelatives(outputShape,p=True)[0]

        if outputTransform != target:
            continue
        print(target)
        print(str(i))

こんな状態でテスト
image.png

setComponentTagExp("pSphere3","ffd1")
##pSphere3
##6

多分大丈夫
image.png

input/componentTagExpression に 任意のcomponentTagをセットする

componentTagExpression はシンプルにstringなようなので

def setComponentTagExp(target,deformer,tagExp):
    index = cmds.deformer(deformer,q =True,gi=True)
    outputShapes = cmds.deformer(deformer,q =True,g=True)

    for i,outputShape in zip(index,outputShapes): 
        outputTransform = cmds.listRelatives(outputShape,p=True)[0]

        if outputTransform != target:
            continue
    
        cmds.setAttr(
                deformer+".input["+str(i)+"].componentTagExpression",
                tagExp,
                type = "string"
        )

実行してみる

setComponentTagExp("pSphere3","ffd1","hoge")

hogeったー
image.png

tagによる影響範囲も機能してるっぽい
image.png

まとめ

  • 正規のやり方・コマンドないのかなぁ・・・きっとあるはず
  • こんぽーねんとたぐぅ?? とか思ってましたが、これはこれで便利な気がしてきた
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?