AutoCAD. Макросы команд. Часть 3: Примеры полезных макросов

Надеюсь, вы уже ознакомились с первой и второй частями моего рассказа о макросах в AutoCAD (если нет, то лучше сделать это перед прочтением данной статьи). Мы научились создавать свои кнопки и понимать синтаксис макрокоманд. В заключительной третьей части я приведу еще несколько примеров макросов, которые часто использую в своей работе. С одной стороны, эти примеры полезны сами по себе, а с другой — мы еще раз потренируемся, чтобы вы лучше усвоили тему. Поехали!

Макросы в AutoCAD часть 3

[Выноска с фиксированным содержимым]

Если вам довольно часто приходится расставлять выноски с одинаковым содержимым (например, подписывать оборудование или какие-то повторяющиеся объекты на чертежах), обратите внимание на данный макрос. Пользователю нужно будет указать только местоположение стрелки и местоположение начала текста, а содержимое выноски задано в самом теле макроса:

*^C^C_mleader;\\Ваш текст;
*^C^Cмвыноска;\\Ваш текст;

Сначала мы вызвали команду, после чего идут два пользовательских ввода — первый для указания положения стрелки и второй для указания положения текста, а далее написан сам текст. Как обычно — вы сами вольны выбирать какой из вариантов из вариантов использовать: русско- или англо- язычный. Вместо Ваш текст можно поместить любое нужное слово или фразу. Можно создать любое количество таких макросов с разным содержимым в виде кнопок на палитре. У меня таких сделано 6.

Обратите внимание на звездочку * в начале кода — ее наличие заставляется макрос работать в цикле, то есть повторяться до тех пор, пока пользователь не нажмет Esc. Выглядит это вот так:

Выноска с фиксированным содержимым

Если циклическое воспроизведение не требуется, просто сотрите звездочку * в начале. Внешний вид выноски будет определяться текущим стилем мультивыносок и текущим слоем.

Подробности для энтузиастов:

Слой созданной выноски можно было бы задать в свойствах инструмента палитры. Но тут в Автокаде обнаружилась недоработка: если макрос работает в цикле, то первый объект будет создаваться в слое, указанном в свойствах инструмента палитры, а вот последующие уже в текущем слое, что довольно странно и неудобно. Возможно, такой баг есть именно в моей версии и в будущем его исправят. При желании, обойти это можно немного усложнив наш макрос. Для этого используем команду _change (ИЗМЕНИТЬ), и с ее помощью будем изменять слой последнего созданного объекта (это как раз наша выноска) на нужный. В примере целевой слой — это Примечание. Вот что получилось:

*^C^C_mleader;\\Ваш текст;_change;_l;;_p;_la;Примечание;;

Вне зависимости от того, какой слой выбран текущим, выноска сразу после создания будет перенесена в слой Примечание. Разберемся как это работает:

  • сначала создается выноска (она создается в текущем слое)
  • вызываем команду Изменить _change;
  • команда запрашивает объекты для изменения, мы указываем ключ _l; (от слова last — «последний») — будет выбран последний созданный объект и завершаем запрос выбора еще одной точкой с запятой ;
  • дальше мы указываем, что хотим работать со свойствами объекта - ключ _p; (от слова properties — «свойства»)
  • изменить нужно слой - ключ _la; (от layer — «слой»)
  • указываем имя нужного слоя и подтверждаем его Примечание; (для корректной работы макроса, указанный слой должен существовать в вашем чертеже)
  • ставим еще одну точку с запятой, чтобы завершить работу команды ;

Русский вариант я писать не буду. Если хотите, попробуйте сделать это самостоятельно. Запустите команду Изменить и внимательно отвечайте на запросы, записывая в блокноте нужные ключи команд и ответы — так пишется любой макрос.

Единственное, что у меня так и не получилось сделать, это поместить в такой макрос двухстрочный текст для выноски. Если у вас такое получится, дайте знать, как вы этого добились? Управляющие коды \p или \n (которые работают в Мтексте) здесь просто прерывают макрос. Для себя я подобную задачу решил через LISP. 

[Текст вперед - штриховки назад]

Здесь речь пойдет о порядке прорисовки. Возможно, у вас случались ситуации, когда штриховка вдруг «перепрыгивала» на передний план, а текст, выноска или размер вдруг «проваливались» под нее, оказываясь на заднем плане. Иногда порядок прорисовки слетает временно, и чтобы все пришло в норму, достаточно просто сделать регенерацию. Если же это не помогает, можно изменить порядок прорисовки руками — выделить объект(ы) и затем отправить его(их) на передний или задний план через контекстное меню:

AutoCAD порядок прорисовки

Обычно этот способ применяют для одиночных объектов — например, если нужно перенести на передний план Маскировку.

Но если объектов сотни, то вручную оправлять все штриховки на задний план, а тексты на передний — дело хлопотное. Более опытные пользователи используют для этой цели Быстрый выбор, но есть более удобный способ: разработчики позаботились о нас и добавили 2 специальные команды! Итак, встречайте:

_TEXTTOFRONT (ТЕКСТПЕРПЛАН) — команда позволяет перенести на передний план объекты определенного типа (тексты, размеры или выноски), либо вообще все текстовые объекты, о чем выводится соответствующий запрос:

Команда Текстперплан _texttoftont

Обратите внимание, что опция <вСе> расположена в треугольных скобках — это значит, что она является значением по умолчанию. Поэтому в макросе ключ с нам не пригодится, мы просто добавим еще одну ; (ввод) после вызова команды. Получится _texttofront;;

_HATCHTOBACK (русского аналога я не нашел) — команда переносит все штриховки в документе на задний план. Опций у данной команды нет.

Из этих команд можно «состряпать» замечательный макрос:

^C^C_hatchtoback;_texttofront;;_regenall

Обычно я запускаю его по завершении работы над проектом. Регенерация в конце добавлена на всякий случай. В командной строке выводится отчет о работе макроса (если он вам не нужен, добавьте в начало макроса ключ ^Q):

Отчет о работе макроса

Напомню, что порядок прорисовки никак не связан со списком слоев — слои автоматически сортируются в алфавитном порядке.

[Горизонтальная и вертикальная прямая]

Ну и под конец, совсем простенький макрос для быстрого рисования прямых — горизонтальной и вертикальной. Команда _xline (ПРЯМАЯ) обычно запрашивает первую точку, после чего проводит через эту точку бесконечную прямую, которая будет вращаться до тех пор, пока не указана вторая точка. Кнопка вызова данной команды находится здесь:

AutoCAD команда прямая

Я использую прямые для быстрой проверки проекционной связи видов (смотрю, чтобы вид не выходил за допустимые границы), либо в качестве осей. В общем, у меня они всегда либо горизонтальные, либо вертикальные, а указывать каждый раз две точки долго. Поэтому для удобства я создал на палитре две кнопки, на которые повесил соответствующие макросы:

^C^C_xline;_h;
^C^C_xline;_v;

Макрос с ключом _h запускает отрисовку горизонтальной прямой, а макрос с ключом _v — вертикальной. Русский вариант макроса будет таким:

^C^Cпрямая;г;
^C^Cпрямая;в;

Кстати, вот так выглядит моя основная рабочая палитра:

AutoCAD. Инструментальная палитра

На ней размещены макросы, динамические блоки и кнопки запуска LISP-приложений. Все «авторские» иконки — это .png изображения размером 64×64 пикселя (их можно нарисовать в Paint или в Фотошопе).


Пожалуй, это все, что я хотел рассказать про макрокоманды в AutoCAD! Надеюсь, что проработав материал данного цикла статей, вы научились писать макросы под свои нужды. Сложного в этом ничего нет, требуется лишь терпение, внимательность и понимание основных принципов, которые я (хочется верить) изложил довольно подробно.

P.S. Как обычно, распространение ссылки на данный материал очень приветствуется. Буду очень рад вашим комментариям!

Комментарии приветствуются! Будь первым!