Запрос нескольких объектов
Выбор нескольких объектов осуществляется с помощью метода Editor.GetSelection с перегрузкой для SelectionFilter.
SelectionFilter задается с помощью массива TypedValue, как и ResultBuffer. Если необходимо выбрать несколько типов, то их надо задавать либо в 1 строку для DxfCode.Start с перечислением запятыми, либо с помощью логических операторов. Выбор для нескольких условий см. в статье про SelectionFilter.
Для быстрого перехода от типа объекта (typeof(Polyline)) к соответствующему ему DxfName для задания в фильтре TypedValue) можно воспользоваться следующим приведением:
Type t;
string dxfName = Autodesk.AutoCAD.Runtime.RXObject.GetClass(t).DxfName;
В примере ниже осуществляется выбор нескольких полилиний и окружностей с выводом в командную строку количества отфильтрованных объектов.
using System.Linq;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
[CommandMethod("SelectPolylines")]
public void SelectPolylines()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Type[] typesToSelect = new Type[]
{
typeof(Polyline), typeof(Circle)
};
string[] entNamesArr = typesToSelect.Select(t => RXObject.GetClass(t).DxfName).Distinct().ToArray();
TypedValue[] tmpFilterArgs = new TypedValue[]
{
new TypedValue((int)DxfCode.Start, string.Join(",", entNamesArr))
};
SelectionFilter filter = new SelectionFilter(tmpFilterArgs.ToArray());
PromptSelectionOptions settings = new PromptSelectionOptions()
{
MessageForAdding = "Select polylines and circles"
};
PromptSelectionResult result = doc.Editor.GetSelection(settings, filter);
if (result.Status != PromptStatus.OK) return;
doc.Editor.WriteMessage($"\nThere were selected: {result.Value.Count}" + " entities\n");
}