質問: IJCAD2016でvb.bet(.net api)を使用して開発を行っています。 図形がドラッグ&ドロップ(DROPGEOM?)で移動されたかどうか判定し、専用処理を実行したいのですが、うまく判定できないため判定方法を模索しております。 IJCAD側の操作および現状のコーディング概要とその結果は以下のとおりです。 <IJCAD側の操作> (1)図形を左クリックで選択 (2)挿入基点(ブロック参照の場合)以外の位置を左クリックし、目的の位置までドラッグ (3)目的の位置までドラッグで移動したらドロップで終了 <コーディング概要> IJCADのイベントで処理を実行するため、以下のイベントをRemoveHandler、AddHandlerでコーディング。 (1)Document.CommandWillStart コマンドを開始したときに発生するイベント (2)Editor.PromptedForSelection 選択操作が完了したときに発生するイベント (3)Database.ObjectOpenedForModify データベース上でオブジェクトが変更される直前に発生するイベント (4)Database.ObjectModified データベース上でオブジェクトが変更されたときに発生するイベント (5)Document.CommandEnded コマンドが正常終了したときに発生するイベント (6)Editor.EnteringQuiescentState 静止状態になったときに発生するイベント 実行されたコマンドは上記のイベント内で以下から取得する。 ・Editor.Document.CommandInProgress ・CommandEventArgs.GlobalCommandName 想定される結果としては、上記(1)~(6)の順でイベントが発生する。 (1)~(4)で実行コマンドが”DROPGEOM”だった場合、図形情報等を集め、(5)のコマンド終了時に専用処理を実行し、(5)および(6)で集めた情報を破棄する。 <処理の結果> 発生イベントは以下の順でイベントが発生しており、また、実行コマンドは””(ブランク)で”DROPGEOM”かどうかわからない。 (3)Database.ObjectOpenedForModify (4)Database.ObjectModified (6)Editor.EnteringQuiescentState ※その他のイベントは発生していないのかデバッグで確認してもイベント内には入っていない。 具体的なソースコードを掲載しておらず恐縮ですが、ドラッグ&ドロップ(DROPGEOM?)実行を判定する方法をご存知の方がいらっしゃいましたら、アドバイス等をいただけると幸いです。 以上、よろしくお願いいたします。
回答: 質問で書かれている挙動はIJCADの不具合っぽいですね。 IJCADでグリップポイント以外をドラッグして移動する際のコマンドは "" (ブランク) となってしまいます。 また、同じ条件でDocument.CommandWillStartのイベントが発生しないようです。 以下に判定する際のポイントの一例を書きます。 これで IJCAD 2020 なら質問内容に近い条件を判定できると思います。 ただ、古いIJCAD と現在のIJCAD ではコマンド以外のイベントの挙動も異なっていたと思うので、 IJCAD 2016 では使うイベントを変更する必要があるかもしれません。 <判定する際のポイント> ○図形を左クリック~ドラッグ完了までの間、選択図形の座標を監視対象とする ・図形の選択開始はEditor.SelectionAdded イベントで取得 ・マウスのボタンはSystem.Windows.Forms.Control.MouseButtons プロパティで取得 ○図形をドラッグ中の実行コマンドが "" (ブランク)であるか確認する ・実行コマンドはDocument.CommandInProgress プロパティで取得 ○操作を終えた時に、マウスに追随して図形の座標が変更されたか確認する ・操作を終えたタイミングはEditor.LeavingQuiescentState イベントで取得 ・マウスの座標はEditor.PointMonitor イベント等で取得