2025年11月17日月曜日

グラフエディタで選択しているアニメカーブのオブジェクトを選択する

 アニメーションを作成していると、たまに、選択しているアニメカーブからオブジェクトを選択したくなることがあります。

 こういった大量に表示されているアニメカーブの中で、選択しているアニメカーブのオブジェクトを選択するスクリプトを作ってみます。 

 ここでは、グラフエディタ上のアニメカーブの情報を取得する keyframeコマンドを使用します。ドキュメントはなかなか難解な事が書かれていて、どのフラグを使えば良いか悩んでしまいますが、今回使用するフラグは -nameになります。しかし、アニメカーブが選択されていないと、表示されているカーブ名が全て返ってきてしまうので、-selectedも一緒に使うのが安全です。

サンプルコードは、こんな感じ。

/* 選択しているアニメカーブからオブジェクトを選択する */
{
    string $anmCrvs[]=`keyframe -q -sl -n`;
    select -cl;
    for($anmCrv in $anmCrvs)
    {
        string $ds[]=`listConnections -d 1 $anmCrv`;
        select -add $ds[0];
        
    }
    
}

 このスクリプトがやっている事としては、グラフエディタで選択している animCurveノード名を調べ、outputが接続しているノードを選択しています。ノードエディタでみると、こんな感じでノードを選択している按配です。

 単純に animCurve.outputの接続先ノードを選択の対象としているだけなので、特殊なことをしている場合に不具合が起きます。
 例えば、下のように ChannelBoxが緑のハイライトになっている場合。

  このノードの接続をノードエディタで確認すると、

 コンストレイントのウェイト調整のため、animCurveノードと transformノードの間に pairBrendノードが挟まっています。このためアニメーションしているノードではなく、この pairBrendノードが選択されることになります。
 これを回避するためには、接続先の nodeTypeを調べ、transformノードになるまで distenation側を辿っていく処理を加える必要があります。



0 件のコメント:

コメントを投稿