Вводная. Обратились ко мне как-то инженеры из отдела электриков с просьбой написать утилиту, которая помогла бы им считать количество светильников или переключателей в AutoCAD. Вроде бы задача на программном уровне тривиальная - 1. запросить у пользователя наименование светильника или переключателя. 2. Сканировать документ по текстовым примитивам и искать текст с точным вхождением указанного наименования элемента. Исследовав вопрос стало ясно, что не смотря на дороговизну этой программы методы поиска текста очень ограничены.
Самый очевидный способ - это воспользоваться поиском через меню Правка\найти. Появляется такое диалоговое окно:
Конечно, можно найти некоторый текст в чертеже этим методом, но определить, сколько элементов текста соответствуют желаемому имени этим методом очень сложно. Есть ещё фильтрация объектов, но с ней ещё хуже - можно отфильтровать по типу объекта, но этот метод позволяет только фильтровать по ограниченному набору правил и задать там некоторые текстовые функции поиска невозможно. Поэтому её пришлось доработать. "Доработать" оказалось удобнее на языке Autolisp (был у меня опыт работы с ним), да и для совместимости с разными версиями автокада это было как нельзя лучше. Программа работала и на 14 и на 2012 автокаде. Вот пример диалогового окна этой программы:
При первом запуске программы в среде автокада программа показывает диалоговое окно со всеми текстами, которые ей удалось найти в чертеже. В поле "что ищем" указываем, что требуется найти. Например "щит":
Изменим параметр поиска - сообщим, что хотим, чтобы была найдена строка с точным совпадением с указанной строкой "Щит":
На этом возможности не заканчиваются. Программа может посчитать количество найденных совпадений:
А если вы нажмёте на строке с текстом, который отображается в диалоговом окне, то программа покажет вам место, где этот текст находится:
Есть в программе поиска маленькие недочёты (куда же без них): если текст представлен в формате rtf, то программа не замечает этого и коды rtf тоже обрабатывает их как обычный текст. Но если вы ищете английские буквы это не должно создавать неудобства.
Эти возможности наших инженеров удовлетворили вполне.
Самый очевидный способ - это воспользоваться поиском через меню Правка\найти. Появляется такое диалоговое окно:
Конечно, можно найти некоторый текст в чертеже этим методом, но определить, сколько элементов текста соответствуют желаемому имени этим методом очень сложно. Есть ещё фильтрация объектов, но с ней ещё хуже - можно отфильтровать по типу объекта, но этот метод позволяет только фильтровать по ограниченному набору правил и задать там некоторые текстовые функции поиска невозможно. Поэтому её пришлось доработать. "Доработать" оказалось удобнее на языке Autolisp (был у меня опыт работы с ним), да и для совместимости с разными версиями автокада это было как нельзя лучше. Программа работала и на 14 и на 2012 автокаде. Вот пример диалогового окна этой программы:
При первом запуске программы в среде автокада программа показывает диалоговое окно со всеми текстами, которые ей удалось найти в чертеже. В поле "что ищем" указываем, что требуется найти. Например "щит":
Изменим параметр поиска - сообщим, что хотим, чтобы была найдена строка с точным совпадением с указанной строкой "Щит":
Или укажем, что хотим найти по простой маске "Щи*":
На этом возможности не заканчиваются. Программа может посчитать количество найденных совпадений:
А если вы нажмёте на строке с текстом, который отображается в диалоговом окне, то программа покажет вам место, где этот текст находится:
Есть в программе поиска маленькие недочёты (куда же без них): если текст представлен в формате rtf, то программа не замечает этого и коды rtf тоже обрабатывает их как обычный текст. Но если вы ищете английские буквы это не должно создавать неудобства.
Эти возможности наших инженеров удовлетворили вполне.







Комментариев нет:
Отправить комментарий