Add To or Merge Multiple Selection Sets
 
 
 

You can merge multiple selection sets be creating an ObjectIdCollection object and then adding the object ids from multiple selection sets together. In addition to adding object ids to an ObjectIdCollection object, you can remove object ids. Once all object ids are added to an ObjectIdCollection object, you can iterate through the collection of object ids and manipulate each object as needed.

Add selected objects to a selection set

This example prompts the user to select objects twice and then merges the two selection sets created into a single selection set.

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
 
<CommandMethod("MergeSelectionSets")> _
Public Sub MergeSelectionSets()
  '' Get the current document editor
  Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
 
  '' Request for objects to be selected in the drawing area
  Dim acSSPrompt As PromptSelectionResult
  acSSPrompt = acDocEd.GetSelection()
 
  Dim acSSet1 As SelectionSet
  Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()
 
  '' If the prompt status is OK, objects were selected
  If acSSPrompt.Status = PromptStatus.OK Then
      '' Get the selected objects
      acSSet1 = acSSPrompt.Value
 
      '' Append the selected objects to the ObjectIdCollection
      acObjIdColl = New ObjectIdCollection(acSSet1.GetObjectIds())
  End If
 
  '' Request for objects to be selected in the drawing area
  acSSPrompt = acDocEd.GetSelection()
 
  Dim acSSet2 As SelectionSet
 
  '' If the prompt status is OK, objects were selected
  If acSSPrompt.Status = PromptStatus.OK Then
      acSSet2 = acSSPrompt.Value
 
      '' Check the size of the ObjectIdCollection, if zero, then initialize it
      If acObjIdColl.Count = 0 Then
          acObjIdColl = New ObjectIdCollection(acSSet2.GetObjectIds())
      Else
          Dim acObjId As ObjectId
 
          '' Step through the second selection set
          For Each acObjId In acSSet2.GetObjectIds()
              '' Add each object id to the ObjectIdCollection
              acObjIdColl.Add(acObjId)
          Next
      End If
  End If
 
  Application.ShowAlertDialog("Number of objects selected: " & _
                              acObjIdColl.Count.ToString())
End Sub

C#

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());
}
VBA/ActiveX Code Reference