Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[1081] コマンドプラグイン / sio29
対応済み [From old BBS] 返信
で質問があります
CreateDrawingObjectで描画したオブジェクトを
RedrawSceneやRedrawAllSceneやMQ_RefreshViewで再描画をかけようとすると
何フレーム分かの描画が残ってしまいうまく描画できません。
サンプルを見る限りCreateDrawingObjectで作成したオブジェクトは削除してないようので削除してないのですが
何か他に処理が必要なのでしょうか?
2007-03-05 04:12
[1082] Re: コマンドプラグイン / sio29
あとコマンドプラグインで要望があるのですが、
コマンドプラグインがアクティブなときオブジェクトやマテリアルが
他の操作やプラグインから作成、削除、編集ができないような関数を作っていただけないでしょうか?
2007-03-05 16:12
[1083] Re: コマンドプラグイン / O.Mizno
>CreateDrawingObjectで描画したオブジェクトを
>RedrawSceneやRedrawAllSceneやMQ_RefreshViewで再描画をかけようとすると
>何フレーム分かの描画が残ってしまいうまく描画できません。

検証用コードも書くのに時間がかかるので、とりあえず回答だけになってしまいますが、
CreateDrawingObject()で作成したオブジェクトは本体側で自動的に管理・削除されるので、プラグイン側で削除する必要はありません。というより削除してはいけません。

描画が残るのはプラグイン側から再描画をかけたときだけで、普通に視点を回転させたりしたときだと問題はないのですか?

あとそれから、

>コマンドプラグインがアクティブなときオブジェクトやマテリアルが
>他の操作やプラグインから作成、削除、編集ができないような関数を作っていただけないでしょうか

の意図することはどういったことでしょうか?
実現にはかなりの変更が伴うので、仕様の検討は慎重に行う必要があります。
単にオブジェクトが変形するのが困るなら、複製を別に持っておくとか描画オブジェクトを使うなどで代替できそうですが、そのあたりどうなのかなと思ったので。
2007-03-06 01:36
[1084] Re: Re: コマンドプラグイン / sio29
>描画が残るのはプラグイン側から再描画をかけたときだけで、普通に視点を回転させたりしたときだと問題はないのですか?
そうですね。視点を回転したときは問題ありません。
再描画かけたときにおこるようです。
ちなみにCreateDrawingObjectは複数個作成しているのですがそれはOKなのでしょうか?

>の意図することはどういったことでしょうか?
ボーンプラグインを作っているのですが、オブジェクトがボーンにつられて変形しているときに
他の操作で頂点などが消えてしまうとかなり面倒なことになってしまうので出来れば編集禁止にできればと思いました。
描画オブジェクトを使えば問題ないのですが、現状の描画オブジェクトは毎フレーム作成しなくてはならないので
ポリゴン数が増えて言った場合にかなり重くなるのではと思い、先のような実装にしました。
編集禁止が難しいのであれば描画オブジェクトをプラグイン側で作成し保持しておくようなことはできるのでしょうか?
2007-03-06 02:11
[1085] Re: Re: Re: コマンドプラグイン / sio29
連続で質問して悪いのですがキーボードのメッセージをプラグイン側でとることはできるのでしょうか?
プラグイン側のダイアログでWM_KEYDOWNが取れないのでどうしようかと思っているところです
2007-03-06 04:15
[1086] Re: Re: Re: コマンドプラグイン / O.Mizno
>ちなみにCreateDrawingObjectは複数個作成しているのですがそれはOKなのでしょうか?

問題ありません。
ただ本当に問題ないかどうか、実際に検証してみる必要はありそうですが、
とりあえず平日は無理なので、早くても週末になると思います。

>編集禁止が難しいのであれば描画オブジェクトをプラグイン側で作成し保持しておくようなことはできるのでしょうか?

SDKのソースにもそれらしいことを書いていますが、一応それは考えてはいます。
ただ、Ver2.4.1に間に合うかどうかは今のところ微妙です。

>連続で質問して悪いのですがキーボードのメッセージをプラグイン側でとることはできるのでしょうか?
>プラグイン側のダイアログでWM_KEYDOWNが取れないのでどうしようかと思っているところです

OnKeyPress()の実装を忘れていました。
次のSDK更新で追加できると思います。
2007-03-08 02:16
[1087] Re: Re: Re: Re: コマンドプラグイン / mqdl
実装方法は違うようですが、同じくボーンプラグインを作成しました。
まず、その際に感じた問題点を。

1)既に書かれている通り、ボーン変形時に
 よそからアクセスでドキュメント内の頂点やマテリアルが
 変更されると問題が発生する事がある。

2)上記1よりプラグイン内部でデータを保持し、
 CreateDrawingObjectを使用したが描画が遅い。
 
 
>>編集禁止が難しいのであれば描画オブジェクトをプラグイン側で作成し保持しておくようなことはできるのでしょうか?
>
>SDKのソースにもそれらしいことを書いていますが、一応それは考えてはいます。
>ただ、Ver2.4.1に間に合うかどうかは今のところ微妙です。
>

オブジェクトとマテリアルを静的に保持出来ると非常に助かります。

3)CreateDrawingObjectを使用するとMetasequoia側で

続きを表示...
ファイル [T20070311153423.jpg]
2007-03-11 15:34
[1094] Re: Re: Re: Re: コマンドプラグイン / O.Mizno
Ver2.4.1 RC4で

・描画オブジェクト・マテリアルを保持できるように
(CreateDrawingObject/Material()でinstantにFALSEを指定する)
・再描画時に以前の描画オブジェクトが残らないように
・OnKeyDown/Up()でキーの押し離しのイベントを取得できるように

に対応しました。
ただ、キーイベントについては、リピートかどうか取得できない、(主に仮想キーで)DownまたはUpの片方しか通知されないことがあるなど、若干問題があるので、今後(Ver2.4.2以降)仕様変更になる可能性はあります。

描画オブジェクトの描画順序指定も、対応が間に合わないので残念ながら先送りになります。
2007-03-21 14:53
[1096] Re: Re: Re: Re: Re: コマンドプラグイン / sio29
対応ありがとうございます。
とりあえず再描画とキーボードメッセージに関してチェックしました
再描画は直っていました。
キーボードメッセージはメタセコ本体のウィンドウがアクティブなときはOnKeyDownなどはくるのですが
プラグイン側で作ったダイアログにフォーカスが移っているときはメッセージがこないようです
これはこういう仕様なのでしょうか?
ちなみにメタセコ本来のキーボード処理はプラグイン側のダイアログがアクティブでも動いているようです。
2007-03-22 04:38
[1097] Re: Re: Re: Re: Re: Re: コマンドプラグイン / sio29
たびたびすいません。
要望なのですが、現在ボーンプラグインにおいて頂点に対してのウェイトをプラグイン側で保持していますが、
OnObjectModifiedでオブジェクトが更新された場合、現状ではどの頂点/面が
更新されたのかわからないので総当りでチェックしなければなりません。
これだとポリゴン数が多いと非常に重くなってしまいます。
そこで
・変更のあったオブジェクト、頂点などのリストを獲得できる機能
・オブジェクトや頂点ごとにプラグイン情報を付加できる機能
  (削除された場合はプラグイン情報も一緒に削除される)
などの機能があるとうれしいのですがどうでしょうか?

次の要望なのですがアンドゥの保持すべき履歴の数が得られないでしょうか?
現状ではどこまでの履歴を保持しておけばいいのか分からないのでプラグイン側は
全ての履歴を保持しなくてはならなくなってしまいます。

要望ばかりですいませんがよろしくお願いします。
2007-03-23 17:37
[1098] Re: Re: Re: Re: Re: コマンドプラグイン / mqdl
>Ver2.4.1 RC4で
>
>・描画オブジェクト・マテリアルを保持できるように
>(CreateDrawingObject/Material()でinstantにFALSEを指定する)

ありがとうございます。

今チェック用にStationプラグインをCommandプラグインに移植していて
気になったのですが、Commandプラグインがアクティブの際、
プラグインから指定したカーソルに変更は出来ませんか?

例えば「ペイント」を選択し、仮にSingleMoveを選んだ際
ペイントのカーソルのままになるので、使用していて違和感があります。

もう一点、別にスレッドを立てるべきかも知れませんがバグ報告を
新規ドキュメント作成後、何もない状態でペイントを選び
マウス操作(ドラッグ)をするとエラーが発生します。

また、バグではありませんがVista環境でオブジェクトパネルのウィンドウ移動が
かなり重いのですが、そちらでも確認出来ますでしょうか?
2007-03-23 18:46
[1101] Re: Re: Re: Re: Re: Re: Re: コマンドプラグイン / O.Mizno
>次の要望なのですがアンドゥの保持すべき履歴の数が得られないでしょうか?
>現状ではどこまでの履歴を保持しておけばいいのか分からないのでプラグイン側は
>全ての履歴を保持しなくてはならなくなってしまいます。

サンプルがないのでわかりづらいところですが、OnUpdateUndo()のundo_sizeでアンドゥ可能な回数が得られます。
GetCurrentUndoState()と合わせて使用して、undo_state-undo_sizeより小さくなったときに古いアンドゥ情報を破棄してください。
なお、undo_sizeはアンドゥバッファの使用量に左右されるので、固定値ではありません。

>例えば「ペイント」を選択し、仮にSingleMoveを選んだ際
>ペイントのカーソルのままになるので、使用していて違和感があります。

Ver2.4.1正式版でとりあえず標準カーソルに戻るようにしました。
カーソルの変更についてはまた追って検討します。

>もう一点、別にスレッドを立てるべきかも知れませんがバグ報告を
>新規ドキュメント作成後、何もない状態でペイントを選び
>マウス操作(ドラッグ)をするとエラーが発生します。

Ver2.4.1正式版で修正しました。


続きを表示...
2007-03-25 17:35
[1105] Re: Re: Re: Re: Re: Re: Re: Re: コマンドプラグイン / mqdl
まず、描画オブジェクト保持を試してみました。
とくに問題はなさそうです。
これによって描画速度が飛躍的に向上しました。ありがとうございます。

>Ver2.4.1正式版でとりあえず標準カーソルに戻るようにしました。
>カーソルの変更についてはまた追って検討します。

標準カーソルに戻るだけで随分と違います。
対応ありがとうございました。

>描画が重いのは確認済みですが、VCL内部の処理まで踏み込めないので、対処法というか回避策を模索中です。
>実害はないので、Ver2.4.1ではそういう仕様ということにさせていただきました。

Miznoさんの方で把握されているのであれば、
早急に改善が必要な問題であるとは思いませんし、それで当面良いと思います。
2007-03-28 21:44
[1117] Re: Re: Re: Re: Re: Re: Re: Re: Re: コマンド / sio29
ベータ版アップデートお疲れ様です。
OnUpdateUndoに関してはマウス移動だけでUndoされないことは確認しました。

>OnUpdateUndo()のundo_sizeでアンドゥ可能な回数が得られます。
了解しました。この方法で試してみたいと思います。

ところでOnKeyDown/OnKeyUpについての要望なのですが、CTRL/SHIFT/ALTキーを引数keyに返すのをやめてもらえないでしょうか?
理由としてはCTRL+Aなどの2ストロークの場合、CTRLだけ、Aだけとメッセージが分けられてしまい
2ストロークのOnKeyDownがうまく取れないからです。
CTRL/SHIFT/ALTに関しては引数stateで参照できるので特に必要ないのではないかと思われます。
2007-04-02 15:37
[1119] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: コマンド / O.Mizno
>ところでOnKeyDown/OnKeyUpについての要望なのですが、CTRL/SHIFT/ALTキーを引数keyに返すのをやめてもらえないでしょうか?
>理由としてはCTRL+Aなどの2ストロークの場合、CTRLだけ、Aだけとメッセージが分けられてしまい
>2ストロークのOnKeyDownがうまく取れないからです。
>CTRL/SHIFT/ALTに関しては引数stateで参照できるので特に必要ないのではないかと思われます。

必要のないキーメッセージは無視すれば良いだけだと思うのですが???
例示の場合はCTRLは無視してAのメッセージが来たときだけ必要な処理をすれば良いと思うのですが。
例えば、(今は未サポートですが)マウスカーソルの変更できるようになればShiftキーが押されたときにカーソルを変更できるなど、必要な場面があってもなぜ不要になるのかは良く解りません。
もう少し明快で的確な理由をお願いします。

もし同時押しのことを指しているなら、そもそもWindows自体がそんなメッセージ処理出来ましたっけ?
2007-04-03 00:18
[1120] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / sio29
現状ではCTRL、Aという順番でキーをおした場合、最初におしたCTRLが優先され
CTRLを離すまでAのメッセージが返ってきませんので
現状では実質CTRLとAの同時押しのキーをとることが出来ません。
前のキーを記憶したとしてもCTRLを離すまでCTRL+Aと認識できせんので操作性の上であまりよろしくないと思います。

>Shiftキーが押されたときにカーソルを変更できるなど
確かにそうですね。CTRL/ALT/SHIFTを返す必要がないというのは撤回させてください。
ただしキーが押されたときに優先順位をつけずにメッセージが来るようにしていただけないでしょうか。
理由は前述のとおりです

>もし同時押しのことを指しているなら、そもそもWindows自体がそんなメッセージ処理出来ましたっけ?
WIN32などはGetKeyStateを使えば同時押しのチェックはできます。

またOnKeyDownの返り値にTRUEを返すと標準動作をさせないとなっていますが、
実際は標準動作はしてしまっているようです。

また標準動作のキー操作はメタセコ内のどこのウィンドウにフォーカスがあっても動作するようですが
(プラグイン側で作成したウィンドウにフォーカスがあっても動作する)
OnKeyDownではメタセコ本体のウィンドウにフォーカスがないとキーが返ってこないようです
2007-04-03 13:16
[1122] Re: Re: Re: Re: Re: Re: Re: Re: コマンドプラグイン / mqdl
当面現状の仕様で出来ることをやろうと考えていたのですが、
2.4.2も出されるようですので、数点よろしいでしょうか?
おそらく大きな修正の必要はなく、バグ混入の可能性も低いと思います。

1)オブジェクトパネル、材質パネルのHWNDを取得したい。
2)他の操作コマンドと同様にコマンドプラグインのキーボードショートカットを設定したい。

1)は現在プラグイン側から探索をしていますが、
本体側から返して頂けると安心です。

2)はあえて実装されていないなら見送って下さい。

#Undoの問題のチェックは私も気がつきませんでした。
#失礼致しました。
2007-04-03 14:39
[1123] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / ぷーちん
>WIN32などはGetKeyStateを使えば同時押しのチェックはできます。
それならそのAPIでチェックすればよいような・・・
2007-04-03 18:06
[1124] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / sio29
>それならそのAPIでチェックすればよいような・・・
当然試しましたよ。その上でうまくいかないので意見をいっているのですが…

とりあえずOnKeyDownについてチェックしてみたところ、優先順位とかではなく
すでにCTRL+Aなどメタセコでショートカットがあたっている場合メッセージ自体が来てないようです。
CTRL+1などショートカットが割り当てられてない組み合わせの場合は問題なくメッセージが来ました。
間違った指摘をしてしまい申し訳ありませんでした。

そこで質問なのですが、現状ではすでにショートカットがあたっている場合
プラグイン側でそのキーは使えなくなってしまいますが仕様的にそれは正しいのでしょうか?
2007-04-03 21:11
[1125] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / mqdl
横から失礼を。

なんだかMiznoさんとsio29さんの会話がかみ合っていない気がします。
私も横から見ていて分かりにくいです。

具体的にやりたい事を書いたほうが、お互いすれ違いがなくて
有意義ではないですか?
2007-04-03 21:54
[1126] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / sio29
>>なんだかMiznoさんとsio29さんの会話がかみ合っていない気がします。
>私も横から見ていて分かりにくいです。
そうですか?

端的にいうとプラグイン側でCTRL+Aとやったらプラグイン側のデータの全選択をやりたいということです。
この場合ボーンプラグインを作っているのでボーンを全選択するというこになります。
もちろんCTRL+AだけでなくCTRL+CやCTRL+VなどWindowsの標準的なキー操作をプラグイン側でも実現したいということですね。

どうですか?まだ分かりにくいですか?
2007-04-03 22:23
[1128] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / mqdl
>端的にいうとプラグイン側でCTRL+Aとやったらプラグイン側のデータの全選択をやりたいということです。

それだけならプラグイン側でメッセージを処理すれば出来ますよ。
2007-04-03 23:52
[1129] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: / sio29
>それだけならプラグイン側でメッセージを処理すれば出来ますよ。
いまいちやり方がわからないのですが、それはメタセコのウィンドウメッセージをフックしろということですか?
だとしてもそれはO.Miznoさん的に推奨されるやり方なのでしょうか?
2007-04-04 00:14
[1130] Re: コマンドプラグイン / O.Mizno
SDKについては一般ユーザーと内容が異なるため、別のページを設けることにしました。続きはこちらからお願いします。
http://www.metaseq.net/bbs/mqsdk/nph-bbs.cgi

親メッセージと外れる内容が続いているため、以降このツリーへの書き込みはご遠慮ください。
2007-04-04 00:41