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

AutoCAD .NET API:コマンド終了後のオブジェクト選択状態の維持

Issue

カスタムコマンドで意図的にオブジェクトを選択させて、コマンド終了後も選択状態を維持させたいと思っています。次のようなコードを作成してみましたが、期待した状態になりません。

 

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

    PromptEntityOptions peo = new PromptEntityOptions("\nオブジェクトを選択:");
    PromptEntityResult per = ed.GetEntity(peo);

    if (per.Status == PromptStatus.OK)
    {
        using (Transaction tr = db.TransactionManager.StartTransaction())
        {
            Entity ent = (Entity)tr.GetObject(per.ObjectId, OpenMode.ForWrite);
            ent.Highlight();
            tr.Commit();
        }
    }
}

 

具体的には、オブジェクトのハイライトは維持するものの、事前選択のようにグリップが表示されません。また、[プロパティ] パレットには選択したオブジェクトのプロパティも表示されません。 

 

only_highlight.gif

 

事前選択した状態のように、ハイライトとグリップ表示、[プロパティ] パレットへのプロパティ表示を実装するには、どのようにしたらいいでしょうか?

 

Solution

事前選択の状態は、Editor.SetImpliedSelection メソッドで選択状態にしたい ObjectId 配列を指定することで実装することが出来ます。

 

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

    PromptEntityOptions peo = new PromptEntityOptions("\nオブジェクトを選択:");
    PromptEntityResult per = ed.GetEntity(peo);

    if (per.Status == PromptStatus.OK)
    {
        ObjectId[] objIds = [per.ObjectId];
        ed.SetImpliedSelection(objIds);
    }
}

 

set_preselect.gif