Урок 10. AutoLISP. Стандартные команды Автокад.

Если вы хорошо знаете стандартные команды Автокад, то написание программ на языке AutoLISP не составить для вас большого труда. Создание своих программ позволит вам одним нажатием выполнять серию стандартных команд Автокад, сократит время вашей работы, избавит от рутины и оставит больше время для творчества.

В языке AutoLISP есть функция, которая имитирует командную строку. Это функция «command». Давайте проведем аналогию между написанием стандартных команд Автокад в командной строке и написании тех же команд в программе AutoLISP.

Для того, что все наш действия в командной строке имели одинаковые результаты, в самом начале необходимо отключить динамический ввод:

Для этого в низу слева нужно выключить динамический ввод, щелкнув по соответствующей кнопке. См. Рис. 1.

AutoLISP. Komandy AutoCAD.

Рис. 1.   Отключение Динамического ввода.

Или выключить его при помощи клавиши <F12> на клавиатуре.

Отрезок.

Для того, чтобы построить отрезки с координатами первой точки (X=300, Y=300)  координатами второй точки (X=700, Y=300) и координатами третий точки (X=700, Y=700).

Нам нужно набрать в командной строке ОТРЕЗОК и нажать <Enter>.

Далее на запрос Первая точка: вводим 300,300 и нажимаем <Enter>.

На запрос Следующая точка: вводим 700,300 и нажимаем <Enter>.

На запрос Следующая точка: вводим 700,700 и нажимаем <Enter>.

На запрос Следующая точка: нажимаем <Enter> чтобы прервать выполнение команды.

В результате получим два отрезка. См. Рис. 2.

AutoLISP. Komandy AutoCAD.

Рис. 2.   Построение отрезков.

Чтобы посмотреть полный порядок действий, нажимаем на клавиатуре клавишу <F2>. Откроется  Текстовое окно AutoCAD. См. Рис. 3.

AutoLISP. Komandy AutoCAD.

Рис. 3.    Порядок действий.

Если вы работаете в англоязычной версии AutoCAD, то вместо команды ОТРЕЗОК в командной строке нужно было ввести LINE.

Англоязычная версия с нижним подчеркиванием впереди _LINE будет работать в обоих версиях.

Строка в программе на языке AutoLISP рисующая такие же отрезки выглядит так:

(command "_line" '(300 300) '(700 300) '(700 700) "")

См. Рис. 4.

AutoLISP. Komandy AutoCAD.

Рис. 4.     AutoLISP.  Построение отрезков.

Выделите всю строку и нажмите на кнопку «Загрузить выделенный фрагмент».

AutoCAD начертит отрезки.

Если точку надо задать не вводом координат, а указать мышкой. Используем команду getpoint.

(getpoint "\nУкажите базовую точку : ")

Чтобы запомнить координаты указанной точки в переменной р1, используем функцию setq.

(setq p1 (getpoint "\nУкажите базовую точку : "))

Координаты следующих точек можно рассчитать относительно первой. Для этого в AutoLISP есть несколько способов.

Приведем один из них:

Координаты второй точки смещены относительно первой на 400 единиц  по координате Х.

Давайте предварительно создадим список с этим смещением при помощи функции list.

(list 400 0) – смещение по оси Х=400; смещение по оси Y=0

Затем сложим нас список с координатами точки р1 при помощи функции mapcar

(mapcar '+ p1 (list 400 0))

Запомним координаты второй точки в переменной р2

(setq p2 (mapcar '+ p1 (list 400 0)))

Аналогичным способом находим координаты третей точки относительно второй и запоминаем ее в переменной р3.

(setq p3 (mapcar '+ p2 (list 0 400)))

Мы могли найти координаты точки р3 относительно р1. Это выглядело бы так:

(setq p3 (mapcar '+ p1 (list 400 400)))

После, того как координаты сохранены в переменных, в строке рисующей отрезки меняем координаты на эти переменные:

(command "_line" p1 p2 p3 "")

Теперь наша программа выглядит так: См. Рис. 5.

AutoLISP. Komandy AutoCAD.

Рис. 5.   LISP. Построение отрезков.

Выделите все строки, нажмите на кнопку «Загрузить выделенный фрагмент».

В командной строке появится запрос: «Укажите базовую точку:»

Укажите ее с некоторым смещением от координат старой первой точки. AutoCAD начертит отрезки со смещением. См. Рис. 6.

AutoLISP. Komandy AutoCAD.

Рис. 6.    AutoLISP. Построение отрезков.

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

Окружность.

Для того, чтобы построить окружность с координатами центра (X=700, Y=700) и радиусом окружности (R=200).

Нам нужно набрать в командной строке КРУГ и нажать <Enter>.

Далее на запрос Центр круга: вводим 700,700 и нажимаем <Enter>.

И запрос Радиус круга:  вводим 200 и нажимаем <Enter>.

В результате получим окружность. См. Рис. 7.

AutoLISP. Komandy AutoCAD.

Рис. 7.    Построение окружности.

Если вы работаете в англоязычной версии AutoCAD, то вместо команды КРУГ в командной строке нужно было ввести CIRCLE.

Команда _CIRCLE будет работать в обоих версиях.

Строка в программе на языке AutoLISP рисующая ту же окружность выглядит так:

(command "_circle" '(700 700) 200)

Вместо координат можно поставить какую либо из ранее созданных переменных. Например переменную р3 в которой хранятся координаты третьей точки.

См. Рис. 8.

AutoLISP. Komandy AutoCAD.

Рис. 8.    AutoLISP. Построение окружности.

Выделите последнюю строчку, нажмите на кнопку «Загрузить выделенный фрагмент». AutoCAD построит окружность с центром в точке р3 и радиусом 200. См. Рис. 9

AutoLISP. Komandy AutoCAD.

Рис. 9.     LISP. Построение окружности.

Дуга.

Для того, чтобы построить дугу с координатами первой точки (X=300, Y=300)  координатами второй точки (X=700, Y=300) и координатами третий точки (X=700, Y=700).

Нам нужно набрать в командной строке ДУГА и нажать <Enter>.

Далее на запрос Начальная точка дуги: вводим 300,300 и нажимаем <Enter>.

На запрос Вторая точка дуги: вводим 700,300 и нажимаем <Enter>.

На запрос Конечная точка дуги: вводим 700,700 и нажимаем <Enter>.

В результате получим дугу. См. Рис. 10.

AutoLISP. Komandy AutoCAD.

Рис. 10.    Построение дуги.

Если вы работаете в англоязычной версии AutoCAD, то вместо команды ДУГА в командной строке нужно было ввести ARC.

Команда _ARC будет работать в обоих версиях.

Строка в программе на языке AutoLISP рисующая ту же дугу выглядит так:

(command "_arc" '(300 300) '(700 300) '(700 700))

Давайте вместо координат поставим переменные р1, р2, р3 и добавим эту строчку в программу.

В результате получим см. Рис. 11.

AutoLISP. Komandy AutoCAD.

Рис. 11.   AutoLISP. Построение дуги.

Выделите последнюю строчку, нажмите на кнопку «Загрузить выделенный фрагмент». AutoCAD построит дугу по точкам р1, р2, р3. См. Рис. 12.

AutoLISP. Komandy AutoCAD.

Рис. 12.  LISP. Построение дуги.

Надеюсь, что с построением простых примитивов мы разобрались. Теперь давайте рассмотрим какую нибудь команду редактирования. Например Зеркало.

Команда редактирования. Зеркало.

Давайте оставим только два отрезка и дугу. См. Рис. 13.

LISP. Komandy AutoCAD.

Рис. 13.    Два отрезка и дуга.

Затем отзеркалим их относительно вертикального отрезка.

Для этого в командной строке вводим команду Зеркало, нажимаем <Enter>.

На запрос Выберите объекты: указываем мышью все три примитива и нажимаем <Enter>.

На запрос Первая точка оси отражения: указываем верхнюю точку вертикального отрезка.

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

На запрос Удалить исходные объекты? [Да/Нет] <Н>: нажимаем <Enter>.

В результате получаем следующее. См. Рис. 14.

LISP. Komandy AutoCAD.

Рис. 14.    Команда редактирования. Зеркало.

Если вы работаете в англоязычной версии AutoCAD, то вместо команды ЗЕРКАЛО в командной строке нужно было ввести MIRROR.

Команда _MIRROR будет работать в обоих версиях.

Для того, чтобы сделать тоже самое в программе на языке AutoLISP нужно после построение примитива сохранять его имя в переменой. Это можно сделать при помощи функции entlast, которая возвращает имя последнего нарисованного примитива.

Строим горизонтальный отрезок:

(command "_line" p1 p2 "")

Сохраняем имя горизонтального отрезка в переменной gLine:

(setq gLine (entlast))

Строим вертикальный отрезок:

(command "_line" p2 p3 "")

Сохраняем имя вертикального отрезка в переменной vLine:

(setq vLine (entlast))

Строим дугу:

(command "_arc" p1 p2 p3 "")

Сохраняем имя дуги в переменной duga:

(setq duga (entlast))

Зеркалим отрезки и дугу относительно линии проходящей через точки р2 и р3:

(command "_mirror" gLine vLine duga "" p2 p3 "")

Все вместе в программе это будет выглядеть так: См. рис. 15.

LISP. Komandy AutoCAD.

Рис. 15.   AutoLISP. Команда редактирования. Зеркало.

Выделите все строки, нажмите на кнопку «Загрузить выделенный фрагмент».

В командной строке появится запрос: «Укажите базовую точку:»

Укажите ее выше уже имеющихся примитивов. AutoCAD сначала, начертит новые отрезки и дугу, а затем отзеркалит их. И в конце, построит окружность. См. Рис. 16.

LISP. Komandy AutoCAD.

Рис. 16.   LISP. Команда редактирования. Зеркало.

И в заключении давайте построим какую нибудь фигуру вращения в 3d. Например половину конуса.

Фигура вращения. Половина конуса.

Для лучшей наглядности давайте удалим ранее нарисованные примитивы и переведем чертеж ЮЗ изометрию.

Для этого набираем в командной строке _-VIEW и нажать <Enter>.

Далее вводим _swiso и нажимаем <Enter>.

Чертеж будет переведен в ЮЗ изометрию. См. Рис. 17.

LISP. Komandy AutoCAD.

Рис. 17.    Переход в ЮЗ изометрию

Второй способ перевести чертеж в ЮЗ изометрию. Это на видовом кубе щелкнуть между Ю и З в место, которое показано на Рис. 18.

LISP. Komandy AutoCAD.

Рис. 18. Переход в ЮЗ изометрию

Далее чертим отрезок с координатами первой точки (X=1000, Y=0, Z=0) и координатами второй точки (X=1200, Y=0, Z=700)

Набираем в командной строке ОТРЕЗОК и нажать <Enter>.

Далее на запрос Первая точка: вводим 1000,0,0 и нажимаем <Enter>.

На запрос Следующая точка: вводим 1200,0,700 и нажимаем <Enter>.

На запрос Следующая точка: нажимаем <Enter>, чтобы прервать выполнение команды.

Далее набираем команду ВРАЩАТЬ, нажимаем <Enter>.

Указываем мышкой только, что нарисованный отрезок и нажимаем <Enter>.

На запрос Начальная точка оси вращения: вводим 1200,0,700 и нажимаем <Enter>.

На запрос Конечная точка оси вращения: вводим 1200,0,0 и нажимаем <Enter>.

На запрос Угол вращения: вводим 180 и нажимаем <Enter>.

В результате получаем половину конуса. См. Рис. 19

LISP. Komandy AutoCAD.

Рис. 19.   Построение фигуры вращения.

Чтобы увидеть полный порядок действий, нажимаем на клавиатуре клавишу <F2>. Откроется  Текстовое окно AutoCAD. См. Рис. 20.

LISP. Komandy AutoCAD.

Рис. 20. Порядок действий.

Для того, чтобы вернутся к двухмерному чертежу с осями X и Y нужно на видовом кубе щелкнуть по надписи Верх. См. Рис. 21.

LISP. Komandy AutoCAD.

Рис. 21.  Переход к двухмерному чертежу.

Если вы работаете в англоязычной версии AutoCAD, то вместо команды ВРАЩАТЬ в командной строке нужно было ввести REVOLVE.

Команда _REVOLVE будет работать в обоих версиях.

В программе на языке AutoLISP построение половины конуса выглядит так:

В начале строим отрезок

(command "_line" '(1000 0 0) '(1200 0 700) "")

Затем при помощи функций setq и entlast (возвращает имя последнего нарисованного примитива)  запоминаем его в переменной line1

(setq line1 (entlast))

И в конце строим фигуру вращения

(command "_REVOLVE" line1 "" '(1200 0 700) '(1200 0 0) 180)

Все вместе в программе это выглядит так: См. Рис. 22.

LISP. Komandy AutoCAD.

Рис. 22.   AutoLISP. Построение фигуры вращения.

Для того, чтобы преобразовать нашу программу в пользовательскую функцию.

Добавим строку, в которой придумаем имя функции (scom – стандартные команды) и перечислим все временные переменные:

(defun c:scom (/ p1, p2, p3, gline, vline, duga, line1)
      <наша программа>
) ; end_defun

Окончательный вариант программы см. Рис. 23.

LISP. Komandy AutoCAD.

Рис. 23.   AutoLISP. Стандартные команды AutoCAD.

Чтобы проверить работу всей программы: удалите все примитивы и вернитесь в двухмерное пространство.

Чтобы загрузить программу, используем кнопку «Загрузить активное окно редактора». Переходим в AutoCAD, в командной строке набираем scom и нажимаем <Enter>.

На запрос: Укажите базовую точку : укажите любую точку в рабочем окне.

Результат выполнения программы должен выглядеть так. См.Рис. 24.

LISP. Komandy AutoCAD.

Рис. 24.   AutoLISP. Стандартные команды AutoCAD.

Код программы:

(defun c:scom (/ p1, p2, p3, gline, vline, duga, line1)
    (setq p1 (getpoint "\nУкажите базовую точку : "))  ; запрос координат точки р1
    (setq p2 (mapcar '+ p1 (list 400 0)))                         ; расчет координат точки p2
    (setq p3 (mapcar '+ p2 (list 0 400)))                         ; расчет координат точки p3
    (command "_line" p1 p2 "")      ; построение отрезка
    (setq gLine (entlast))                ; запоминаем имя отрезка
    (command "_line" p2 p3 "")      ; построение отрезка
    (setq vLine (entlast))                ; запоминаем имя отрезка
    (command "_arc" p1 p2 p3 "") ; построение дуги
    (setq duga (entlast))                 ; запоминаем имя дуги
    (command "_mirror" gLine vLine duga "" p2 p3 "") ; зеркалим

    (command "_circle" p3 200)                                 ; построение окружности

    (command "_-view" "_swiso" "")                          ; перевод ЮЗ изометрию
    (command "_line" '(1000 0 0) '(1200 0 700) "")   ; построение отрезка
    (setq line1 (entlast))                                             ; запоминаем имя отрезка
    (command "_REVOLVE" line1 "" '(1200 0 700) '(1200 0 0) 180) ; построение полуконуса
) ; end_defun
 Скачать программу Scom.lsp Скачать программу Scom.lsp (Размер файла: 535 bytes) 

Таким образом, мы видим, что написание стандартных команд Автокад в программе AutoLISP практически повторяют написание их в командной строке. И если Вы знаете как пользоваться стандартными командами в AutoCAD, то при наработке определенного навыка, Вы легко сможете писать свои программы, которые в значительной степени могут ускорить процесс выполнения вашей работы.  Поверьте, это не так сложно, как кажется на первый взгляд.

Как добавить нашу программу в список автоматической загрузки и создать для нее кнопку запуска рассмотрено в уроках: Простой запуск LISP программ. Создание кнопки для программы LISP.

Пишите в комментариях:

Трудно ли было выполнить этот урок?

Где у вас возникли трудности?

Была ли для Вас полезной информация, данная в этом уроке?

Если у Вас не получилось  запрограммировать стандартную функцию AutoCAD? Пишите попробуем разобраться вместе.

На какие вопросы программирования, Вы хотели бы, увидит ответы в следующих уроках?

Я с удовольствием отвечу на ваши комментарии.

Если вы хотите получать новости с моего сайта. Оформляйте подписку.

До новых встреч.

 «Автор: Михаил Орлов»

Google

Также на эту тему Вы можете почитать:

13 комментарии на “Урок 10. AutoLISP. Стандартные команды Автокад.

  1. Мария 26.02.2016 15:46

    Здравствуйте. Не могли бы вы подсказать, как описать команду для проведения линии под определенным углом, к примеру под углом в 65 градусов?

    • Михаил Орлов 27.02.2016 16:43

      (setq p1 (getpoint "\nУкажите точку : "))
      (setq p2 (polar p1 (*(/ 65. 180) pi) 1000))
      (command "_line" p1 p2 "")

      (*(/ 65. 180) pi) — угол 65 градусов в радианах
      1000 — длина отрезка (линии)

  2. Алексей 20.04.2016 14:49

    Здравствуйте, подскажите пожалуйста.. как в Autolispe запустить программу комодом?

    • Михаил Орлов 21.04.2016 06:32

      Что значит комодом? Вопрос не совсем понятен. Программы в Автокад сначала нужно загрузить. После этого их можно запускать как стандартные команды Автокад (из командной строки, Горячие клавиши, кнопка запуска команды и т.п.). Можно сделать чтобы команда запускалась автоматически сразу после загрузки программы.

  3. Григорий 28.06.2016 15:46

    Здравствуйте! Подскажите, как присвоить новой точке р3 координату Х от введенной мною через getpoint точки р1 и координату Y от р2 ? Спасибо

    • Михаил Орлов 28.06.2016 19:46
      (setq p1 (getpoint "\nУкажите первую точку : "))
      (setq p2 (getpoint "\nУкажите вторую точку : "))
      (setq p3 (list (nth 0 p1) (nth 1 p2) 0))
      • Григорий 29.06.2016 19:17

        Благодарю! Кое-что начинает получаться )

  4. Григорий 02.07.2016 14:38

    Здравствуйте! Можно ли для функции if сравнивать переменную сразу с двумя числами (т.е. мне надо выполнить функцию только в том случае, когда «а» больше нуля но меньше 90)?

    • Григорий 02.07.2016 16:13

      разобрался
      if (> 90 a 0)

  5. VolodyaAYU 13.08.2016 11:36

    Как задать диаметр окружности из ячейки таблицы

    • Михаил Орлов 13.08.2016 17:10

      Из какой таблицы? Из таблицы AutoCAD? Из заранее известной ячейки (известен адрес ячейки)?

  6. Евгений 27.10.2016 09:47

    Как пошагово выполнить программу нм лиспе

    • Михаил Орлов 27.10.2016 15:18

      1)Выделяйте необходимый кусок кода и нажимайте на кнопку «Загрузить выделены фрагмент». 2) Установите точку останова. Запустите программу она остановиться в точке останова. Далее чтобы идти вниз пошагово нажимаем на кнопку «Шаг с заходом».

Оставить комментарий

Ваш mail не будет опубликован.

Вы можете использовать HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>