5.3.4.2. Определение множественного критерия в фильтре выбора

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

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

Выбор объектов удовлетворяющих двум трём1 условиям

    В этом примере определяются два  три условия отбора выбранных объектов: объект должен быть кругом синего цвета и находится на слое 01.

1 - прим. Бушмана Андрея: я зачеркнул слова "два" (они фигурируют в оригинале), а так же добавил тот текст, который выделен жирным курсивом.

Код 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("FilterBlueCircleOnLayer0")> _
   7:  Public Sub FilterBlueCircleOnLayer0()
   8:    '' Получаем редактор текущего дкумента
   9:    Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor 
  10:   
  11:    '' Создание массива из TypedValue дляопределения условий фильтра
  12:    Dim acTypValAr(2) As TypedValue
  13:    acTypValAr.SetValue(New TypedValue(DxfCode.Color, 5), 0)
  14:    acTypValAr.SetValue(New TypedValue(DxfCode.Start, "CIRCLE"), 1)
  15:    acTypValAr.SetValue(New TypedValue(DxfCode.LayerName, "0"), 2) 
  16:   
  17:    '' Назначение критериев фильтра объекту SelectionFilter
  18:    Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr) 
  19:   
  20:    '' Запрос выбора объектов на чертеже
  21:    Dim acSSPrompt As PromptSelectionResult
  22:    acSSPrompt = acDocEd.GetSelection(acSelFtr) 
  23:   
  24:    '' Если статус запроса ОК, объекты были выбраны
  25:    If acSSPrompt.Status = PromptStatus.OK Then
  26:        Dim acSSet As SelectionSet = acSSPrompt.Value
  27:        Application.ShowAlertDialog("Количество выбранных объектов: " & _
  28:                                    acSSet.Count.ToString())
  29:    Else
  30:        Application.ShowAlertDialog("Количество выбранных объектов: 0")
  31:    End If
  32:  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("FilterBlueCircleOnLayer0")]
   7:  public static void FilterBlueCircleOnLayer0()
   8:  {
   9:    // Получаем редактор текущего дкумента
  10:    Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor; 
  11:   
  12:    // Создание массива из TypedValue дляопределения условий фильтра
  13:    TypedValue[] acTypValAr = new TypedValue[3];
  14:    acTypValAr.SetValue(new TypedValue((int)DxfCode.Color, 5), 0);
  15:    acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "CIRCLE"), 1);
  16:    acTypValAr.SetValue(new TypedValue((int)DxfCode.LayerName, "0"), 2); 
  17:   
  18:    // Назначение критериев фильтра объекту SelectionFilter
  19:    SelectionFilter acSelFtr = new SelectionFilter(acTypValAr); 
  20:   
  21:    // Запрос выбора объектов на чертеже
  22:    PromptSelectionResult acSSPrompt;
  23:    acSSPrompt = acDocEd.GetSelection(acSelFtr); 
  24:   
  25:    // Если статус запроса ОК, объекты были выбраны
  26:    if (acSSPrompt.Status == PromptStatus.OK)
  27:    {
  28:        SelectionSet acSSet = acSSPrompt.Value;
  29:        Application.ShowAlertDialog("Количество выбранных объектов: " +
  30:                                    acSSet.Count.ToString());
  31:    }
  32:    else
  33:    {
  34:        Application.ShowAlertDialog("Количество выбранных объектов: 0");
  35:    }
  36:  }

Код VBA/ActiveX

1:  Sub FilterBlueCircleOnLayer0()
   2:      Dim sset As AcadSelectionSet
   3:      Set sset = ThisDrawing.SelectionSets.Add("SS1") 
   4:   
   5:      ' Определение списка фильтров, только синие круги на слое 0
   6:      Dim FilterType(2) As Integer
   7:      Dim FilterData(2) As Variant
   8:      FilterType(0) = 62: FilterData(0) = 3
   9:      FilterType(1) = 0: FilterData(1) = "Circle"
  10:      FilterType(2) = 8: FilterData(2) = "0"
  11:   
  12:      ' Запрос пользователю выбрать объекты
  13:      ' и добавление их в набор
  14:      sset.SelectOnScreen FilterType, FilterData 
  15:   
  16:      MsgBox " Количество выбранных объектов: " & sset.Count 
  17:   
  18:      ' Удаление набора
  19:      sset.Delete
  20:  End Sub
Comments