CAD-страница НП | Статьи | English | Download
AutoLISP на примерах: начинаем
(из книги "AutoCAD®: секреты, которые должен знать каждый пользователь")
Не знаю, почему так мало пользователей пишут программы на языке AutoLISP. Возможно, само понятие программирования вселяет страх. В то же время нет ничего, способного сравниться по эффективности с программированием новых команд. Из всех инструментов программирования для пользователей AutoCAD наиболее доступен AutoLISP. Неужели каждый пользователь AutoCAD должен уметь программировать в AutoLISP? Я считаю, что должен, и на протяжении этой главы вы узнаете, почему.
Если перспектива заняться программированием вас немного пугает, у меня для вас хорошая новость: если вы можете работать в AutoCAD, то можете программировать в AutoLISP. Чтобы показать, насколько это легко, давайте напишем программу прямо сейчас:
Поздравляю, вы только что написали программу AutoLISP. Чтобы увидеть, как она работает, проверьте еще раз установки для объектной привязки. Мы снова вернемся к этой программе после того, как я расскажу немного теории. После прочтения данной главы вы будете придумывать и создавать всевозможные новые функции AutoLISP.
Общие сведения
AutoLISP ≈ мощный инструмент, при помощи которого вы можете за считанные минуты писать новые пользовательские команды для AutoCAD. Несмотря на то, что с AutoCAD часто используются другие языки программирования (самые известные из них Visual Basic for Applications (VBA) и C++), AutoLISP особенно полезен для пользователей AutoCAD, так как он основывается на собственных командах AutoCAD. Возможно, это не самый совершенный из языков программирования, но какая разница, если им легко пользоваться? Я знаком с признанным специалистом ≈ программистом на VBA, но и он пользуется языком AutoLISP для некоторых программ, относящихся к AutoCAD.
Язык программирования AutoLISP впервые появился в AutoCAD R2.18. Его раннее появление ≈ одна из причин, по которым AutoCAD стал сегодня самой распространенной CAD-программой. Существование языка программирования дало сообразительным пользователям возможность существенно улучшить AutoCAD путем добавления новых функций. Часто эти функции в последующих релизах становились командами, но даже если такого не происходило, AutoCAD становился более удобным, чем конкурирующие приложения. Несмотря на появление, впоследствии, других языков программирования, AutoLISP по-прежнему остается главным средством для создания пользовательских функций AutoCAD.
AutoLISP относится к языку LISP (List Processing), появившемуся в конце 1950-х годов. LISP часто упоминается как второй из старейших языков программирования, все еще использующихся. Самым старым из существующих считается Fortran. Помимо использования в AutoCAD, LISP также широко применяется в программировании искусственного интеллекта.
Visual LISP (VLISP или VLIDE) появился в AutoCAD 2000 в качестве основного средства программирования AutoLISP. В нем присутствует развитая среда программирования с инструментами поиска ошибок и компилятором, а также с набором новых функций, включая известные как реакторы. Несмотря на то, что я представляю некоторые возможности редактора Visual LISP в этой книге, я не могу осветить его достаточно полно. Если вы столкнетесь со скрытой ошибкой в AutoLISP, вы сможете узнать о специальных возможностях редактирования в Visual LISP и большом наборе его функций в справочной системе AutoCAD или при помощи вашей любимой поисковой системы ссылок.
Команды AutoCAD
Поскольку некоторые команды и многие инструменты Express Tools написаны на языке AutoLISP, большинство из нас постоянно пользуются LISP-программами, не догадываясь об этом. В директории C:\Program Files\AutoCAD 2007\Express содержатся 70 программ на AutoLISP, включая следующие программы, настолько полезные, что вы можете считать их собственными командами AutoCAD:
Поиск программ на AutoLISP
Вы можете найти другие программы на языке AutoLISP на многочисленных Интернет-сайтах, в книгах, журналах, а также в компьютерах ваших друзей и коллег. В качестве замечательного начала можете посетить сайт международной группы пользователей Autodesk User Group International по адресу www.AUGI.com. Другие сайты появляются и исчезают, поэтому я не буду их здесь перечислять. В результате поиска в интернет вы найдете миллионы программ на сотнях тысяч сайтов. Многие из этих программ бесплатны, AutoLISP-программисты щедро делятся результатами своей работы. (Не забывайте об этом, когда сами научитесь писать полезные программы.) Проверяйте информацию об авторских правах для каждой программы, и вы обязательно найдете требования автора. Не забывайте, программы на AutoLISP являются интеллектуальной собственностью их авторов.
Программы на AutoLISP бывают как простые, так и сложные, и все они требуют хорошего знания команд AutoCAD. Вы уже знакомы со структурой команд AutoCAD, поэтому готовы начать программировать в AutoLISP.
Написание программ AutoLISP
Я назвал эту главу "AutoLISP на примерах", потому что для того, чтобы показать ключевые свойства программирования, я оперирую примерами кодов. Эта глава не предназначена для опытных программистов, она написана для пользователей AutoCAD. Когда я впервые решил попробовать AutoLISP, ссылка, к которой я обратился, начиналась с рассуждений об атомах, списках, лямбда-выражениях, функциях CONS и MAPCAR, с примерами длиной в одну строку, которые для меня ничего не значили. У меня была определенная цель ≈ написать команду, которая бы автоматически помещала один чертеж в другой. Я не смог решить задачу до тех пор, пока не рассмотрел существующие программы и не понял, как они работают. Вспоминая о собственном опыте, я собираюсь привести вам примеры программ и объяснить, как они работают. Все что от вас требуется ≈ ввести их без ошибок, попробовать и прочитать пояснения. Это так просто.
Моя первая программа AutoLISP
Структура программы
Я хочу, чтобы вы начали писать программы, но при этом избежали некоторых распространенных ошибок. Для этого вы должны иметь представление о структуре программ AutoLISP. В программировании структура программы не менее важна, чем грамматика языка.
Рассмотрим в качестве примера вычислительную функцию. Поскольку функция деления в AutoLISP обозначается наклонной чертой, синтаксис для деления одного числа на другое выглядит следующим образом: (/ 4.0 2).
За открывающей скобкой следует функция /, за ней, по крайней мере, один пробел, за которым, в свою очередь, два аргумента, разделенных пробелами ≈ числитель 4.0 и делитель 2, за ними следует закрывающая скобка. Эта функция может быть переведена как "разделить 4.0 на 2". Другие функции, такие как (* 4.0 2), (+ 4.0 2) и (- 4.0 2) имеют аналогичный формат. Эта структура отличается от той, к которой вы привыкли, изучая математику. Не пытайтесь использовать (2 + 2), такая функция не будет работать, так как первый элемент в скобках ≈ целое число, а не функция.
Ввод программ в AutoCAD
Вы можете придумать любую программу, но до тех пор, пока вы не введете ее в AutoCAD, ваша программа будет бесполезной. К сожалению, нет способа напрямую загрузить ваши мысли в AutoCAD, поэтому придется воспользоваться клавиатурой. Есть несколько способов заставить AutoCAD выполнить программу на языке AutoLISP:
Ввод в командной строке обычно применяется только для тестирования коротких строк кода. Тем не менее я часто пишу таким способом очень короткие программы, особенно когда хочу сделать что-то специфическое для определенного чертежа и не вижу смысла сохранять программу. Недавно я таким способом создавал полилинии в виде окружностей. Не думаю, что мне еще раз придется заниматься тем же, поэтому я просто ввел программу в командной строке. Когда я закончил сеанс работы в AutoCAD, программа также завершила работу.
Заглавные или строчные?
Давайте в первую очередь рассмотрим процедуру ввода в командной строке.
Ввод в командной строке
Вернемся к программе, рассмотренной во вступлении к этой главе. Чтобы ввести эту программу на AutoLISP в командной строке, вы проделали следующее:
Вы только что описали новую команду AutoCAD под именем OO. Когда вы ее вводите, значение системной переменной OSMODE, которая управляет объектной привязкой, меняется на 4143. Это мое стандартное значение для этой переменной. Мне нравится эта команда, потому что я часто изменяю установки привязки для нескольких операций с каким-либо объектом. Когда я хочу вернуть свои обычные настройки, намного быстрее ввести OO, чем открывать диалоговое окно Drafting Settings (Режимы рисования).
Существует только одна проблема. Эта отличная команда хранится в оперативной памяти, поэтому вы не сможете ей воспользоваться, если откроете другой чертеж, и она пропадет, когда вы закроете текущий файл чертежа. Если вы хотите еще раз воспользоваться этой командой, вы должны ее сохранить.
CAD-страница НП | Статьи | English | Download