Metasequoia BBS

| New message | Normal | Tree |
Status
Tag
Keyword
[1334] MQDocument::Compact( )について質問です。 / asdf-0774
[SDK] Response
タイトルのとおり、MQDocument::Compact()メソッドについてお伺いいたします。
プラグインマニュアルの説明によるとファイル保存時に自動的に実行されるとのことですが、
それ以外の場合は明示的に呼ばない限り実行されることはなく、頂点や面の配列が
切り詰められることは一切ない、ということでよろしいのでしょうか?
2007-12-20 22:51
[1339] Re: MQDocument::Compact( )について質問です。 / O.Mizno
マニュアルを書いた当時はその仕様通りだったのですが、その後のバージョンアップにより記載のあるもの以外にもさまざまな処理時にも呼び出されることがあります。

基本的にはコンパクト化されるのは何らかの操作を行った後なので、CreateやSelectなどのメニューから呼び出されるタイプのプラグインの場合、プラグインのメイン処理部が呼び出されてその処理が終了するまでの間はインデックスが変わることはほとんどないと考えてよいです。

しかし、Station\x2cCommand型の常駐プラグインの場合は、メッセージが来るまでの待機中には他の処理によりインデックスは常に変更される可能性があると考えてください。そのため、Station\x2cCommandプラグインで頂点・面に対して何らかの情報を保持する場合、インデックスではなくユニークIDを用いたアクセスを行うようにしてください。
2007-12-29 14:59
[1347] Re: Re: MQDocument::Compact( )について質問です。 / asdf-0774
どうもありがとうございました。
最初からユニークIDを使うつもりではいるのですが、Compactが呼ばれるタイミングがわかれば、
追加した面・頂点については配列サイズの比較で検出できるかな、と思いまして…
(削除した分についてはUndoで復元される可能性があるので検出できなくてもいいや、と)
どうやらそうもいかないみたいなので、OnObjectModifiedのたびに総当たりするようにします。

(OnObjectModifiedのときにどこの頂点や面が追加・削除されたかの情報がもらえるといいなぁ…ボソ)
2008-01-02 13:34