Autodesk Community Tips- ADNオープン
Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。

AutoCAD .NET API:コマンド実行時の事前選択オブジェクトの取得と選択解除の抑止

Issue

コマンド フラグに CommandFlags.UsePickSet を指定したカスタムコマンドで Editor.SelectImplied メソッドを使い、事前選択したオブジェクトを取得しようとしています。使用しているコードは次のとおりです。

 

[CommandMethod("MyCommand", CommandFlags.Modal | CommandFlags.UsePickSet)]
public void MyCommand()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Editor ed = doc.Editor;

    PromptSelectionResult psr = ed.SelectImplied();

    if (psr.Status == PromptStatus.OK)
    {
        ed.WriteMessage("\n{0} 個のオブジェクトが選択されました ...", psr.Value.GetObjectIds().Length.ToString());
    }
    else
    {
        ed.WriteMessage("\nオブジェクトが選択されていません");
    }
}

 

このコードで事前選択したオブジェクトは取得出来ますが、コマンド実行時にオブジェクトの選択状態が解除されてしまいます。 

 

clear_selection.gif

 

 コマンド実行時にのブジェクト選択状態の解除を抑止することは出来ますか?

 

Solution

事前選択したオブジェクトの選択状態を維持したままにするには、定義したカスタム コマンドのコマンド フラグに CommandFlags.Redraw を加える必要があります。コマンド定義内のコードになにかを加える必要はありません。

 

[CommandMethod("MyCommand", CommandFlags.Modal | CommandFlags.UsePickSet | CommandFlags.Redraw)]
public void MyCommand()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Editor ed = doc.Editor;

    PromptSelectionResult psr = ed.SelectImplied();

    if (psr.Status == PromptStatus.OK)
    {
        ed.WriteMessage("\n{0} 個のオブジェクトが選択されました ...", psr.Value.GetObjectIds().Length.ToString());
    }
    else
    {
        ed.WriteMessage("\nオブジェクトが選択されていません");
    }
}

 

maintain_selection.gif