Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[1572] UpdateUndoのアンドゥバッファ消費について / ASDF-0774
[SDK] 返信
コマンドプラグインのUpdateUndoについて質問があるのですが、
プラグイン側で明示的にUpdateUndoを呼ぶということは、
アンドゥバッファを更新するような標準の操作が無いにも関わらず
アンドゥバッファを更新したい、すなわちプラグイン側特有の
データに変更があったとき、それをアンドゥ/リドゥしたいがため、
と考えられるのですが、そういう用途に限らない、ということでしょうか?

もしそういう用途ならば、メタセコイア側ドキュメントには変更が
行われていないのに、メモリ上のアンドゥ領域を消費してしまうのは
非常に勿体無い気がします。
(例えばダイアログのボタンを押したらUpdateUndoが呼ばれるだけ、
というような作りにしてボタンを押し続けたところ、アンドゥ
最大回数に到達していないにも関わらず、最初にボタンを押す前の
状態に戻れなくなってしまいました)
2008-12-13 01:16
[1573] Re: UpdateUndoのアンドゥバッファ消費について / O.Mizno
UpdateUndo()は明示的にアンドゥカウンタをインクリメントするために用います。
これと併せてOnUpdateUndo()でカウンタを監視することにより、
通常のアンドゥ操作によってプラグイン内で管理しているデータの
アンドゥ・リドゥも行えるようになります。
このとき、オブジェクトデータ分もアンドゥバッファに格納されるためメモリを浪費しますので、
プラグイン内の管理データが変更されないときにはUpdateUndoは呼び出すべきではありません。
2008-12-14 10:33
[1575] Re: Re: UpdateUndoのアンドゥバッファ消費について / ASDF-0774
ご説明いただきありがとうございました。
UpdateUndoで明示的にアンドゥカウンタとインクリメントした場合には
オブジェクトデータ分はアンドゥバッファに格納しないように
できないものでしょうか。

プラグイン内管理データを更新する細かい操作が多いものを想定しているので、
アンドゥ可能な状態をなるべく長く取りたいのです。
2008-12-14 13:11
[1576] Re: Re: Re: UpdateUndoのアンドゥバッファ消費について / O.Mizno
現状でもペイント機能のアンドゥが完全に別扱いになっていたりと、
アンドゥシステム全体の見直しは必要と考えてはいます。
ただ、大量のバグが発生して収集がつかなくなる恐れがあるので、
アンドゥシステムに変更を加えることは直近の改善項目としては考えいません。
おそらくVer2.6以降での対応になるかと思います。
2008-12-14 23:29
[1578] Re: Re: Re: Re: UpdateUndoのアンドゥバッファ消費について / ASDF-0774
ありがとうございました。

実は頂点のユニークID(以下UID)に関連づけるデータを付加するのに、
そのユニークIDの寿命の管理が厄介であるため、それをなんとかしようと
考えてこの件に気がつきました。
(例えばUID=1の頂点を追加してUndoして別の操作をするとUID=1は完全に無効になるけれど、
これはOnObjectModifiedごとに総あたりしないとわからない。
UID=1の頂点追加の後、UID=1に関連づけたプラグイン固有データ追加、
その追加履歴をプラグイン側で保存してUpdateUndoなら、
Undo操作でプラグイン固有データから削除できるので、総あたりで
調べなくとも無効になったUIDに関する情報を先に消去できる。
でも、調べてみたら標準のアンドゥバッファを大量に浪費してしまう。)

なので、もし頂点が追加・削除されるごとにプラグイン側に
「どの頂点が追加・削除されたか」を通知する方が容易であるならば、
私としてはそちらを優先していただきたいと思う次第です。

注文ばかり多くなって申し訳ありませんが、ご検討のほどよろしく
お願い致します。
2008-12-15 18:09