- 2009/01/15 02:35
- Python
MayaでPython使って、
Undo効かねぇぇぇぇぇぇぇぇええぇぇええぇえっっ!!
ってなった方いませんか。
いますよね。知ってます。
僕もあれには苦しまされ、挙句の果てには結局MEL発行してしまいました。ギャーーー
あれって、
cmds.button(l="PUSH", c=func)
とするからダメみたいなんです。
cmds.button(l="PUSH", c="func()")
とすれば、OKです。
関数単位でのUndoが効くようになります。
違いは、コールバック関数を文字列で渡すか渡さないか、です。
文字列で渡してグローバルで実行されれば、Undoは問題なく効くようです。
逆に関数オブジェクトを渡してしまうと終了です。for文なんかあった日にはもうアレです。
でも文字列で渡すにしても、関数までのパスの記述とか、かなり面倒な問題もあるので、
これが最善だ!という方法はないかも。
好みの問題もあるでしょうし、、、
1番簡単なのは、とりあえず実行したい関数をグローバルの関数でラップするとかだと思います。
ラップするまでもなくグローバルに置けるならそれでもいいんですが。
でもlambdaなどを使って情報渡してたりすると、ラッピングするだけでもエラい面倒ですよね、多分。
となるとそういうのを避けつつ開発を、、ってことになるので、いやまぁ面倒です。
MEL発行するも良し、グローバル変数でラップするも良し、独自のコールバック関数書くでも良し、
いっそのことUndoなんて見捨てるも良し(ダメ)、各々お好きするが良いです。
僕は次必要になったら考えます。
が、良い方法ご存知の方いたら是非教えてください。
つーか頑張れMaya、、、
どんな理由をつけてもユーザー的にこれは完全なバグ。
- Newer: 2月のセミナー情報
- Older: Realise Studio
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.taikomatsu.com/2009/01/15/python-undo%e5%95%8f%e9%a1%8c/trackback/
- Listed below are links to weblogs that reference
- [Python] Undo問題 from memlog