[Python] Undo問題

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、、、
どんな理由をつけてもユーザー的にこれは完全なバグ。

コメントを残す

メールアドレスが公開されることはありません。