5.3.3. Добавление объекта в набор, или объединение нескольких наборов в единый набор

Источник здесь.[переводчик: bandero]; [перевод не проверен]

    Вы можете соединить несколько наборов, создав объект ObjectIdCollection и затем добавить идентификаторы объектов из нескольких наборов вместе. Дополнительно к добавалению идентификаторов объектов в ObjectIdCollection, вы можете удалять их. Когда все идентификаторы объектов добавлены в объекте ObjectIdCollection, вы можете выполнять итерацию по этой коллекции идентификаторов и манипулировать каждым объектом, если необходимо.

Добавление выбранных объектов в набор

    В этом примере выполняется запрос пользователю на выбор объектов, дважды, и затем соединяются два созданных набора в один набор.

Код VB.NET

1:  Imports Autodesk.AutoCAD.Runtime
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:  Imports Autodesk.AutoCAD.DatabaseServices
   4:  Imports Autodesk.AutoCAD.EditorInput 
   5:   
   6:  <CommandMethod("MergeSelectionSets")> _
   7:  Public Sub MergeSelectionSets()
   8:    '' Получение Редактора текущего документа
   9:    Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor 
  10:   
  11:    '' Запрос на выбор объектов в области чертежа
  12:    Dim acSSPrompt As PromptSelectionResult
  13:    acSSPrompt = acDocEd.GetSelection() 
  14:    Dim acSSet1 As SelectionSet
  15:    Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection() 
  16:   
  17:    '' Если статус запроса OK, объекты были выбраны
  18:    If acSSPrompt.Status = PromptStatus.OK Then
  19:   
  20:        '' Получение объекта набора
  21:        acSSet1 = acSSPrompt.Value 
  22:   
  23:        '' Append the selected objects to the ObjectIdCollection
  24:        acObjIdColl = New ObjectIdCollection(acSSet1.GetObjectIds())
  25:    End If
  26:   
  27:    '' Запрос на выбор объектов в области чертежа
  28:    acSSPrompt = acDocEd.GetSelection()
  29:    Dim acSSet2 As SelectionSet 
  30:   
  31:    '' Если статус запроса OK, объекты были выбраны
  32:    If acSSPrompt.Status = PromptStatus.OK Then
  33:        acSSet2 = acSSPrompt.Value 
  34:   
  35:        '' Проверка размера ObjectIdCollection, если 0, то инициализируем его
  36:        If acObjIdColl.Count = 0 Then
  37:            acObjIdColl = New ObjectIdCollection(acSSet2.GetObjectIds())
  38:        Else
  39:            Dim acObjId As ObjectId 
  40:   
  41:            '' Перебор объектов второго набора
  42:            For Each acObjId In acSSet2.GetObjectIds()
  43:   
  44:                '' Добавление каждого объекта идентификатора в ObjectIdCollection
  45:                acObjIdColl.Add(acObjId)
  46:            Next
  47:        End If
  48:    End If 
  49:   
  50:    Application.ShowAlertDialog("Количество выбранных объектов: " & _
  51:                                acObjIdColl.Count.ToString())
  52:  End Sub

Код C#

1:  using Autodesk.AutoCAD.Runtime;
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:  using Autodesk.AutoCAD.DatabaseServices;
   4:  using Autodesk.AutoCAD.EditorInput; 
   5:   
   6:  [CommandMethod("MergeSelectionSets")]
   7:  public static void MergeSelectionSets()
   8:  {
   9:    // Получение Редактора текущего документа
  10:    Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor; 
  11:   
  12:    // Запрос на выбор объектов в области чертежа
  13:    PromptSelectionResult acSSPrompt;
  14:    acSSPrompt = acDocEd.GetSelection();
  15:    SelectionSet acSSet1;
  16:    ObjectIdCollection acObjIdColl = new ObjectIdCollection(); 
  17:   
  18:    // Если статус запроса OK, объекты были выбраны
  19:    if (acSSPrompt.Status == PromptStatus.OK)
  20:    {
  21:        // Получение объекта набора
  22:        acSSet1 = acSSPrompt.Value; 
  23:   
  24:        // Append the selected objects to the ObjectIdCollection
  25:        acObjIdColl = new ObjectIdCollection(acSSet1.GetObjectIds());
  26:    } 
  27:   
  28:    // Запрос на выбор объектов в области чертежа
  29:    acSSPrompt = acDocEd.GetSelection();
  30:    SelectionSet acSSet2; 
  31:   
  32:    // Если статус запроса OK, объекты были выбраны
  33:    if (acSSPrompt.Status == PromptStatus.OK)
  34:    {
  35:        acSSet2 = acSSPrompt.Value;
  36:   
  37:        // Проверка размера ObjectIdCollection, если 0, то инициализируем его
  38:        if (acObjIdColl.Count == 0)
  39:        {
  40:            acObjIdColl = new ObjectIdCollection(acSSet2.GetObjectIds());
  41:        }
  42:        else
  43:        {
  44:            // Перебор объектов второго набора
  45:            foreach (ObjectId acObjId in acSSet2.GetObjectIds())
  46:            {
  47:                // Добавление каждого объекта идентификатора в ObjectIdCollection
  48:                acObjIdColl.Add(acObjId);
  49:            }
  50:        }
  51:    }
  52:   
  53:    Application.ShowAlertDialog("Количество выбранных объектов: " +
  54:                                acObjIdColl.Count.ToString());
  55:  }

Код VBA/ActiveX

   1:  Sub MergeSelectionSets()
   2:      ' Создание нового набора
   3:      Dim sset As AcadSelectionSet
   4:      Set sset = ThisDrawing.SelectionSets.Add("SS1") 
   5:   
   6:      ' Запрос пользователю выбрать объекты
   7:      ' и добавление их в набор
   8:      sset.SelectOnScreen 
   9:   
  10:      ' Запрос пользователю повторить выбор объектов
  11:      ' и добавление их в тот же набор
  12:      sset.SelectOnScreen 
  13:   
  14:      MsgBox "Number of total objects selected: " & sset.Count 
  15:   
  16:      ' Удаление набора
  17:      sset.Delete
  18:  End Sub

Comments