アニメーションを作成していると、たまに、選択しているアニメカーブからオブジェクトを選択したくなることがあります。
こういった大量に表示されているアニメカーブの中で、選択しているアニメカーブのオブジェクトを選択するスクリプトを作ってみます。
ここでは、グラフエディタ上のアニメカーブの情報を取得する 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 件のコメント:
コメントを投稿