5.3.4.4. Использование подстановочных символов в критерии фильтра выбора

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

    Обозначения имен и строк в фильтрах выбора могут включать символы подстановки.

    В следующей таблице описаны символы подстановки определенные в AutoCAD, и назначение каждого в составе строки:

Символы подстановки

Символ

Определение

# (фунт)

Соответствует любому одному числовому знаку

@ (собака)

Соответствует любому буквенному символу

.  (точка)

Соответствует любому не буквенному символу

* (звёздочка)

Соответствует любой последовательности символов, включая пустую, и может использоваться в любом месте шаблона поиска: в начале, середине или конце.

? (знак вопроса)

Соответствует любому одному символу

~ (тильда)

Если это первый символ в шаблоне, то соответствует всему ероме этого шаблона.

[]

Соответствует одному из вложенных  символов

[~…]

Соответствует  одному из не вложенных символов

- (дефис)

Используется в скобках, для определения диапазона из символов

, (запятая)

Разделение двух шаблонов

' (обратная кавычка)

Отменяет специальные символы (читает следующий символ буквально)

    Используйте обратную кавычку (') для указания, что следующий символ не спец-символ, а должен быть прочитан буквально. Например, чтобы определить, что только анонимный блок с именем «*U2» может добавлятья в еабор, используйте значение «’*U2».

Выбор MText с определенным словом в тексте

    В этом примере определяется фильтр выбора, который выбирает объекты MText включающие текстовую строку «The».

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

Код VBA/ActiveX

   1:  Sub FilterMtextWildcard()
   2:      Dim sset As AcadSelectionSet
   3:      Dim FilterType(1) As Integer
   4:      Dim FilterData(1) As Variant
   5:      Set sset = ThisDrawing.SelectionSets.Add("SS1")
   6:      FilterType(0) = 0
   7:      FilterData(0) = "MTEXT"
   8:      FilterType(1) = 1
   9:      FilterData(1) = "*The*"
  10:      sset.SelectOnScreen FilterType, FilterData
  11:   
  12:      MsgBox " Количество выбранных объектов: " & sset.Count 
  13:   
  14:      ' Удаление набора
  15:      sset.Delete
  16:  End Sub

Comments