Auto CAD

Error: bad function


Это сообщение об ошибке содержит подсказку: error: bad function: 2 (ошибка: неверная функция: 2). Когда вы получаете сообщение об ошибке в имени функции, начинайте искать ошибку от открывающей скобки. Цифра 2 стоит непосредственно за скобкой. Вспоминайте, на этом месте должна находиться функция. Если вы не укажете AutoLISP, что 2 не следует оценивать как функцию, AutoLISP обнаружит, что такая функция не описана (или bad). Как объяснить AutoLISP, что не следует оценивать первый элемент списка? Вы должны цитировать (quote) список. Для этого необходимо поставить апостроф перед открывающей скобкой. В примере в окне справки показан апостроф, но трудно заметить все сразу. Теперь вы можете добавить апостроф, попытаться запустить функцию еще раз и получить следующий результат.

Выглядит неплохо. По крайней мере, вы получили точку, т. е. вы получили список из трех значений. Но является ли эта точка искомой? Вы не можете утверждать наверняка, хотя координаты выглядят вполне вероятными. Как проверить?

В AutoCAD начертите отрезок из точки с координатами 2,3 длиной 4 единицы и под углом 45°. Координаты конечной точки отрезка — 4.8284, 5.8284, О (9.5). Они не совпадают с координатами, полученными в ответ на ввод функции в Visual LISP Console (Консоль Visual LISP). Необходимо еще что- то поменять.

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

Предположим, вы уже проверили код, и решились на эксперимент. Возможно, в справочной системе ошибка. Вы меняете местами значения, и вводите (polar  (2 3 0) 4 45), но результат еще дальше от правильного. Функция возвращает (-27.414 -31.0561 0.0).

В этом случае проблема очевидна. Вам нужен угол в 45°, а функция polar думает, что вы имеете в виду 45 радиан. В справке об этом говорится, но вы каким-то образом пропустили. Теперь вы вводите (polar (2 3 0) (dtr 45) 4), что предполагает, что у вас загружена функция dtr (она описана в главе 8). Результат, который вы получаете после выполнения этой строки кода, соответствует результату, полученному с помощью команды ID (КООРД) — 4.8284, 5.8284, 0.

Такого рода трудности при попытке применить функцию первый раз вполне реальны, даже если вы довольно давно пишете программы. Относитесь к ним как к игре: пытайтесь получить удовольствие, даже если вас раздражают задержки из-за мелочей.

Если вы не описали функцию DTR до попытки ввести последний пример кода, поместите математическую формулу для конвертирования градусов в радианы. Код будет выглядеть следующим образом.

Комментарии закрыты