Хабрахабр

Новые возможности LISP в nanoCAD 8.5

Поддержка LISP в nanoCAD появилась давно и связывалась в первую очередь со специальной командой LSP, которая открывает LISP-консоль, предназначенную для ввода выражений и анализа переменных:


Рис. 1. Окно LISP-консоли

Релиз 8.5 сделал следующий важный шаг вперед, теперь ввод выражений LISP стал возможен в командной строке, кроме того, появилась поддержка символа PAUSE. Описываемые в статье изменения вошли в релиз 8.5, начиная с номера 8.5.4131.2629, сборка 4133.

LISP-выражение вместо команды

Ввод LISP-выражений в ответ на подсказку Команда: возможен, когда нет других запросов. Например:
(min k1 k2),
где k1 и k2 – некоторые глобальные переменные (рис. 2):


Рис. 2. LISP-выражение в командной строке

После нажатия клавиши Enter система вернет в командную строку результат. Возможно выполнение команд и задание их параметров с помощью LISP-функции command — например, для команды RECTANGLE (рис. 3):


Рис. 3. Пример LISP-выражения, выполняющего команду RECTANGLE

Результат выполнения увидим на экране:


Рис. 4. Результат выполнения команды RECTANGLE

LISP-символ PAUSE в качестве паузы для пользовательского ввода

В версии 8.5 реализовано использование LISP-символа PAUSE, который означает прерывание работы команды с целью запроса пользовательского ввода. Предположим, радиус известен заранее, а точку центра окружности необходимо запросить. Тогда воспользуемся выражением:
(command “_.CIRCLE” PAUSE (sqrt 2894.73))
Результат обработки видим на рис. 5:


Рис. 5. Прерывание команды CIRCLE с помощью PAUSE

Команда CIRCLE стартовала, прервалась на запрос центра окружности и после указания точки центра завершила выполнение, использовав результат вычисления выражения (sqrt 2894.73) в качестве значения радиуса.
Возможно неоднократное использование PAUSE в одном LISP-выражении, например:
(command “_.CIRCLE” PAUSE PAUSE)

Доступ к значениям LISP-символов

Для отладки часто требуется проверка текущих значений LISP-символов. По опыту работы с другими CAD-системами нам известен способ получения текущего значения глобальной LISP-переменной – восклицательный знак, например:
!myvar

В версии 8.5 такой возможности нет, но есть заменяющая ее функция eval. Следующее выражение выдаст значение переменной myvar:
(eval myvar)

Примечание. (eval PAUSE) в nanoCAD возвратит nil.
Функция eval ведет себя по-разному с данными разных типов, поэтому для переменных, хранящих списковые значения, придется добавлять функцию quote, например:
(setq lista1 (list 1 (list 2 99)))
(eval lista1) возвращает ошибку
(eval (quote lista1)) возвращает (1 (2 99))

Николай Полещук

Показать больше

Похожие публикации

Кнопка «Наверх»