Как перевести этот код AutoCAD VBA в Python?

1

Я пытаюсь автоматизировать некоторые рисунки в AutoCAD, используя Python, и я работаю с методом SelectOnScreen. Вот код в VBA:

Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
FilterType(0) = 0
FilterData(0) = "TEXT"
selection.SelectOnScreen FilterType, FilterData

В Python я использую это как:

FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0]) 
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['TEXT'])
selection.SelectOnScreen(FilterType, FilterData)

и это работает в AutoCAD. Однако я хочу выбрать различные типы объектов (тексты и mtexts), и у меня есть пример кода в VBA. Так как же перевести следующий код VBA в Python?

Dim FilterType(1) As Integer
Dim FilterData(1) As Variant
FilterType(0) = 0
FilterData(0) = "Text"
FilterType(1) = 0
FilterData(1) = "MText"
selection.SelectOnScreen FilterType, FilterData

Вот моя попытка кода Python, который я пробовал, но он не работает в AutoCAD:

FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0, 0]) 
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ["MTEXT", "TEXT"])
selection.SelectOnScreen(FilterType, FilterData)

Ничего не выбирает, когда я пытаюсь его использовать.

Теги:
autocad

1 ответ

0

Причина, по которой вашему коду ничего не удается выбрать, заключается в том, что фильтр выбора имеет неявную логику AND, поэтому объект не может быть одновременно и TEXT и MTEXT.

Поскольку фильтр выбора разрешит совпадение с подстановочными знаками, вы можете использовать следующее:

FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0]) 
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['TEXT,MTEXT'])
selection.SelectOnScreen(FilterType, FilterData)

Или, если вы не беспокоитесь о возможности выбора RTEXT:

FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [0]) 
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['*TEXT'])
selection.SelectOnScreen(FilterType, FilterData)

В качестве альтернативы вы можете использовать логические операторы <OR и OR> в сочетании с кодом группы -4:

FilterType = win32com.client.VARIANT(VT_ARRAY|VT_I2, [-4, 0, 0, -4]) 
FilterData = win32com.client.VARIANT(VT_ARRAY|VT_VARIANT, ['<OR', 'TEXT', 'MTEXT', 'OR>'])
selection.SelectOnScreen(FilterType, FilterData)
  • 0
    Спасибо! Это именно то, что мне было нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню