一半君的总结纸

听话只听一半君

#84 如何查询哪些关键帧(keyframes)在Graph Editor 或者 Dope Sheet里被选中了?

你可以用 ‘keyframe’ command来得到选中的curves或者keys.

// 选中的 animCurve(s)
string $animCurves[] = `keyframe -q -name`;
// Result: pSphere1_translateX //

一个 animCurve 有可能控制着多于一个的 node/channel/其他东西. 你可以通过它的下游连接来判断这种情况:

string $effects[] = `listConnections -plugs true $animCurves[0]`;
// Result: pSphere1.translateX //

如果想找到这个key对应的value, 可以用 ‘-timeChange’ 和 ‘-valueChange’ flags:

// 这里我选中了整条 curve:

float $selectTimes[] = `keyframe -q -sl -timeChange $animCurves[0]`;
// Result: 1 60 //

float $selectValues[] = `keyframe -q -sl -valueChange $animCurves[0]`;
// Result: 0 0.5 //

// 这里我选中了frame 60的key:

float $selectTimes[] = `keyframe -q -sl -timeChange $animCurves[0]`;
// Result: 60 //

float $selectValues[] = `keyframe -q -sl -valueChange $animCurves[0]`;
// Result: 0.5 //

注意上面的例子里,是怎样查询 $animCurves array里的单条animCurve的. 如果当前选中了多于一条的 animCurve ,你就得像上面那样指明具体要查询哪一条,不然结果可能不是你想查询的那条animCurve上的. 当你想修改某条animCurve上的值的时候,这一点很重要 (下面有解说).

下面假设我已经在 Graph Editor 里选中了 frame 60 处的所有三条 translation curves上的keys.

animKey60

string $animCurves[] = `keyframe -q -sl -name`;
// Result: pSphere1_translateX pSphere1_translateY pSphere1_translateZ //

keyframe -q -sl -vc;
// Result: 1 1 1 //

keyframe -q -sl -tc;
// Result: 60 60 60 //

上面这些都只是查询,并不能修改具体某一frame处的key. 但是你可以通过查询单条曲线来分别得到 key 和 time values .

keyframe -q -sl -vc pSphere1_translateY;  // or $animCurves[1] from above
// Result: 1 //

keyframe -q -sl -tc pSphere1_translateY;  // or $animCurves[1] from above
// Result: 60 //

修改选中的 key 需要加多几步操作. 你必须通过他的 index来修改这个key, 但是你又不能查询当前选择的 index. 所以你必须查询选择的 time/value 对, 逐个检查curve上所有的time/value,直到找到选择的配对为止,然后再进行修改. 这里你必须指定想修改的 animCurve, 这样才不会修改到刚好在同样time或者同样的value有相应的key的其他某条curve上去(可能是控制另一个channel的curve).

float $allTimes[] = `keyframe -q -timeChange $animCurves[0]`;
float $allValues[] = `keyframe -q -valueChange $animCurves[0]`;

// 把选中的 key 的value 设为 0.2
for ( $i = 0; $i < `size $allTimes`; $i++ )
{
  if ( ( $allTimes[$i] == $selectTime[0] ) &&
       ( $allValues[$i] == $selectValue[0] ) )
  {
    keyframe -e -index $i -valueChange 0.2 $animCurves[0];
  }
}

综上, 用 ‘keyframe -q -sl -name’ 来找到选中的 curves, 把他们的名字保存在一个 array 里. 然后, 用‘-tc’ 来指定具体curve的名字,用 ‘-vc’ 来查询每条curve上有哪些keys被选中了. 不要用 ‘keyframe -q -sl -tc’ 选中所有的key,除非你确实想同时修改所有选中的 curves.

Related How-To’s

05 August 2002

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: