XDSoft 发表于 2021-1-11 23:24:25

Checking if custom entity is selected inside a contextual tab selection rule


问题:

I'm using the solution from DevNote AN20090811-2 , but it does not work for my custom entities. I pass in the name of my entity that is displayed in the Property Palette, but still, Selection.ContainsOnly("MyEntity") is always false.

解答:

The selection rule is using the .NET type name of the selected entities. So if your entity does not have a .NET wrapper then the selection set will know it as the type name of the .NET wrapper of your custom entity's base class - i.e. if your entity is based on AcDbEntity then the selection set will know it as type "Entity"

So, if you want to check if only your custom entities are selected (and they do not have a .NET wrapper class), then create a utility assembly which iterates through the Selection set and checks each entity's RxClass.Name.

We could simply modify the sample code in DevNote AN20090811-2 the following way to check if only my custom entities called "MyLine" are selected:

public static bool ShowMyTab(object selObj)
{
Selection sel = (Selection)selObj;
if (sel.Count < 1)
    return false;

foreach (IDataItem item in sel)
{
    if (item.ObjectId.ObjectClass.Name != "MyLine")
      return false;
}

return true;
}


页: [1]
查看完整版本: Checking if custom entity is selected inside a contextual tab selection rule