Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。
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オブジェクトが選択されていません");
}
}
このコードで事前選択したオブジェクトは取得出来ますが、コマンド実行時にオブジェクトの選択状態が解除されてしまいます。
コマンド実行時にのブジェクト選択状態の解除を抑止することは出来ますか?
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オブジェクトが選択されていません");
}
}