Опубликован: 21.02.2012 | Доступ: свободный | Студентов: 2061 / 499 | Оценка: 4.20 / 4.40 | Длительность: 19:35:00
Специальности: Разработчик аппаратуры
Лекция 2:

Программирование в среде Visual LISP

< Лекция 1 || Лекция 2: 12 || Лекция 3 >

Справочная система

Справку по любому термину AutoLISP можно получить в общей справочной системе AutoCAD. Но среда AutoLISP располагает своей справочной службой HELP (рис. 2.4).

 Диалоговое окно справки AutoLISP

Рис. 2.4. Диалоговое окно справки AutoLISP

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

  • AutoLISP Reference (Справочник по AutoLISP). Здесь собраны все команды и все функции AutoLISP;
  • Visual LISP Developer's Guide (Руководство разработчика на Visual LISP). Здесь содержатся все основные алгоритмы с примерами применения языка на практике;
  • Visual LISP Tutorial (Учебник по Visual LISP) - хорошее пособие для начинающих пользователей.

Задание 2.4

Найти в справке основные операторы для работы с числами и текстом.

В окне Visual LISP for AutoCAD выберите команду HELP - Visual LISP Help Topics - Содержание - AutoLISP Functions -Operators. В левой части окна откроется список операторов, а в правой части помещены комментарии и примеры (рис. 2.5). Например, об операторе сравнения (= numstr [numstr] ...) сказано, что он применим и к числам и к тексту. Здесь numstr - число или строка. Оператор возвращает значение TRUE, если аргументы или строки равны, иначе возвращает NIL.

Примеры:

(= 4 4.0)                returns  T,		(= 499 499 500)           returns  nil,
(= 20 388)               returns  nil,		(= "me" "me")             returns  T,
(= 2.4 2.4 2.4)          returns  T, 		(= "me" "you")            returns  nil.
 Диалоговое окно справочной системы

Рис. 2.5. Диалоговое окно справочной системы

Синтаксис AutoLISP

Прежде, чем выполнять задания по составлению практических программ в среде Visual LISP, рассмотрим правила синтаксиса и работу некоторых функций.

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

(ОПЕРАТОР  ПАРАМЕТР1  ПАРАМЕТР2  ПАРАМЕТР3  ПАРАМЕТР4)
(ФУНКЦИЯ  АРГУМЕНТ1  АРГУМЕНТ2  АРГУМЕНТ3  АРГУМЕНТ4)

Рассмотрим для примера арифметические операторы для операций с числами. Арифметические операторы имеют следующие обозначения:

  • + сложение;
  • - вычитание;
  • * умножение;
  • / деление.

Наберите в командной строке следующее выражение (sqrt (- (* 5.5 9.5) 3.25))

Здесь (sqrt num) - функция, возвращающая вещественный корень квадратный из целого или вещественного числа num.

Вначале производится умножение, затем вычитание, затем извлекается корень квадратный. В ответ программа выдаст число 7.0.

В качестве другого примера рассмотрим строковые функции

  • STRCAT функция конкатенации, объединяет строки-операнды;
  • SUBSTR возвращает часть строки. Первый аргумент задает строку, второй - позицию первого символа, третий - количество символов подстроки.
  • STRLEN возвращает количество символов строки, включая пробелы.

Наберите в командной строке такие выражения. Оставьте пробелы после I и Love.

(strcat "I " "Love "  "You" ".")↵
(substr  "I love you." 3 4) ↵
(strlen "I love you.") ↵

Программа даст ответы: "I Love You.", "love", 11

Приведем еще несколько функций для работы с числами.

Функция Описание
= Сравнение на равенство. Возвращает True, если аргументы равны между собой. Иначе возвращает nil.
/= Сравнение на неравенство. Возвращает True, если аргументы не равны между собой. Иначе возвращает nil.
< Сравнение меньше. Возвращает True, если каждый аргумент численно меньше следующего. Иначе возвращает nil.
> Сравнение больше. Возвращает True, если каждый аргумент численно больше следующего. Иначе возвращает nil.
<= Сравнение меньше или равно. Возвращает True, если каждый аргумент численно меньше или равен следующему. Иначе возвращает nil.
>= Сравнение больше или равно. Возвращает True, если каждый аргумент численно больше или равен следующему. Иначе возвращает nil.

Полный список функций можно найти в справке AutoLISP в разделе AutoLISP Developer's Guide - Appendxes - AutoLISP Function Synopsis - Basic Functions (рис. 2.6).

 Список базовых функций в справочной системе Auto Lisp

увеличить изображение
Рис. 2.6. Список базовых функций в справочной системе Auto Lisp

Более подробное описание языка AutoLISP приведено в следующей лекции.

Упражнения

Создать программы AutoLISP по приведенным текстам. Изменить параметры. Сохранить файлы в новой папке LISP. Включить папку в маршруты поддержки.

  1. Построение домика с крышей по заданным размерам. После построения замкнутого многоугольника запускаем команду зумирования с параметром Extents.

    (defun c:domik () 
        (command "_pline"  "0,2" "0,0" "2,0" "2,2" "2.5,2" "1,3" "-0.5,2" "0,2" "")
        (command "_zoom" "_e"))
    
  2. Построение линии длиной 50 от указанной точки вдоль оси Y. Попробуйте дополнить программу: как в предыдущем задании, зумированием растяните изображение на весь экран.

    (defun c:line50 (/ pt) ;Creates a line of length 50 relative Y
      (princ "Please click a point:")
      (setq pt (getpoint))
      (command "_line" pt "@0,50" "")
    )
    
  3. Построение окружности радиуса 30 с центром в указанной точке. Измените программу. Введите в параметры вторую переменную rad. Значение этой переменной также должно запрашиваться.

    (defun c:circle30 (/ pt) ;Creates a circle of radius 30
      (princ "Please click a point: ")
      (setq pt (getpoint))
      (command "_circle" pt "30" "")
    )
    
  4. Построение красной линии между указанными точками

    (defun c:redline (/ startpt endpt)
     (setq startpt (getpoint "Select the redline start point:"))
     (setq endpt (getpoint "Select the redline end point"))
     (command "_line" startpt endpt "")
     (command "_chprop" "_last" "" "_color" "red" "" )
    )
    
  5. Последняя команда CHPROP (Изменить свойства) имеет много параметров. Поэтому посмотрите протокол прохождения в AutoCAD этой процедуры:

    Command: redline
    Select the redline start point:Select the redline end point_line Specify first 
    point:
    Specify next point or [Undo]:
    Specify next point or [Undo]:
    Command: _chprop
    Select objects: _last 1 found
    Select objects:
    Enter property to change 
    [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: _color
    New color [Truecolor/COlorbook] <BYLAYER>: red
    Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]:
    Command: nil
    
  6. Запустите отдельно команду CHPROP, чтобы закрасить линию желтым цветом. Программа подсказывает, по какой форме задать цвет Truecolor: Red,Green, Blue:. Поэтому желтый цвет нужно задать как 255,255,0.Протокол операций будет выглядеть следующим образом:

    Command: chprop
    Select objects: 1 found
    Select objects:
    Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]: c
    New color [Truecolor/COlorbook] <BYLAYER>: t
    Red,Green,Blue: 255,255,0
    Enter property to change [Color/LAyer/LType/ltScale/LWeight/Thickness/Material]:
    Command: *Cancel*
    
  7. В задании 2.3 была создана процедура построения гантели с двумя сферами. Дополните процедуру дополнительными построениями, так чтобы получилась фигура, изображенная на рис. 2.7.

     Рисунок для построения

    Рис. 2.7. Рисунок для построения

Ключевые термины

IDE - Integrated Development Environment - интегрированная среда разработки, часть пользовательского интерфейса.

Visual Lisp - среда AutoCAD для программирования на языке Auto Lisp.

Маршрут поиска файлов поддержки - список адресов файлов, в которых программа производит поиск заданных процедур.

Краткие итоги

Хотя выражения AutoLisp могут вводиться непосредственно в командную строку, удобно представлять их в виде кода процедуры, которую можно хранить в файле. Процедура представляет собой команды для выполнения чертежных операций. Составление и отладка процедуры производятся в среде Visual Lisp.

Вопросы

  1. Как открыть Visual LISP Editor?
  2. Какие окна и панели инструментов имеет Visual LISP Editor?
  3. Какие элементы процедуры заключаются в круглые скобки?
  4. Как отделяются комментарии?
  5. Как загружаются файлы Auto LISP в программу AutoCAD?
  6. Как добавить файл в список маршрутов поиска файлов поддержки?
< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Алексей Тимонин
Алексей Тимонин
Алексей Потапкин
Алексей Потапкин

Здравствуйте.

Подскажите, пожалуйста, каким образом можно передать параметры в макрос написанный в Autocad на VBA? Например, есть процедура, которая отрисовывает заштрихованный прямоугольник (см. ниже). Как её изменить, чтобы на входе от пользователя требовалось ввести также в качестве параметров координаты углов прямоугольника?

Public Sub DrawHatchedBox()

...

End Sub