5.3.1. Получение набора предварительного выбора

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

    Набор предварительного выбора (PickFirst) создаётся, когда вы выбираете объекты перед запуском команды. Чтобы получить набор предварительного выбора, должно быть соблюдено несколько условий:

    • Системная переменная PICKFIRST должна быть равна 1
    • Для команды, которой нужно использовать предварительный выбор, должен быть установлен флаг UsePickSet
    • Вызовите метод SelectImplied чтобы получить набор предварительного выбора

    Метод SetImpliedSelection используется для очистки текущего набора предварительного выбора1.

1 - прим.переводчика: и для добавления объектов в него.

    Получение набора предварительного выбора

    В этом примере выводится на экран число объектов в наборе предварительного выбора, а затем у пользователя запрашиваются дополнительные объекты. Перед запросом у пользователя выбора объектов, текущий набор PickFirst очищается методом SetImpliedSelection.

Код 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("CheckForPickfirstSelection", CommandFlags.UsePickSet)> _
   7:  Public Sub CheckForPickfirstSelection()
   8:   
   9:    '' Получение текущего документа
  10:    Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  11:   
  12:    '' Получение набора предварительного выбора (PickFirst)
  13:    Dim acSSPrompt As PromptSelectionResult
  14:    acSSPrompt = acDocEd.SelectImplied()
  15:    Dim acSSet As SelectionSet 
  16:   
  17:    '' Если статус запроса OK, объекты были выбраны перед запуском команды
  18:    If acSSPrompt.Status = PromptStatus.OK Then
  19:        acSSet = acSSPrompt.Value 
  20:   
  21:        Application.ShowAlertDialog("Количество объектов в наборе Pickfirst: " & _
  22:                                    acSSet.Count.ToString())
  23:    Else
  24:        Application.ShowAlertDialog("Количество объектов в наборе Pickfirst: 0")
  25:    End If 
  26:   
  27:    '' Очистка набора PickFirst
  28:    Dim idarrayEmpty() As ObjectId
  29:    acDocEd.SetImpliedSelection(idarrayEmpty) 
  30:   
  31:    '' Запрос выбора объектов на чертеже
  32:    acSSPrompt = acDocEd.GetSelection()
  33:   
  34:   
  35:   
  36:    '' Если статус запроса OK, объекты были выбраны
  37:   
  38:    If acSSPrompt.Status = PromptStatus.OK Then
  39:        acSSet = acSSPrompt.Value 
  40:   
  41:        Application.ShowAlertDialog("Количество выбранных объектов: " & _
  42:                                    acSSet.Count.ToString())
  43:    Else
  44:        Application.ShowAlertDialog("Количество выбранных объектов: 0")
  45:    End If
  46:  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("CheckForPickfirstSelection", CommandFlags.UsePickSet)]
   7:  public static void CheckForPickfirstSelection()
   8:  {
   9:    // Получение текущего документа
  10:    Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
  11:   
  12:    // Получение набора предварительного выбора (PickFirst)
  13:    PromptSelectionResult acSSPrompt;
  14:    acSSPrompt = acDocEd.SelectImplied();
  15:    SelectionSet acSSet;
  16:   
  17:    // Если статус запроса OK, объекты были выбраны перед запуском команды
  18:    if (acSSPrompt.Status == PromptStatus.OK)
  19:    {
  20:        acSSet = acSSPrompt.Value;
  21:        Application.ShowAlertDialog("Количество объектов в наборе Pickfirst: " +
  22:                                    acSSet.Count.ToString());
  23:    }
  24:    else
  25:    {
  26:        Application.ShowAlertDialog("Количество объектов в наборе Pickfirst: 0");
  27:    }
  28:    // Очистка набора PickFirst
  29:    ObjectId[] idarrayEmpty = new ObjectId[0];
  30:    acDocEd.SetImpliedSelection(idarrayEmpty); 
  31:   
  32:    // Запрос выбора объектов на чертеже
  33:    acSSPrompt = acDocEd.GetSelection(); 
  34:   
  35:    // Если статус запроса OK, объекты были выбраны
  36:    if (acSSPrompt.Status == PromptStatus.OK)
  37:    {
  38:        acSSet = acSSPrompt.Value;
  39:        Application.ShowAlertDialog("Количество выбранных объектов: " +
  40:                                    acSSet.Count.ToString());
  41:    }
  42:    else
  43:    {
  44:        Application.ShowAlertDialog("Количество выбранных объектов: 0");
  45:    }
  46:  }

Код VBA/ActiveX

   1:  Sub CheckForPickfirstSelection()
   2:      ' Получение набора Pickfirst
   3:      Dim acSSet As AcadSelectionSet
   4:      Set acSSet = ThisDrawing.PickfirstSelectionSet 
   5:   
   6:      ' Вывод количества выбранных объектов
   7:      MsgBox "Количество объектов в наборе Pickfirst: " & acSSet.Count 
   8:   
   9:      ' Создание нового набора
  10:      Dim acSSetUser As AcadSelectionSet
  11:      Set acSSetUser = ThisDrawing.SelectionSets.Add("User")
  12:   
  13:      ' Запрос выбора объектов на чертеже
  14:      acSSetUser.SelectOnScreen 
  15:   
  16:      ' Вывод количества выбранных объектов
  17:      MsgBox "Количество выбранных объектов: " & acSSetUser.Count
  18:      ' Удаление нового созданного набора
  19:      acSSetUser.Delete
  20:  End Sub


Comments