2022から追加された componentTag
アトリビュートエディタ以外からの編集方法がよくわからなかったので、
とりあえず自前で何とかしてみようかと
観察
inputのindexと、outputGeometryのindexは一致してるのかしら?
とりあえずやってみる
デフォーマーの影響下にあるシェイプのcomponentTagを任意の物に指定したい。
ので
- オブジェクト名からデフォーマー内のinputのindexを特定
- input/componentTagExpression に 任意のcomponentTagをセットする
という感じで。
オブジェクト名からデフォーマー内のinputのindexを特定
安易に考えると、
listConnections で outputGeometory の先を確認するか、
input[n].inputGeometory でソースを取ってlistRelativesとか
なんですが
このようなケースの場合
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))
setComponentTagExp("pSphere3","ffd1")
##pSphere3
##6
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")
まとめ
- 正規のやり方・コマンドないのかなぁ・・・きっとあるはず
- こんぽーねんとたぐぅ?? とか思ってましたが、これはこれで便利な気がしてきた