« Maya様のUI の文字が小さ過ぎて激怒。 | トップページ | 憤怒の数値入力は フルキーEnter でポン。 »

2016年12月15日 (木)

タイムスライダの選択領域を取得。

Maya のタイムスライダで、現在選択されている領域のスタートフレームとエンドフレームを取得したかったんです。 のメモ。


↓ これです。 この赤い領域のフレーム範囲が欲しい。

Mayatimeslider




MELバージョン:
$rangeArray = `timeControl -q -rangeArray $gPlayBackSlider`;
print ( "MEL ver : すたあと: " + $rangeArray[0] + "  えんど:" + $rangeArray[1] );

こういうことらしい。 timeControl コマンド-rangeArray フラグをオンにすると、結果が array として得られるんですね。 array の 0 個目がスタートフレーム、1 個目がエンドフレームということですね。 gPlayBackSlider というのが、UI 上のタイムスライダを表している、ということなんでしょうね。


Mayatimesliderstartendmel


こうやればできるよ、と人に教えてもらっただけなので、あとはもう、マニュアル見たり、実行した時の挙動を見て理解していくしかありません。いつものパターンですね。 これで合ってますか? 何か間違いがあったらご指摘ください。






Pythonバージョン:
import maya.cmds as mc
import maya.mel
aPlayBackSliderPython = maya.mel.eval('$tmpVar=$gPlayBackSlider')
rangeArray = mc.timeControl( aPlayBackSliderPython, q=True, rangeArray=True)
print ( "Python ver : すたあと: " + str(rangeArray[0]) + "  えんど:" + str(rangeArray[1]) );


うーむ、これでいいのかなあ・・・・。 一応、望んだ挙動にはなっています。 ただ、eval とか使ってる3行目が、なんかわかりにくいというか、美しくないというか、気に入らないですよねえ。 タイムスライダの取得ってこんな風にやるしかないのでしょうか? このコードは、マニュアルに載っていたものをただパクっただけです。 

http://help.autodesk.com/cloudhelp/2017/ENU/Maya-Tech-Docs/CommandsPython/timeControl.html

一番下の、サンプルコードの中からパクりました。 グーグルで検索してみても、どうやらみなさんこの書き方をしているように見えなくもない。 うーん、なんか美しくない気がする。 もっといい書き方があれば是非教えて下さい。




俺にこの timeControl コマンドを教えてくれた人から、「スタートとエンドを取得していったい何をするの?」 と聞かれましたが、そりゃもう、いろいろです。 独自のお作法・手順を盛り込んだ自作 PlayBlast スクリプトを使うこともあるんですが、時間選択範囲だけを PlayBlast したい時とかね。 あとは、単純に、選んだ領域をシーンのプレイバックのスタートエンドに一発で設定したいとかね。 独自のアニメーション Bake スクリプトなんかにも使えそうですね。色々です。





.



|

« Maya様のUI の文字が小さ過ぎて激怒。 | トップページ | 憤怒の数値入力は フルキーEnter でポン。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: タイムスライダの選択領域を取得。:

« Maya様のUI の文字が小さ過ぎて激怒。 | トップページ | 憤怒の数値入力は フルキーEnter でポン。 »