89627


現在、IJCAD 2022で.NET API(C#)を使用して開発を行っています。

指定された領域の内側を削除する機能を実装しています。  
EditorクラスのSelectWindowやSelectWindowPolygonメソッドを使用した時にSelectionSetが不定で困っています。  
色々調べたところ、ズームが影響していることがわかりましたが、対策方法がわかりません。  
以下、サンプルコードになります。大きさ100の矩形の1mmずつ内側を指定していますが、ズームの状態によって矩形まで削除されてしまいます。  
また、SelectWindowの処理としてはライン上は判定に含まれてしまうのでしょうか？下記ソースでは、ライン上が含まれてしまうため1mmずつ内側を指定しています。（本当であれば(0,0,0)(100,100,0)を指定したいです）

[code]

    　　　 /// <summary>
            /// 中抜き削除
            /// </summary>
            [CommandMethod(""TEST_Hollow"", CommandFlags.NoPaperSpace)]
            public static void TEST_Hollow() {
                var doc = Application.DocumentManager.MdiActiveDocument;
                var db = doc.Database;
                var ed = doc.Editor;
    
                var prompt = ed.SelectWindow(new Point3d(1, 1, 0), new Point3d(99, 99, 0));
    
                if (prompt.Status != PromptStatus.OK) return;
    
                using (var tr = doc.TransactionManager.StartTransaction()) {
                    foreach (SelectedObject setobj in prompt.Value) {
                        var ent = tr.GetObject(setobj.ObjectId, OpenMode.ForWrite) as Entity;
                        ent.Erase();
                    }
                    tr.Commit();
                }
            }"
    
[/code]


CC BY-SA 4.0
2022-06-24T07:09:39.980
89574
2022-06-27T08:49:25.503
52807
question
ijcad
EditorクラスのSelectWindowやSelectWindowPolygonメソッドを使用した時にSelectionSetが一定になるようにしたい


> 色々調べたところ、ズームが影響していることがわかりましたが、対策方法がわかりません。

Editor.SelectXXXX()メソッドは、画面上で選択を行うユーザーとの対話を目的としたAPIであり、これらのグラフィカルな図形選択は画面の表示に対して行われるため、ビューの倍率に依存します。  
対策として以下の方法が考えられます。  
・図形選択実行前に、意図した選択結果になるようにする。  
\- 十分にズームインを行う。  
\- 選択したくないオブジェクトの画層を非表示/ロックする。  
\- 選択図形をフィルタリングするAPIを使用する。  
・図形を選択後に、選択図形から除外する。  
\- 選択図形を捜査して、図形の境界から判定する。

> SelectWindowの処理としてはライン上は判定に含まれてしまうのでしょうか？

ライン上の図形を判定に含むか否かは、図形の設定(線の太さや線種など)や表示するハードウェアによって判定が変わります。


CC BY-SA 4.0
2022-06-27T08:49:25.503
89627
2022-06-27T08:49:25.503
52306
89574
answer