Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание меню.doc
Скачиваний:
16
Добавлен:
03.03.2016
Размер:
110.59 Кб
Скачать

Примеры создания своих команд и меню в AutoCad

Добавлено: 24 Дек 2009 Обновлено: 30 Авг 2015

Первая часть этой статьи уже была опубликована на сайте под заголовком "В AutoCAD LT можно программировать". Когда статья писалась, последней была версия AutoCAD 2005. AutoCAD 2006 еще не получил широкого распространения. А между тем в новой версии появились значительные изменения, касающиеся разработки своих команд и создания собственного меню. В данной статье автор сделал попытку, оттолкнувшись от предыдущей публикации, продолжить тему, сделав упор на работу в диалоговом окне CUI и создание здесь собственного меню. Поэтому сейчас перед вами комбинированная статья, первая половина которой повторяет старую публикацию, а продолжение отражает изменения, произошедшие в новых версиях AutoCAD. В первой части даны макросы некоторых команд общего назначения и показаны принципы их создания и записи в диалоговые окна AutoCAD 2005 или более ранних версий. Во второй части показано, как создать свое меню в новых версиях, от AutoCAD 2006 и загрузить его командами, на примере некоторых команд из первой части.

Внимание! Все, что написано в 1-ой части (с упором на AutoCAD LT) может быть применено и в полной версии AutoCAD.

Часть 1

(Опубликовано в журнале AUTOCAD MAGAZIN № 4/05, Германия. перевод Dr. Heinz-Joachim Schulc)

AutoCAD LT предназначен для выполнения плоских двухмерных чертежей и в этой области мало чем отличается от своего старшего брата - полной версии AutoCAD. Но это верно только если сравнивать "голый" AutoCAD, не нагруженный дополнительными программами. И вот здесь полная версия имеет неоспоримое преимущество, так как она поддерживает некоторые языки программирования, основным из которых является LISP. Можно не быть программистом, но использовать в своей работе многочисленные платные и бесплатные программы, которые значительно ускоряют и упрощают чертежную работу.

Но и AutoCAD LT не так безнадежен, как кажется на первый взгляд. В нем тоже можно программировать! Можно создать себе кучу полезных самодельных инструментов, каждый из которых выдаст комбинацию команд, наиболее часто встречающуюся в вашей работе. Можно даже заставить AutoCAD вычертить целую деталь в полуавтоматическом режиме. В Help AutoCAD есть такое понятие - Menu Macros. "The Macro defines the action to be executed when a user chooses the menu item" "Макрос определяет действие, которое исполняется, когда пользователь выбирает пункт меню". И пользователь может сам задать макрос.

Пусть наша первая новая команда за одно действие создаст копию готового текста, перенесет ее на новое место и там вызовет редактор текста. Но сначала надо создать кнопку, в которую мы заложим макрос, позволяющий выполнить указанные действия. Это можно сделать при открытом диалоговом окне Customize (Адаптация). Здесь, в поле, которое называется Macro associated with this button (Макрос для данной кнопки) напишите следующее выражение:

^C^C_Copy;\;@;\Макрос, позволяющий один_Ddedit;_Last

Это и есть макрос. На рисунке показано диалоговое окно Customize с этим макросом.  

 

Опрбуйте его.Для этого напишите строку любого текста, возьмите новую команду и укажите текст. Далее можно редактировать копию этого текста на новом месте и таким образом быстро получать новые тексты с готовыми настройками.

Можно написать множество макросов, которые значительно облегчат и ускорят рутинную работу. Вот несколько примеров:

  • Макрос, позволяющий один за другим увеличить (или уменьшить) величину объектов

  • *^C^C_Scale;\\;\2

при запросе объекта надо дважды щелкнуть по нему или захватить рамкой, и объект увеличится в два раза. Выход из команды по Esc. Если надо изменить величину масштабирования, цифра 2 оперативно заменяется на другую, это дело 3-5 секунд.  

  • Макрос, позволяющий поворачивать объекты на заданный угол один за другим

  • *^C^C_Rotate;\\;\90

Угол здесь 90град, он заменяется на нужный  

  • Макрос, изменяющий цвет атрибута блока

  • *^C^C_-Attedit;;;;;\;_Color;2;;

Здесь показан цвет №2 то есть желтый, он меняется на нужный.  

  • Макрос, изменяющий угол поворота атрибута.... Впрочем попробуйте его создать самостоятельно, по аналогии с предыдущим.  

Вы уже, наверное, догадались, что знак (;) это эквивалент Enter, а знак () означает ручной ввод данных. Знак (_) перед именем команды позволяет вводить команду на английском языке в локализованной (русской) версии, а знак (*) повторяет команду до бесконечности, пока не будет нажата клавиша Esc. Знаки ^C^C должны стоять почти всегда, они отчищают командную строку от остатков предыдущих действий. Регистр, то есть какие буквы используются - прописные или заглавные, значения не имеет.

Можно вставлять блоки как из данного чертежа, так и из библиотеки блоков, для этого используется команда _-Insert (с минусом). Комбинируя вставки блоков и различные команды рисования и редактирования, можно создать довольно сложные макросы для полуавтоматического вычерчивания отдельных фигур.

Все, что показано выше, можно назвать минипрограммами, написанными на языке Menu Macros. Но AutoCAD LT понимает и другой, вполне настоящий язык программирования, он называется DIESEL. Выражение DIESEL можно узнать по характерному знаку американского доллара $. В полной версии AutoCAD есть меню Express, а в нем команда Laycur, переводящая объекты в текущий слой (Layer). Вот аналог этой команды для AutoCAD LT:

 

^C^C_Change;\;_Properties;_Layer;$m=$(Getvar,Clayer);;

Выражение

$m=$(Getvar,Clayer)

вытаскивает имя текущего Layer, которое хранится в системной переменной Clayer . А следовательно, таким образом можно достать имя любой системной переменной и подставить ее - программно! - в нужное место макроса. Есть такие системные переменные, которые могут назначаться пользователем. Это Useri1-Useri5, Userr1-Userr5 и Users1-Users5. В первых пяти можно назначить и сохранить целые числа, во вторых пяти - вещественные числа, и в последней пятерке - текстовые строки. Если создать серию кнопок, и на одной написать

^C^CUserr1;100

на другой

^C^CUserr1;50

а на третьей

^C^CUserr1;20

, то их можно использовать как кнопки задания масштаба 1:100, 1:50, 1:20 и так далее. Нажатие на такую кнопку назначит системной переменной Useri1 значение, например, 100, которое далее функцией Getvar можно вывести, например, при вставке блока, когда AutoCAD запросит масштаб по оси Х. При этом вставляемый блок увеличится в 100 раз относительно его библиотечной величины. Следовательно, в библиотеке блоков вместо серии блоков, предназначенных для разных масштабов, достаточно иметь всего один, расчитанный на масштаб 1:1. При помощи команды Modemacro и выражения DIESEL можно разместить в статусной строке сведения о состоянии некоторых системных переменных, например, отслеживать имя текущего текстового или размерного стиля. Кроме упомянутой выше функции Getvar у DIESEL есть еще 26 функций, при помощи которых можно создавать различные программы.

 

Есть еще один язык программирования. Это Script. С его помощью можно создать слайд-фильм, можно запускать AutoCAD с заранее заданными настройками, со своим Prifile, например. Script может загрузить в AutoCAD серию размерных стилей, что является альтернативой шаблонам.

Кроме программных путей ускорения работы есть и другие способы, чисто чертежные, или комбинированные: макрос + специальный блок. Например, можно сделать так, чтобы вставляемый блок разрывал под собой линию. Или наоборот, не разрезая ее, скрывал участок линии своим телом. Подобные могли-бы в некоторых случаях значительно ускорить черчение.

Ищущий чертежник может так настроить свой AutoCAD, что работать станет несравненно легче и быстрее. В первую очередь следует правильно расположить панели инструментов. Затем надо составить алиасы (сокращение имен) наиболее употребимих команд и подобрать удобные сочетания горячих клавиш (Hot keys). Для новых кнопок следует создать собственное меню. Надо правильно подобрать и систематизировать свою библиотеку блоков и шаблонов. Надо читать специальную литературу и обязательно участвовать в форумах по AutoCAD, которые есть на интернете, вероятно, во всех странах.

Многим пользователям хотелось бы, чтобы текст размещался в специализированном слое без переключения в него. Другими словами, текущим должен оставаться тот рабочий слой, в котором в данный момент рисуются объекты. Но если понадобилось ввести текст, то последний автоматически попадал бы в предназначенный для него слой. Будем считать; что слой с именем "Текст" в вашем чертеже уже создан. Таким образом, напрашиваются два пути решения задачи. Первый путь:

  • 1. Временно вызвать и сделать текущим слой "Текст"

  • 2. Напечатать нужный текст

  • 3. Вернуть прежний слой в качестве текущего

Второй путь:  

  • 1. Напечатать текст в текущем (рабочем) слое

  • 2. Перевести готовый текст в слой с именем "Текст"

Первый путь связан с запоминанием имени того (рабочего) слоя, который являлся текущим на момент, предшествующий вызову слоя "Текст". Эта задача легко решается в полной версии AutoCAD при помощи функции LISP Setq, которая может быть введена в макро. В AutoCAD LT, как известно; LISP не работает. Поэтому мы используем 2-ой путь, и результат будет таким же. Что такое слой? Это одно из свойств объекта; такое же, как цвет или тип линии. Надо найти команду; которая бы изменяла свойства объекта с командной строки, без вызова диалогового окна. Имя нужной нам команды - CHANGE. (Изменить) Примечание: В AutoCAD много команд. Не все из них выведены на кнопки или в падающие меню. Даже в казалось бы, полном перечне команд, который можно увидеть в диалоговом окне Customize (см. вкладку Commands, пункт All Commands), перечислены далеко не все команды. Составляя макросы, вы часто будете заглядывать в HELP. Постепенно вы узнаете много новых, ранее неизвестных команд и системных переменных.Сейчас мы опробуем команду CHANGE. Предварительно создайте новый слой, имя которого "Текст", но не делайте его текущим. Пусть цвет слоя для объектов, размещенных в нем, будет отличным от цвета текущего слоя. В текущем слое (любом другом) командой MTEXT напишите любое слово или предложение. (Как уже говорилось в первой части, если AutoCAD локализован, перед именем команды, если она вводится на английском языке, должен стоять знак подчеркивания. Впрочем; можно вводить команды и составлять макросы и на русском языке.)

Возьмем команду _CHANGE:

Command: _CHANGE

Команда: Изменить

Select objects: _Last

Выдели объект: Последний

тем самим мы даем понять AutoCAD, что хотим изменить последний, сделанный до ввода команды CHANGE, объект, то есть MTEXT.

Specify change point or [Properties]: _P

Покажите точку изменения или [Свойства]:

Вводим опцию _Properties, или сокращенно, _P

Enter property to Change [Color/Elev/LAyer/LType/ltScale/LWeight/Thickness]: _ La

Введите свойство; которое надо изменить [перечисление на русском]: Слой

Enter new Layer name <…>: Text ї

Введите имя нового слоя <имя текущего слоя>:Текст

Enter property to Change [Color/Elev/LAyer/LType/ltScale/LWeight/Thickness]:

Введение здесь второго Enter показывает AutoCAD, что больше никаких изменений не требуется. Ваш текст приобрел новое свойство - его слой теперь "Текст"!! После такой подготовительной работы несложно составить макро:

^C^C_Mtext;\\_Change;_Last;;_P;_La;Text;;

Здесь две обратные наклонные черты служат для задания окна редактора многострочного текста (вспомните первую часть-ручной ввод данных), остальные знаки - точки с запятой (заменяют Enter), имена команд и опций полностью соответствут порядку, в котором вручную выполнялась команда CHANGE. Не правда-ли, это не кажется трудным? Надо сначала отработать последовательность выполнения команд вручную, с командной строки, одновременно ведя запись на бумаге, а затем точно переписать эту последовательность в соответствующее поле окна Customize. Но не все получается сразу. Попробуйте создать аналогичную команду для однострочного текста, и сразу появятся трудности. Для самостоятельной работы подскажу: вместо команды Dtext следует использовать команду -ТЕХТ (с минусом). Опять редкая команда, и работает необычно. Зато каждая строка при этом является самостоятельным, не связанным внутренними узами с другими строками объектом, и ее можно перевести в нужный слой прежде, чем будет написана следующая строка. И еще, не забудьте про звездочку в начале макроса, которая позволит работать команде строка за строкой. Одной из самых привлекательных команд была-бы такая, которая сможет создавать размеры в специализированном слое. Давайте ее сделаем. Скопируйте на новую кнопку созданный выше макрос для многострочного текста. Замените _Мтехт на _Dimlinear и добавьте еще одну обратную косую черту (ведь для простановки линейного размера требуется трижды щелкнуть левой кнопкой мышки). Замените имя слоя на "Размеры" Кнопка готова. Остается нарисовать на ней красивую картинку и определить в нужную панель.