Объединение нескольких наборов выбора
Вы можете объединить несколько наборов выбора, создав объект ObjectIdCollection, а затем добавив идентификаторы объектов из нескольких наборов выбора в него. Помимо добавления идентификаторов объектов в объект ObjectIdCollection, вы можете удалять идентификаторы объектов. После добавления всех идентификаторов объектов в объект ObjectIdCollection вы можете пройтись по каждому из ObjectId и получить объекты при необходимости.
Код ниже запрашивает у Пользователя 2 разные группы объектов, а потом объединяет объекты групп в единый набор выбора ObjectIdCollection.
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
[CommandMethod("MergeSelectionSets")]
public static void MergeSelectionSets()
{
// Get the current document editor
Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
// Request for objects to be selected in the drawing area
PromptSelectionResult acSSPrompt;
acSSPrompt = acDocEd.GetSelection();
SelectionSet acSSet1;
ObjectIdCollection acObjIdColl = new ObjectIdCollection();
// If the prompt status is OK, objects were selected
if (acSSPrompt.Status == PromptStatus.OK)
{
// Get the selected objects
acSSet1 = acSSPrompt.Value;
// Append the selected objects to the ObjectIdCollection
acObjIdColl = new ObjectIdCollection(acSSet1.GetObjectIds());
}
// Request for objects to be selected in the drawing area
acSSPrompt = acDocEd.GetSelection();
SelectionSet acSSet2;
// If the prompt status is OK, objects were selected
if (acSSPrompt.Status == PromptStatus.OK)
{
acSSet2 = acSSPrompt.Value;
// Check the size of the ObjectIdCollection, if zero, then initialize it
if (acObjIdColl.Count == 0)
{
acObjIdColl = new ObjectIdCollection(acSSet2.GetObjectIds());
}
else
{
// Step through the second selection set
foreach (ObjectId acObjId in acSSet2.GetObjectIds())
{
// Add each object id to the ObjectIdCollection
acObjIdColl.Add(acObjId);
}
}
}
Application.ShowAlertDialog("Number of objects selected: " +
acObjIdColl.Count.ToString());
}