>変更通知関数内でさらに変更を行うのは、常駐型プラグインが一つだけの場合は今のところは特に何の問題もなく動作すると思います。>ただ、常駐型プラグインが例えば次のような2つがある場合…>このような相反する挙動に対して矛盾が生じないよう何らかの対策が必要となるのですが、お返事ありがとうございます。
全くその通りで、SELECTED、MODIFIEDのイベントは監視のみに限定して、そこで変更すべきではないと思い至りました。
自分は今、ブラシ選択ツールからSELECTEDイベントをつかまえて連続的に面を張るSTATIONプラグインを作っていた所なのですが、
SELECTEDイベントがつかまえられるからSTATIONにしてるだけで、全く常駐型プラグインではないですが、
選択状態の変更や面貼りはせず後でまとめて出力すれば、副作用も出さずに済み、自分の用途は既に十分満たせていると思います。
>もしこの問題について何かご意見・ご提案などありましたらお願いします。 自分が欲しいのは、マウス操作にあわせて任意のプラグインを連続的に呼び出す仕組みでして、
常駐型プラグインについて意見にはなりませんが、
SELECTEDイベントは常駐型プラグインが状態監視のみに使うものとしてそのままに、
それより前に呼び出される、変更や編集用のイベントが別にあったら如何でしょうか。
そのイベントは引数に、処理対象の面や頂点(選択済みの面や点ではなく、例えば今から選択に追加しようとしている面や点)、しようとしている処理内容(例えば選択追加)を格納していて、
続きを表示...
普段はメタセコイア本体が引数通りに処理するのだけれど、プラグイン側で代わりに処理しても構わないというイベントです。
単にメタセコイア側がする実際の編集処理部をプラグイン側でオーバーロードするような具合のものです。
このような動作のプラグインは多分、複数のプラグインのうちでただ一つがカレントで、STATIONほどではないけれど長い寿命で、
SELECTEDイベントなどで事後に処理の結果だけを知る常駐型プラグインとは、安全に共存し得ると思います。
自分が想定していたのはこれよりずっと単純なもので、
クリックで、面、辺、点を選択して、その度にSELECT型プラグインを呼び出せれば、それで実現できるものでしたが、
無理矢理に常駐型プラグインとしてSELECTEDイベントを監視すると、
思いがけず、クリック、範囲、投げ縄、ブラシの4選択ツールに同時に対応できるようになりました。
もし、選択ツールや移動回転拡大ツールの、画面上でのクリックやドラッグから編集対象の面や点を特定する処理、画面上に描画されるハンドル、
スクリーン上でのドラッグによる移動ベクトルを三次元に変換する処理( ローカル座標モードだったりワールド座標モードだったりしますので )
これらの準備をメタセコイア側でやってもらった上で、最後にプラグインを呼び出してもらえれば、
極々短い手続きでメタセコイアのツール群を拡張できる事になります。
各ツールから最後の処理部分だけを取り除いたものをマニュピレーターとでも呼べば、
画面上にハンドルが表示される各移動ツールや、ワイヤツールで頂点追加に使う辺上の任意位置を取得できるものや、
ペイントのスクリーン状の座標からテクセル上のUV座標を求めるものや、色々と流用してみたいマニュピレーターがあると思います。
自分ならとりあえず、四角面上の任意の位置にピラミッド状の頂点を追加できるツールや、UV空間上に頂点を配置していくツールが作ってみたいです。
この形式のプラグインの極単純なものは、一つのマニュピレーターのみから呼び出されるものでしょうけど、
複数のマニュピレーターを往復して連携しようとしたり独自データを保持しようとすれば、常駐型になって話を複雑にするかもしれません。
ただ、自分の当面の用途は既に十分満たせていますので、
将来的な要望というか、空想というか、そのようなものです。
本当に長々と…失礼しました。