Автоматизация работы в AutoCAD при помощи скриптов
Одним из преимуществ использования AutoCAD и вертикальных решений на его основе типа AutoCAD Electrical является возможность автоматизации часто повторяющихся операций или действий. Все, что будет рассказано в данной статье об AutoCAD в полной мере справедливо и для AutoCAD Electrical. Сразу оговоримся, что речь пойдет о работе в русскоязычной версии программы.
Что такое сценарий?
Описание процесса
Прежде чем мы сможем автоматизировать какой-либо процесс, мы должны описать его.
В этой статье мы будем создавать сценарий для печати чертежа в PDF. Чтобы AutoCAD мог выполнить требуемые действия, предварительно надо эти действия выполнить самостоятельно и записать их последовательность. А потом описать эту последовательность в сценарии.
Запись последовательности команд
Файлы сценариев AutoCAD не могут взаимодействовать с диалоговыми окнами, поэтому все команды должны быть выполнены через командную строку AutoCAD. Для нашего сценария печати в PDF мы будем использовать команду -ПЕЧАТЬ (тире перед командой подавляет вызов диалоговых окон).
Обращаем ваше внимание на то, что не все команды AutoCAD поддерживают подавление диалоговых окон.
Если вы не знаете ответа на вопрос AutoCAD наберите в командной строке ? и нажмите Enter, чтобы увидеть список доступных опций. Скопируйте требуемую опцию и вставьте ее в командную строку. Возможно, вам придется повторить процедуру несколько раз, чтобы все получилось.
После выполнения процедуры до конца, мы сможем открыть Текстовое окно AutoCAD (для этого нажмите на клавиатуре F2), чтобы увидеть всю последовательность, выполненных вами операций.
Создание файла сценария
Далее перейдем к созданию файла сценария. Для этого создадим новый Текстовый документ в приложении Блокнот.
Не используйте для создания файла сценария программы типа Microsoft Word или аналогичные!
Скопируйте команды из Текстового окна AutoCAD и вставьте их в созданный файл. Для этого достаточно выделить мышкой необходимую область и нажать комбинацию клавиш Ctr + C.
Редактирование файла сценария
Следующий шаг – редактирование файла сценария.
Для командной строки AutoCAD не требуется повторять его запросы, требуется сохранить только ваши ответы. Обратите внимание, что пустые строки также необходимо оставить, ведь вы нажимали в этом месте Enter. Напротив строки команд, заканчивающиеся вопросительным знаком (это вы просматривали варианты ответов) и следующий за ними текст, вплоть до повторения этой команды можно смело удалять.
Внимательно следите за переносом текста на следующую строку! Убедитесь, что текст каждой строки находится на той же линии, что и был.
У вас должно получиться, что-то наподобие:
Обратите внимание, что вам необходимо обязательно оставить пустую строку в конце вашего скрипта. Это равносильно нажатию Enter для подтверждения выполнения команды.
Тестирование сценария
Следующим шагом является проверка сценария. Во-первых, необходимо закрыть созданный нами текстовый файл и изменить его расширение на .scr.
Далее, просто перетащите ваш файл сценария в AutoCAD, чтобы запустить его.
Отладка
Отладка может занять весьма длительное время. Все зависит от того насколько вы были внимательны и аккуратны при создании сценария. Если выполнение сценария прерывается, вызовите Текстовое окно AutoCAD и внимательно просмотрите, на чем ваш сценарий остановился. Внесите необходимые корректировки в файл сценария и повторите попытку.
Добавление комментариев
Теперь у вас есть работающий файл сценария – великолепно. Но через некоторое время может возникнуть необходимость что-то в нем изменить. Например, поменять формат листа. Поэтому стоит добавить в наш скрипт некоторые комментарии.
AutoCAD игнорирует любые строки в вашем файле сценария, которые начинаются с точки с запятой. Таким образом, чтобы закомментировать строку, достаточно в самом ее начале поставить точку с запятой. В итоге наш скрипт приобретет следующий вид:
Рекомендации по применению сценариев AutoCAD для автоматизации рабочего процесса!
Скрипты AutoCAD могут быть использованы для автоматизации многих задач. Вы можете использовать сценарий, чтобы добавить ваши корпоративные стандартные слои или стили в чертеж. Вы можете написать сценарий для обновления основной надписи чертежа. И, конечно, вы можете адаптировать сценарий, который мы только что закончили, для автоматизации печати ваших чертежей.
Как упоминалось в начале статьи скрипты написанные для AutoCAD также работают и в AutoCAD Electrical и в других решениях на базе AutoCAD.
Кроме того используя пакетную обработку файлов при помощи бесплатной программы ScriptPro или приложения AutoScript для AutoCAD вы можете обрабатывать свои чертежи целыми партиями.
Создание, тестирование и отладка сценария в AutoCAD Electrical 2018
Как создавать, тестировать и редактировать сценарии в AutoCAD Electrical 2018 смотрите в следующем видео:
Автоматизация работы в AutoCAD при помощи скриптов, часть 2
В продолжение статей об автоматизации AutoCAD и как вариант одного из вертикальных решений на его основе AutoCAD Electrical, появилась желание поделиться с вами одной из моих находок на просторах Интернета.
Судя по популярности статьи Автоматизация работы в AutoCAD при помощи скриптов нашим читателям она пришлась по вкусу и надеюсь, помогла в автоматизации работы в AutoCAD и AutoCAD Electrical.
Для оптимизации рутинных процедур в рассмотренной статье предлагалось создавать скрипты (сценарии). В ней также достаточно подробно расписаны механизмы создания файлов сценариев, их отладка и выполнение.
И в самом конце статьи даны ссылки на 2 программы для пакетной обработки файлов. Вот приложение AutoScript мы и рассмотрим в данной статье. Именно этой находкой я и хочу с вами поделиться.
Чем примечательна данная утилита? А тем, что позволяет обработать по одному и тому же сценарию сколько угодно файлов. При этом нет необходимости открывать каждый из этих файлов по отдельности, запускать выполнение скрипта, закрывать файл. AutoScript сделает это за вас.
Еще к его преимуществам, в сравнении с упомянутым в статье приложением ScriptPro, можно добавить универсальность. В отличие от ScriptPro, AutoScript прекрасно работает как в 32-х, так и 64-битных операционных системах Windows.
После установки в строке меню вашего AutoCAD появится дополнительное меню AutoScript, под которым вы найдете кнопку запуска программы. А также в ленту меню интегрируется одноименная вкладка с ярлыком запуска команды.
Также произвести запуск можно введя в командной строке команду AUTOSCRIPT.
В результате откроется диалоговое окно программы:
Интерфейс программы довольно прост и нагляден. Разобраться в нем не представляет больших трудностей.
Для добавления файлов для последующей обработки их при помощи вашего скрипта служат кнопки с зеленым плюсиком, которые позволяют, как добавлять файлы по одному, так и сразу указать папку с файлами, например, папку с проектом AutoCAD Electrical.
Лишние файлы исключаются кнопкой с красным крестиком.
Кнопка Browse… открывает диалоговое окно для выбора файла сценария.
При необходимости выбранный файл сценария можно отредактировать, нажав кнопку Edit…
До выполнения обработки файлов по сценарию, очень важно проверить опции обработки.
Для вызова соответствующего окна, нажмите кнопку Options.
Рекомендую снять галочку Save the drawings after finishing the script, чтобы оставить исходные файлы без изменений, если вашим скриптом предусмотрено внесение временных изменений в файлы.
После настройки опций, закройте окно Options и запустите обработку файлов, нажав на кнопку с зеленой стрелкой.
Состояние обработки файлов отображается в колонке Status индивидуально для каждого из файлов.
Если при настройках программы вы указали на необходимость ведения лог-файла, выбрав опцию Create a log file, а так же указали на необходимость отображать его по завершению процесса обработки файлов, опция View log after processing all the drawing, по завершении на экран будет выведен лог-файл обработки.
Пример применения скрипта и программы пакетной обработки AutoScript опубликован в статье Автоматизация работы в AutoCAD при помощи скриптов, часть 3
Список файлов
AutoScript для AutoCAD
Приложение для пакетной обработки файлов AutoCAD
Автоматизация работы в AutoCAD при помощи скриптов, часть 3
Серия статей по автоматизации работы в AutoCAD и соответственно AutoCAD Electrical требовала некоего логического завершения, а может и продолжения, если тема будет интересна нашим читателям. В качестве такой статьи, предлагаем вашему вниманию пример применения самописного скрипта и программы пакетной обработки AutoScript.
О том, как создавать сценарии мы достаточно подробно рассказали в статье Автоматизация работы в AutoCAD при помощи скриптов.
Затем раскрыли тему автоматической обработки комплекта чертежей по заданному сценарию, добавив статью, Автоматизация работы в AutoCAD при помощи скриптов, часть 2.
Теперь рассмотрим порядок действий по объединению этих двух навыков на примере подготовки файлов для передачи Заказчику или, как вариант, третьим лицам. Да, бывает и такое, что надо передать файлы кому-либо именно в формате dwg, при этом имеющаяся в них «интеллектуальная составляющая» не должна «выйти» за пределы предприятия или конструкторского бюро.
Скачайте программу с сайта разработчика или по ссылке, размещенной в конце статьи, и установите, следуя подсказкам. Подробное описание самой программы, её установки, а также ссылка на скачивание, также присутствуют на нашем сайте в уже упомянутой статье Автоматизация работы в AutoCAD при помощи скриптов, часть 2.
Создание Доверенного местоположения AutoCAD
Далее необходимо создать на жестком диске компьютера директорию, в которой будут храниться файлы ваших сценариев, программы на Lisp и т.п. Это на самом деле очень удобно держать все сценарии в одной папке. Проще добавить ее в Доверенные местоположения AutoCAD, да и в случае негативной реакции вашего антивируса на скрипты, проще добавить сразу целиком всю папку в Доверенные.
Пусть это будет папка MyLisp на диске D:\
Необходимо выполнить следующую последовательность действий, чтобы прописать папку в доверенные местоположения:
Создание файла сценария для обработки чертежей
Открываем блокнот и создаем текстовый файл следующего содержимого:
Как условились, размещаем этот файл в папке D:\MyLisp.
Конечно, вы можете создать свой скрипт, это всего лишь образец.
Что делает данный скрипт понятно из комментариев в самом скрипте: преобразует блоки в простые объекты, сводит все слои в один слой, удаляет «мусор» и сохраняет файл в версию AutoCAD 2013.
При пакетной обработке чертежей настоятельно рекомендуем предварительно создавать резервные копии исходных файлов.
Пакетная обработка чертежей
Для запуска программы AutoScript, при условии ее правильной установки, достаточно набрать команду AutoScript в командной строке AutoCAD или воспользоваться соответствующей командой в ленточном меню на вкладке AutoScript.
Если вкладка отсутствует, ее можно включить, воспользовавшись контекстным меню ленточного интерфейса.
В открывшемся окне программы AutoScript, добавляем файлы для обработки при помощи вашего скрипта. Для этого используются кнопки с зеленым плюсиком Add… Допускается, как добавление отдельного чертежа, так и сразу целой папки, содержащей чертежи, например, сразу целиком всех файлов из папки с проектом AutoCAD Electrical.
Нажимаем кнопку Browse… и указываем путь к нашему сценарию (D:\MyLisp\transformer.scr).
Если сценарий необходимо отредактировать, например, закомментировать некоторые из команд воспользуйтесь кнопкой Edit…
После этого обязательно еще раз укажите путь к обновленному сценарию, нажав кнопку Browse…
Обязательно до выполнения обработки файлов, проверьте параметры обработки.
Для вызова диалогового окна настройки параметров обработки служит кнопка Options.
Если нет необходимости в ведении лог файла, снимите галочку Create a log file.
Тоже относится к просмотру лога – View log after processing all the drawing.
Если в настройках выбрана опция создавать лог-файл Create a log file и указана необходимость его отображения View log after processing all the drawing, по завершении обработки файлов на экран будет выведен лог-файл обработки.
Далее следует опция позволяющая добавлять чертежи для обработки из вложенных в выбранную папку подпапок – Search the subfolder when adding the drawings from folder.
Если скриптом предусмотрено сохранение файлов, а в нашем примере так оно и есть, необходимо снять галочку Save the drawings after finishing the script.
Опция Сlose the drawings after finishing the script должна быть активирована, чтобы чертежи после обработки не оставались открытыми. Если же вы хотите визуально оценить результаты обработки, можно эту опцию отключить.
По завершении настройки опций, необходимо закрыть окно Options, нажав ОК и запустить обработку, нажав на кнопку с зеленой стрелкой Run the Project в главном окне программы AutoScript.
В колонке Status программы отображается состояние обработки файлов. По этим данным можно отследить, какой файл обрабатывается в текущий момент времени.
После завершения обработки всего пакета файлов можно отправлять их Заказчику.
Надеемся, что данная статья позволит в значительной мере упростить вам работу в AutoCAD и AutoCAD Electrical и избавиться от рутинной обработки большого количества файлов, например при подготовке чертежей для передачи Заказчику.
Список файлов
AutoScript для AutoCAD.zip
Приложение для пакетной обработки файлов AutoCAD
Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.
Предыстория
Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.
Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.
Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.
В следующих абзацах – мои впечатления, синяки и шишки, мысли и советы (возможно, вредные). Разработка велась под AutoCAD 2010, в качестве IDE использовалась верная Visual Studio 2013 Express. Язык разработки – C#.
1. Подготовка необходимых инструментов
1.1. Собственно AutoCAD
1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD
Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:
Версия SDK и ссылка для загрузки | Совместимость с версиями AutoCAD |
---|---|
2011 | 2011, 2012 |
2010 | 2010, 2011, 2012 |
2009 | 2009 |
2008 x86 | 2008, 2009 x86 |
2008 x64 | 2008, 2009 x64 |
2007 | 2007, 2008, 2009 x86 |
2006 | 2006 |
2005 | 2005, 2006 |
2004 | 2004, 2005, 2006 |
2002 | 2002 |
2000i | 2000i, 2002 |
2000 | 2000, 2000i, 2002 |
R14 | R14 |
Лично меня в свое время очень заинтересовал вопрос обратной совместимости ObjectARX. Как-то раз заказчик спросил: «А с какими версиями AutoCAD сможет работать программа?», и мне пришлось изрядно времени потратить на поиски ответа. В целом, ответ звучит так: «Autodesk поддерживает обратную совместимость в течение трех лет ». Какие версии совместимы между собой, можно посмотреть под спойлером выше.
Пока задачи перекомпилировать программу с другими библиотеками у меня не возникало. Думаю, что это хорошо: перспектива создавать отдельную версию продукта для других выпусков AutoCAD не радует совершенно.
1.3. MS Visual Studio 2013 Express
Великолепная IDE! Больше про нее и говорить-то нечего. Ссылок для скачивания масса – например, вот.
Можно, конечно, использовать и более ранние версии. Я начинал работу над проектом в MS Visual Studio 2010, но потом решил перейти на более современный выпуск.
1.4. Поисковик, усидчивость, здравый смысл
В конце этой статьи приведен список ресурсов, на которых можно позадавать вопросы и, если повезет, получить на них ответы.
2. Создание проекта библиотеки
Вкратце продублирую основные этапы:
2.1. Создать проект «Библиотека классов» («Class Library»)
Эти DLL-файлы находятся в папке с именем inc- . Так, в моем случае я добавляю ссылки на библиотеки из папки C:\ObjectARX 2010\inc-win32.
Первое знакомство с API у меня заключалось в лихорадочных попытках скомпилировать хоть какой-нибудь из примеров, щедро разбросанных по Сети. И что сλка характерно, компилироваться они упорно не хотели, ругаясь на неизвестные пространства имен и классы. В попытках собрать свой первый проект я с горя включил в него чуть ли не все DLL-файлы, которые шли с ObjectARX. Плохой способ – так делать не надо.
Ну, это вопрос не ко мне. Я только могу сказать, что в начале примеров обычно идет перечисление используемых пространств имен – скажем, так:
То, что начинается со слова «Autodesk», – это и есть те дроиды пространства имен, которые мы ищем. Теперь осталось разыскать контейнеры, которые их содержат. Исчерпывающего перечня сопоставлений я найти не смог, поэтому все проверялось методом научного тыка. Если есть более правильный способ, было бы интересно его узнать…
А пока – вот список DLL-файлов, которые я использую в проекте, и содержащихся в них пространств имен:
Есть смысл провернуть такую операцию с наиболее часто употребляемыми классами. Непременно так делайте, код будет компактнее и понятнее. Цинизм данного совета заключается в том, что к тому моменту, когда вы наконец поймете, какие же классы являются у вас наиболее часто употребляемыми, что-то менять будет уже сильно лень.
2.3. Написать код плагина
Все очень просто. Вначале мы указываем необходимые пространства имен. Нам потребуются два.
Таким образом, всего необходимо добавить три ссылки:
UPD. 09.04.2018. Важное дополнение от lasteran: В новых версиях (предположительно начиная с AutoCAD 2013) класс CommandMethod содержится не в AcDBMgd.dll, а в AcCoreMgd.dll, так что придётся добавить ссылку ещё и на эту библиотеку. Учтите это, если работаете с новой версией!
AutoCAD не предоставляет разработчику возможность выгрузить плагин после того, как он будет загружен. Поэтому реально метод Terminate будет вызываться только в одном случае – при закрытии самого AutoCAD.
Почитать поподробнее про методы Initialize и Terminate можно тут (rus) и там (англ.).
После сборки этого проекта у нас получится готовый к употреблению плагин.
2.4. Загрузить созданный плагин
Нужно запустить AutoCAD и выполнить команду «NETLOAD»:
Затем в открывшемся окне указать путь к файлу плагина:
После этого плагин будет загружен в AutoCAD. Мы должны увидеть первое сообщение:
Если при загрузке плагина произошла критическая ошибка, она будет выведена в консоль AutoCAD:
Сообщения обычно понятные – помогут разобраться, если случай не сильно клинический. 🙂
Теперь, когда плагин загружен, можно выполнить нашу тестовую команду:
… и увидеть результат:
Работает. Теперь можно закрывать AutoCAD.
2.5. Отладить плагин (при необходимости)
Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.
Скрипты в AutoCAD. Самое недооцененное оружие
В своей первой статье я раз 15 упомянул термин «сценарии» и ни разу не объяснил, что это такое, как они пишутся (разумеется, не в плане орфографии, а в плане содержания файла) и, главное, – для чего, собственно, нужны. Пришло время пролить свет на этот темный, неизведанный уголок AutoCAD.
Глава 1. Почему мимо скриптов прошли пользователи AutoCAD?
«Программировать я не умею, изучать что-то новое мне некогда, на программистов вообще учатся годами, в общем, нам это чуждо, мы на это не пойдем».
Даже если самый отважный пользователь и осмелится нажать кнопку « Выполнить сценарий » на ленте, не побоявшись, что у него «все исчезнет», «собьются настройки» и произойдут прочие необратимые процессы, то перед ним лишь откроется окно выбора файла с расширением *.scr.
«А где его взять? В какой папке они лежат? Наверное, нужно скачивать с бог весть каких забугорных сайтов? Быть может, это уже устаревшая команда? Скорее всего, какая-то очень специфическая функция, нужная только тем, кто ей пользуется, а если я ее не знаю, то мне она и не нужна. »
Именно так прошло мое первое знакомство со сценариями. Я почти уверен, что подобное происходило с 97% пользователей, нажавших эту подозрительную кнопку на панели «Приложения».
Глава 2. Почему мимо скриптов прошли программисты?
Во-первых, не существует как такового языка программирования для написания сценария. Хоть я однажды и использовал выражение «на языке команд AutoCAD», но в классическом понимании «языка» так говорить некорректно. Это просто совокупность команд AutoCAD, имеющая мало общего с языками программирования, их синтаксисом и правилами написания кода.
Во-вторых, каждый из языков программирования, поддерживаемых AutoCAD, имеет гораздо больший спектр возможностей, нежели скрипты, дает возможность управлять выполнением кода, создавать диалоговые окна для ввода данных или управления выполнением программы, позволяет обходить возможные ошибки и т. д. Помимо этого, модули «упаковываются» в установочные файлы, а после установки запускаются с ленты, что очень и очень удобно.
Добавим сюда ряд ограничений возможностей скриптов (об этом ниже) и приходим к неутешительному, но вполне закономерному выводу – программистам скрипты просто не интересны, так как они не имеют никаких конкурентных преимуществ перед любым из языков программирования как с точки зрения функциональных возможностей, так и в плане удобства использования готового продукта.
Но то программисты, это отдельная категория! С простыми же пользователями ситуация иная…
Глава 3. «У нас не было шансов…»
Ну что ж, книги так книги.
Первым текстовым материалом по автоматизации работы в AutoCAD для меня являлся замечательный труд нашего соотечественника:
Владимир Свет, «AutoCAD. Язык макрокоманд и создание кнопок».
Выпущенная в далеком 2004 году книга и по сей день является во многом актуальной и должна стать настольной для каждого начинающего пользователя AutoCAD.
Ах да, а как же справка AutoCAD? Ведь это первое, что читает пользователь AutoCAD в любой непонятной ситуации. На мой взгляд, оба эти материала стоит рассматривать как единое целое, а вот почему я так считаю – читайте в примечании.
В книге приведены весьма спорные примеры использования скриптов: слайд–фильм, вывод переменных в строку состояния и настройка размерного стиля – всё то, что мало чем может помочь в работе проектировщика или хоть как-то ее облегчить. С высоты прожитых со сценариями лет могу ответственно заявить – это совершенно не те задачи, которые можно выполнять скриптами, это, скорее, какие-то крайности, ответвления и нетрадиционные способы их использования (использовать планшет в качестве разделочной доски, конечно, можно, но… думаю, Вы поняли).
«Интересно, вероятно, полезно, но пока не все понятно, изучу позже, когда появится свободное время».
Постойте, господа! В. Света я читал, когда скрипты были мне совершенно чужды, и, естественно, я прошел мимо них. Но почему же сейчас, когда я съел не одну собаку в написании скриптов и работе с ними, я опять прохожу мимо, откладывая в долгий ящик Пандоры информацию из книги? Может, дело не во мне (подразумеваю при этом всех читателей)? Может, дело в книгах – подаче материала, примерах, методах и приемах, описанных в этих главах?
Таки да. Как человек, открывший для себя сценарии с нуля и вырастивший из этого инструмента целый арсенал мощных средств для борьбы с рутинной работой в AutoCAD, возьму на себя смелость раскритиковать две эти, бесспорно, замечательные книги в части повествования о скриптах.
Главная идея, раскрывающая огромный потенциал этого инструмента, отсутствует и у того и у другого автора. Оба они приводят примеры сценариев, решающих одну конкретную задачу с постоянным результатом. То есть, в их интерпретации, скрипты – это заготовленные scr-файлы, содержимое каждого из которых неизменно и который выполняет строго определенный набор команд для реализации конкретной задачи. В этом случае спектр решаемых задач чрезвычайно сжимается, при этом их можно легко выполнить и другими, более тривиальными способами, например настройкой шаблона или макросами команд.
Таким образом, ни справка, ни признанные пользователями AutoCAD труды авторов не оставили шансов скриптам стать популярными среди пользователей, раскрыть свой потенциал и занять заслуженное место среди штатных средств автоматизации работы в AutoCAD.
Глава 4. «Он дал скриптам вторую жизнь. »
Идея, многократно расширяющая возможности скриптов, проста, как все гениальное:
Думаю, каждый из вас уже догадался, что в очередной раз просто незаменимым инструментом для обработки исходных данных является программа Excel.
Таким образом, написав один раз в Excel формулы, формирующие текст сценария с использованием столбца(ов) исходных данных для конкретного чертежа, мы получаем шаблон, генерирующий готовый сценарий. В него необходимо только помещать новые данные и пользоваться им снова и снова. Как я и писал выше, при такой схеме работы scr-файл является всего лишь связующим звеном между Excel и AutoCAD.
При должном уровне знания Excel (а инженер просто обязан знать его на хорошем уровне) можно составить около десятка табличек, выполняющих типовые, универсальные задачи, впоследствии комбинируя их и усложняя под узкоспециализированные задачи.
Если у вас в голове еще не сложилась расписанная выше логическая цепочка, смею предположить, что в ней пока отсутствует одно не самое очевидное звено, соединяющее два объекта совершенно разных типов: ячейку электронной таблицы Excel и текст любого текстового документа ASCII (будь то txt-файлы, scr и любые другие подобного типа). Преобразуется одно в другое посредством до боли родного «копипаста».
В контексте написания сценария, конечно, можно использовать «межъячеечную» табуляцию как оператор, например, для перехода от координаты X к Y. Но всё же такой способ — не самый удобный и простой для написания сценария. Я придерживаюсь концепции написания текста сценария, когда текст одной итерации сценария полностью формируется в одной ячейке, посредством сцепки текста команд и подкоманд с ячейками, содержащими необходимые значения (исходные данные). Так гораздо проще отследить возникающие ошибки и отлаживать сценарий.
Глава 5. Excel как среда программирования
Если вы сисадмин–хакер–программист из голливудских фильмов, то вы без труда напишете любой код на любом языке в программе «Блокнот», и этот код будет безошибочно работать. Во всех остальных случаях он пишется в специальных программах, называемых средой программирования, созданных для удобного, быстрого написания кода с минимальным количеством ошибок. Например, в AutoCAD интегрированы среды редактора Visual Basic for application (VBA) и Visual LISP. Результатом написания макроса в этих редакторах является текстовый документ, который гипотетически можно написать и в блокноте, но вот времени и сил это займет в разы больше.
Специального редактора для написания сценариев не существует, равно как не существует и специального языка. Текст сценария – это просто последовательность команд, подкоманд и значений для них, которые мы вводим с клавиатуры, работая в AutoCAD.
Называть Excel средой программирования скриптов, конечно же, некорректно. Тут нет ни подсветки функций, ни выпадающего списка функций из библиотек, ни блоков готового кода, ни проверки ошибок – в общем, ничего, что связывало бы с Excel с редакторами кода. Тем не менее в Excel есть масса других функций, которые позволяют легким движением руки писать сотни строк сценария: автозаполнение, сцепка ячеек, подстановка и масса других формул для обработки значений исходных данных.
Добавим сюда всю мощь встроенного в Excel функционала VBA и в довесок – возможность связывать значения ячеек с другими Excel-таблицами, например с файлами извлечения данных. И вот уже идея работать в AutoCAD посредством записанного в блокнот перечня команд не кажется такой бредовой.
Глава 6. Возможности и ограничения использования скриптов
Помимо этого, нужно понимать, что нельзя остановить работу скрипта для ввода данных с последующим его продолжением, как, например, макрос операций. Сценарий можно только запускать, останавливать и перезапускать.
Также нужно отдавать себе отчет в том, что, в зависимости от сложности задачи, на написание сценария может уйти гораздо больше времени, чем на ручное ее выполнение. Способ получения исходных данных может быть достаточно трудоемким – например, если нужную информацию невозможно получить извлечением данных или другим автоматизированным способом. Только при определенном опыте можно найти тонкую грань, когда следует «уходить в автоматизацию», или подключать «самую быструю руку на Диком Западе». Но при этом чем больше будет наработок в виде готовых сценариев и опыта в их написании, тем ближе эта грань будет находиться к автоматизации, замещая ресурсозатратный ручной труд. К выбору способа решения задачи всегда нужно подходить с холодной головой и горячим кофе.
Глава 7. Пять шагов от идеи до результата
Еще в детстве я услышал шутку, в которой доля шутки очень мала, и звучит она так:
«Чем сложнее задача – тем проще ее не решать».
В контексте автоматизации работы в AutoCAD ее смысл интерпретировать достаточно легко – какие бы возможности ни давал AutoLISP (и другие языки), если для его изучения нужно время и немалые усилия, то изучать его будут далеко не все!
Глава 8. «QuickStart», или минимизация действий для запуска скриптов
Что ж, мне как бывалому дилеру скриптов, есть что вам предложить.
Запускать сценарий выбором scr-файла через окно выбора, да еще и открываемого через активацию вкладки «Управление» и поиском кнопки «Выполнить сценарий», – просто непозволительная роскошь. Запускать сценарий затягиванием scr-файла в окно AutoCAD также удовольствие сомнительное… Включаем логику и фантазию!
Если scr-файлы индивидуальны (их содержимое постоянно меняется), то нет никакого смысла хранить старые версии – следовательно, при создании нового файла сценария можно подменять старый, даже если это сценарии из разных Excel–шаблонов. Таким образом, мы получаем универсальный, регулярно обновляемый scr-файл с постоянным именем и расположением. Думаю, вы уже догадались, куда я клоню.
Подглядываем в командной строке, какая команда запускается при нажатии кнопки «Выполнить сценарий» на ленте, через пробел присоединяем к ней путь к файлу скрипта, и всё – можно вешать готовый макрос команды на красивую кнопочку на панели быстрого доступа!
Когда вы несколько раз обожжетесь на том, что забыли выключить привязку перед запуском сценария, вследствие чего близкорасположенные вершины создаваемых сценарием примитивов слились в страстном поцелуе, то макрос вышеозвученной кнопки обзаведется предусмотрительной припиской «osmode 0» перед командой ПАКЕТ, а в конце макроса значение этой переменной примет наиболее популярное для вас сочетание привязок. У вас получится что-то вроде:
^C^Cosmode 0 ПАКЕТ «D:/Google Диск/AutoCAD/СЦЕНАРИИ/SCRIPT.scr»;osmode 6527
Таким образом, всего в один заветный клик можно запускать свежевыжатый из Excel-шаблона scr-файл сценария!
И вот вроде уже и сценарии запускаются одной кнопкой, и открываются Excel-ки этих сценариев с палитры, но все равно нет того желанного ощущения, что работа полностью автоматизирована…
Идем на крайние меры: если нет вообще никакого понятия, что такое VBA, – смотрим на You Tube несколько обучающих видео по данному вопросу. Через полчаса с «онлайн-дипломом программиста» гуглим вопрос «Экспорт данных из Excel в txt». Копируем готовый макрос в новый модуль файла сценария и вешаем его на красивую кнопочку (у меня это зеленая иконка scr-файла). Немного поднастроив макрос, заставив его экспортировать данные в scr-файл с названием и расположением, прописанным в макросе на запуск сценария, а также брать только те ячейки, в которых есть сценарий, – получаем вполне достойную автоматизацию работы в AutoCAD! Также не будет лишним добавить макрос на очистку таблицы от старых исходных данных, что хоть и немного, но сэкономит ваше время.
Глава 9. «Полный пакет скриптов»
Первым практическим применением скриптов в моей производственной деятельности было внедрение атрибутов в блоки дорожных знаков. Сценарий открывал блок каждого в редакторе, вставлял атрибуты из буфера обмена, закрывал редактор и обновлял атрибуты в только что отредактированном блоке. Учитывая, что блоков было более двухсот, а процесс открытия и закрытия редактора блоков не самый быстрый, – сценарий выполнялся около пяти минут, за которые я успел налить и выпить кружку чая. Наблюдать, как компьютер самостоятельно выполняет работу, которую вручную пришлось бы делать часами, попивая при этом любимый напиток, – бесценно.
Достаточно популярная задача: «Вставить блок в известные координаты».
Элементарный пример: нужно было достроить поверхность на топографическом плане, где не хватало изыскательской съемки. Пару часов с отражателем в поле, дорога домой, экспорт данных – и вот он, заветный dxe-файл с точками из тахеометра в моих руках. Легким движением руки извлекаем данные о координатах точек в модели, вносим эти данные в файл сценария, в качестве атрибута отметки используем координату Z. Жмем волшебную кнопку, и вместо точек в модели красуются блоки с отметками.
Конечно, стоит приложить немного фантазии и знаний Excel, чтобы универсализировать таблицу сценария под блоки, содержащие разное число и типы атрибутов (одно- или многострочные), но результат будет радовать вас годами.
Этим же файлом сценария я полностью освободил геодезиста от камеральных работ по оформлению исполнительных съемок по устройству слоев дорожной одежды, в качестве одного из атрибутов используя отметку передаваемых мне точек съемки, а в качестве второго – вычисленную в этой координате проектную отметку. Вы не поверите, но вся дорога была построена строго в допусках .
Сценарий из серии «Лень – двигатель прогресса». Мне не очень нравится, как в AutoCAD работает окно «Слои». Я написал простенький сценарий с командой «Слой» с возможностью добавления префиксов/суффиксов в названии, указания цвета, толщины линий, «печатаемости» и т. д. Частенько перед началом работы в новом чертеже накидываю в таблицу нужные названия слоев с нужными настройками, пара кликов – и можно уже начинать непосредственно черчение, не отвлекаясь на настройки слоев.
Куда более прагматичный сценарий. «Передали координаты оси в скане…». Отсканировать и распознать – еще полбеды, но вот проверить соответствие координат линии на плане или сравнить фактическое положение оси с проектным – тоска берет, как подумаешь, что придется забивать тысячи этих цифр вручную. Простейший сценарий на построение полилинии по координатам с легкостью поднимет вам настроение, если такая задача вдруг постучится к вам в офис.
Если в ваши опытные натруженные руки попал чужой чертеж с названиями именованных объектов, с которыми вы в корне не согласны, а переименовывать вручную каждый объект ну очень лень, – на помощь придет сценарий. Команда «НОВОЕИМЯ» и связка «РЛИСТ П» помогут быстро настроить все так, как вам удобно, – добавить или убрать префиксы, сократить длинные названия или пронумеровать в нужном порядке. Получить список слоев и блоков можно без особых усилий при помощи извлечения данных. С названием листов в файле чуть сложней, но если, опять же, применить смекалку, то можно распотрошить dsd–файл настройки публикации и взять из него только названия листов. Но я думаю, для получения каждого из этих списков в интернете уже годами пылятся соответствующие LISP-ы.
В продолжение темы адаптации чужих чертежей: вам пришел чертеж, листы в котором настроены на отсутствующее у вас устройство (физический принтер). Листов уйма, перенастраивать вручную – не вариант. Внимательный пользователь заметит, что при запуске печати в «безоконном» режиме один из запросов – «имя устройства вывода»! Все, решить вопрос – дело техники: получаем список листов в файле, пишем команду «-печать», сцепляем имя нужного листа с парой имитаций нажатия Enter (\u+000a) и названием нужного устройства ввода. Делов-то.
Продемонстрированная на моем канале работа этого сценария вызвала наибольший интерес зрителей, так как проблема разбивки на листы довольно остра среди специалистов, решающих сложные производственные задачи в AutoCAD. Не могу назвать этот сценарий простым. Выполняемые им действия по разбивке на листы достаточно неочевидны, кроме того, еще и чисто технически написание такого сценария достаточно сложно, учитывая, что в качестве исходных данных принимаются положения рамок листов, их масштаб и поворот. Помимо этого, в зависимости от условий, блоки рамок можно как вытаскивать в пространство листа, так и оставлять в модели. Тем не менее, шаг за шагом, после долгих поисков методов решения и обхода ошибок, сценарий был написан, прекрасно себя зарекомендовал и применяется не только у меня, но и у ряда пользователей, обратившихся ко мне за помощью в этом вопросе.
Самый технически сложный сценарий был написан мной, на удивление, не для работы, а в рамках «руки помощи» дружественной организации. Стояла задача: построить порядка пятисот поперечных профилей автомобильных дорог с указанием высотных отметок, пересекаемых коммуникаций и проектных сооружений в полном соответствии с ГОСТ. Вроде ничего сложного, да только в качестве исходных данных были разрозненные куски планов. Строить проектную поверхность по ним было бессмысленно, так как таких кусков было более сотни, во многих из них высотные отметки лежали в плоскости XY. Ни один известный мне САПР не подходил для этой задачи. Пришлось использовать нестандартный подход, писать и дважды переписывать сложный, составленный из трех частей сценарий, каждая часть которого выполняла отдельные построения.
Так как задача решалась в одиночку, не было необходимости ни с кем налаживать взаимодействие, доказывать эффективность средств автоматизации и постоянно кого-то учить, – в бой пошли все известные мне средства автоматизации. Оставлю за скобками процесс работы, скажу лишь то, что мои друзья были в восторге от того, насколько качественно и безошибочно были выполнены все построения. Такой эффект мог быть достигнут только при минимизации человеческого фактора посредством максимально возможного взаимодействия AutoCAD и Excel. В этом проекте мне удалось достичь эффекта синергии от всех доступных мне средств стандартной автоматизации работы в AutoCAD. Хотите узнать, каким образом, – подробно об этом я расскажу в следующей статье.
Заключение
«Сценарии – альтернатива для тех, кто боится кодить».
Да, конечно же, сценарии – это далеко не панацея от всех проблем и нестандартных задач, которые приходится решать в AutoCAD. Мало того, даже у меня использование сценариев занимает лишь малую долю общей работы в AutoCAD. Но все же, на мой взгляд, это самый доступный способ автоматизации работы с точки зрения затрачиваемого на его изучение времени и получаемого результата.
Парадокс заключается в том, что каждый инженер, работающий в AutoCAD, сам того не подозревая, априори, уже владеет «языком команд AutoCAD», а «среда программирования» Excel – знакома еще со школы! Нужно всего лишь овладеть простейшим инструментарием скриптов, чтобы объединить эти знания в мощное средство автоматизации, способное сэкономить кучу времени для решения более важных инженерных задач, освободив от совершенно ненужного ручного труда.