my funeral week

少しでも日々の生活に変化を。

MayaScripts_SelectFromAnimCurve:アニメーションカーブの接続先を取得

アニメーション作業中にたくさんのノードを選択して、グラフエディタ上にアニメーションカーブを表示させることってありませんか?

例えば、シーン上の全てのリグを選択し、領域ツールやリタイムツールでアニメーションのテンポ調整を行ったり・・・。

そんなとき「あれ・・・なんだこのキー?」みたいなことありません?


f:id:garysfirearms108:20200901225733j:plain:w400

該当のキーを選択し、一抹の思いをのせてフォーカス(Fキー)を押すのですが、残念ながらグラフエディタのアトリビュートリストはフォーカスに対応していません。 カーブエディタ側でアニメーションカーブの名前を表示させれば、その名前から何に接続されたカーブなのか予測できるでしょうが、めんどくさい

なので、解決する為の小スクリプトを制作しました。


SelectFromAnimCurve

単純に選択されたキーからアニメーションカーブを取得、そのDistination側の接続を辿り・・・出力されたノードをセレクションリストに置き換えるので、何に接続されたアニメーションカーブのキーなのか直ぐに分かるよってだけの内容です。

以下、ソースコード

# encoding=utf8
# -*- coding:uft-8 -*-

import pymel.core as pm

NAME = "SelectFromAnimCurve"
VERSION = "1.0"

print "\n-*- import : " + NAME + VERSION + "-*-"

def __getSelectAnimCurves ():
    """グラフエディタで選択されているAnimCurveを取得"""
    result = list()
    selection = pm.keyframe(q = True, sl = True, n = True)
    for name in selection:
        animCurve = pm.nodetypes.AnimCurve(name)
        result.append(animCurve)
    return result

def __getAnimCurveConnections (animCurves):
    """AnimCurveの接続先を取得"""
    result = list()
    for curve in animCurves:
        nodes = curve.connections(s = False)
        result.extend(nodes)
    return result

def main ():
    """グラフエディタで選択されているカーブの対象ノードを選択"""
    animCurve = __getSelectAnimCurves()
    pm.select(__getAnimCurveConnections(animCurve))


上記を「SelectFromAnimCurve」とか適当な名前のPythonファイルに保存して、以下の場所に配置してください。

C:\Users\"ユーザー名"\Documents\maya\scripts


使い方

以下のコードをシェルフなり、ホットキーなりに登録してください。

import SelectFromAnimCurve
SelectFromAnimCurve.main()

登録したら、接続先を知りたいアニメーションカーブ上のキーを選択して、実行。
次の瞬間には接続先のノードがセレクションリストに加わっているはずです。


こんなもん、いちいち作らんでもMaya側に既存の機能があるぞって時は是非声(コメント)を出して教えてください。