Объединение нескольких наборов выбора

Вы можете объединить несколько наборов выбора, создав объект 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());
}