Перед прочтением этого материала, настоятельно рекомендую ознакомиться с первой часть данного цикла статей, в которой мы учились создавать кнопки под будущие макросы. В данной статье мы будем разбираться непосредственно с содержимым макросов - разберем синтаксис и логику создания своих макрокоманд. Итак, поехали:
[Синтаксис макросов]
Давайте познакомимся с основными управляющими символами, которые могут пригодится в процессе создания макросов. Советую для начала быстро пробежаться по этому списку и перейти к разбору примеров, после чего вернуться к данной таблице и перечитать информацию в ней еще раз более вдумчиво:
^C^C | Имитирует двойное нажатие на клавишу ESC (т.к. перед выполнением команды желательно убедиться, что в данный момент не выполняется другая команда) – это стандартное начало любого макроса. Символы С вводятся строго в англ. раскладке! |
^Q | Подавление всех запросов и подсказок в командной строке — «тихий» режим работы макроса. |
* | Звездочка перед началом макроса запускает его циклический повтор. Макрос будет выполняться снова и снова до тех пор, пока не будет вызвана другая команда или не будет нажат Esc. |
— | Дефис перед именем команды подавляет открытие диалоговых окон. Например, команда СЛОЙ открывает палитру Диспетчера свойств слоев, а запись -СЛОЙ запустит команду в текстовом режиме с возможностью выбора опций в командной строке. |
_ | Нижнее подчеркивание указывает на то, что будет использоваться глобальное, а не локализованное имя команды. Подчеркивание необходимо использовать перед названием любой команды и опции на английском языке, если вы работаете в локализованной версии AutoCAD. Имя команды на русском языке, например: КРУГ (вместо _circle), подчеркивания не требует. |
. | Точка — это указание того, что выполняемая команда будет использовать встроенное определение команды, а не повторное определение команды. Применяется для вызова именно «родной» команды AutoCAD в ситуациях, когда есть риск, что пользователь создал свою команду (обычно через LISP) с тем же именем, т.е. переопределил команду. |
; | Точка с запятой имитирует нажатие клавиши Enter (Ввод). «Пробел» в тексте макроса делает тоже самое (поэтому не ставьте пробелы в тексте макроса просто так), но точка с запятой нагляднее, когда требуется имитировать несколько нажатий Enter подряд — эти символы видны и легче посчитать. |
\ | Обратная косая черта — это символ, который формирует в макросе паузу для ввода данных пользователем (например, указание точки на экране или ввод числа в командной строке) |
@ | Данный символ вставляется, если нужно ввести относительные координаты точки. Координаты вводят в последовательности X,Y,Z через запятую, например @10,20 — это смещение на 10 по оси X и на 20 по оси Y относительно предыдущей указанной точки (если Z=0, его не указывают). Тогда как абсолютные координаты, например: 10,20 отсчитываются от нуля системы координат. |
_p | Используется внутри какой-либо команды для выбора предыдущей группы выделения. |
_l | Используется внтури какой-либо команды для выбора последнего созданного объекта. |
_single | Переключает команду в режим выбора одного объекта: после указания объекта на экране с помощью клика мыши или рамки выделения, команда переходит к исполнению, не требуя подтверждения выбора. |
Этот список далеко не полный. Более подробную информацию вы можете найти в старой, но неустаревающей и очень интересной книге В. Света «AutoCAD. Язык макрокоманд и создание кнопок», а также в справке по программе.
[Общий принцип создания макросов]
Нажатие на любую иконку, расположенную в ленте или на панели инструментов, запускает ту или иную команду. У каждой команды AutoCAD есть имя (оно выводится в командной строке), и вместо нажатия на иконку в графическом интерфейсе можно запустить команду, введя ее имя с клавиатуры, после чего следует нажать Enter. После запуска команда последовательно выдает запросы, отвечая на которые (с помощью мыши и/или клавиатуры) пользователь добивается от программы нужного поведения. Также, почти у всех команд есть опции. Они выводятся рядом с запросами и позволяют запустить альтернативные сценарии поведения команды. Более подробно я рассказывал об этом в видеоуроке про командную строку - посмотрите его, если не до конца понимаете о чем идет речь.
По сути, опытный пользователь программы отличается от новичка именно тем, что наизусть знает основные опции (ветвления) команд, с которыми работает, и пробегается по тем или иным «маршрутам» не задумываясь.
Нажмем на иконку прямоугольника в ленте и перенесем свой взгляд в командную строку:
Глобальное имя команды _rectang отображается сверху, а в строке ниже отображается локализованное ПРЯМОУГОЛЬНИК. Дальше идет запрос на указание точки первого угла и доступные опции — они отображаются в квадратных скобках [ ].
Выбрать опцию можно щелчком мышки по соответствующему слову, через контекстное меню по правой кнопке, или же посредством ввода в командную строку заглавной буквы нужной опции (на картинке это буквы ф, у, с, т или ш) с последующим нажатием Enter. Такие буквы в опциях называют ключами команд. Причем ключ — это всегда заглавная буква в названии опции. Она может быть первой, но может и не быть. Например, для опции Длина команды Полилиния ключом будет буква и, а не д, будьте внимательны:
Если какие-то запросы имеют значения по умолчанию, то они отображаются в командной строке в треугольных скобках, например <50> или <выбрать все>. Согласиться со значением по умолчанию можно просто нажав Enter без введения каких-либо данных.
Чтобы написать любой макрос, вам потребуется узнать имя команды, запустить ее и внимательно, не пропуская ни единого шага, записать нужную последовательность действий в виде текстовой строки, с использованием управляющих символов (приведенных в таблице выше) и ключей для выбора нужных опций. Напомню, что куда помещать эту строку с макросом мы подробно разобрали в первой части. Лучше заранее подготовьте себе палитру с кнопками, чтобы можно было быстро копировать туда макросы из этой статьи для их проверки и тестирования. Кнопки на инструментальных палитрах удобны тем, что изменения в макросы можно вносить буквально в пару кликов.
[Несколько примеров]
Как мы выяснили выше, работа с любой командой в Автокаде — это своего рода маршрут из точки A (запуск команды) в точку Б (получение результата), с развилками в виде опций команды. Давайте разберем несколько примеров, чтобы лучше прочувствовать эту концепцию.
ПОСТРОЕНИЕ ПРЯМОУГОЛЬНИКА ПО РАЗМЕРАМ
Например, для команды прямоугольник последовательности могут быть следующие:
Мы вызвали команду, сделали первый шаг, а дальше пошло ветвление. Запишем «нижний маршрут» в виде макроса. Для наглядности и лучшего понимания сделаем это двумя способами: с использованием глобальных имен (первая строка) и локализованных (вторая):
^C^C_.rectang;\_d;\\@1,1;
^C^Cпрямоугольник;\р;\\@1,1;
Скопируйте любую из этих строк в кнопку на палитру и посмотрите, как работает данный макрос. Если вы работаете в русскоязычной версии программы, то макросы удобнее писать на русском языке, но если есть желание, можете делать это и на английском — такие макросы будут работать в любой версии программы. Но желательно избегать «смешанного» языка в пределах конкретного макроса — остановитесь на чем-то одном, чтобы не путаться.
А теперь давайте разберемся, что здесь к чему, на примере англоязычного макроса:
^C^C | Стандартное начало любого макроса, которое прерывает выполнение любой другой команды, что эквивалентно двойному нажатию ESC |
_.rectang | Вызываем глобальное не переопределенное имя команды. В русской версии макроса тут просто указано имя команды прямоугольник |
; | Имитируем нажатие Enter после ввода имени команды |
\ | Ставим макрос на паузу, чтобы пользователь указал точку для первого угла прямоугольника |
_d | Ключ для выбора опции _d на английском (т.к опция называется Dimensions) или р (опция Размеры) на русском |
\\ | Два пользовательских ввода подряд, т.к. команда запросит сначала длину, а затем ширину нашего прямоугольника |
@1,1 | Указание точки в относительных координатах. Добавлено для того, чтобы прямоугольник строился вверх и вправо относительно первого угла; по аналогии @-1, -1 — ориентация прямоугольника вниз и влево |
; | Подтверждение завершения ввода координат |
Данный макрос здорово экономит время при создании прямоугольников — нам не нужно заходить в опцию Размеры вначале и выбирать ориентацию прямоугольника в конце.
ПРОВЕРКА ФАЙЛА НА ОШИБКИ
В предыдущей статье я для примера привел макрос проверки файла на ошибки, и обещал разобрать его работу. Думаю, что после примера с прямоугольником, этот макрос покажется вам ну очень простым:
^C^C_.audit;_y;
- сначала мы вызываем команду _.audit
- подтверждаем ее вызов ;
- после чего на запрос «Исправить все обнаруженные ошибки?» отвечаем ключом _y (от английского yes — «да»)
- подтверждаем ключ, поставив после него ;
В прошлый раз мы не ставили точку перед именем команды. Ее использование не является обязательным, макрос будет работать и без этого. Скорее это перестраховка на случай если кто-то или что-то переопределит штатную команду, а мы хотим обращаться именно к ней.
Русская версия данного макроса выглядит так: ^C^Спроверить;д;
СОЗДАНИЕ НОВОГО СЛОЯ
Для создания слоя нам нужно воспользоваться командой СЛОЙ, но если просто ввести имя данной команды в командную строку, откроется окно Диспетчера свойств слоев. А это нам не подходит, т.к. нажимать какие-либо кнопки в окнах через макросы не получится. Нам нужны опции команд и их ключи. Для этого поставим перед именем команды дефис, получится -СЛОЙ и нажмем Enter, теперь команда запустится в текстовом режиме:
Макрос создания слоя с именем Примечание будет таким:
^C^C-слой;с;Примечание;;
- вызываем команду в текстовом режиме -слой
- далее нас интересует опция Создать - пишем с;
- после чего программа предложит ввести имя нового слоя, которое придется подтвердить точкой с запятой, в макросе это будет выглядеть так Примечание;
- затем все вернется к состоянию как на картинке выше, ставим еще одну ; чтобы завершить команду.
Мы просто создали слой, не указывая каких-либо его параметров, кроме имени. Теперь давайте немного усложним данный макрос: укажем цвет слоя и сделаем макрос «тихим», чтобы в процессе работы макроса в командой строке не выводилась никакая информация:
^C^C^Q-слой;с;Примечание;ц;30;;;
Начало у макроса точно такое же, мы разобрали его выше. Но появилось одно отличие: перед вызовом команды стоит префикс ^Q — так мы отключаем вывод запросов в командной строке. Советую сначала отладить макрос, а уже потом переводить его в тихий режим, т.к оповещения командной строки помогают отлавливать свои ошибки.
- далее мы выбираем опцию Цвет — ц;
- указываем номер цвета — 30;
- после чего еще раз ставим ; (чтобы согласиться с тем, что это будет цвет именно нашего слоя, т.к. для запроса «Список имен слоев для присвоения цвета» имя нашего слоя предлагается в треугольных скобках как значение по умолчанию)
- чтобы завершить работу команды, добавляем еще одну ;
Поэкспериментируйте с этой и другими опциями, и вы довольно быстро поймете общую логику. Главное, не допускайте опечаток и будьте внимательны!
В следующей заключительной статье цикла для более глубокого понимания темы я приведу еще несколько примеров макросов, которыми пользуюсь сам.
А пока попрактикуйтесь с этими примерами и попробуйте написать что-то свое. Успехов!
Добрый день. Создала макрос «копировать и редактировать одновременно текст». Задала цикличность звездочкой. Но эта цикличность не работает. В чем подвох?
Вот сам макрос:
*^C^CКОПИРОВАТЬ;\;@;\ТЕКСТРЕД;ПОСЛЕДНИЙ;; -На русском или
*^C^С_Copy;\;@;\_textedit;_Last;; — на англ.
Макрос (прямоугольник) работает только при нажатии на кнопку. При вводе псевдонима все осталось по-прежнему. Как решить?
Псевдонимы на acad.pgp не поддерживают макросы. Это надо создавать через lisp функцию.
Здравствуйте. Ломаю голову как соединить 2 макроса(создать программу)
На чертеже много прямоугольников.
Задача выделить фрагмент, скопировать, создать новый чертеж , перенести туда выбранный фрагмент, вставить его 2 раза через определенное расстояние, разбить и сохранить в определенном формате.
Выполняю 2мя макросами.
Выделяю вручную: Нажимаю макрос-
Копировать в буфер
^C^C_.copyclip БСОЗДАТЬ
Фрагмент копируется и создается новый чертеж.
Нажимаю 2рой макрос
Вставить из буфера
^C^CВСТБУФЕР 0,0 ВСТБУФЕР 694,0 _xplode;все;;в;р +СОХРАНИТЬКАК F 2013dxf
По окончании выводится окно о месте и названии сохранения чертежа.
Как это все соединить в одну программу? что бы не жать много кнопок?