Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
484 Глава 13
Пример 4
Напишите программу на языке Visual LISP, с помощью которой вы сможете начертить развертку сопряжения, а затем проставить все необходимые размеры. Сопряжение и его развертка без размеров показаны на рис. 13.25.
Рис. 13.25. Развертка сопряжения
Шаг 2: написание программы Visual LISP
Откройте окно Visual LISP, выбрав команду Tools AutoLISP Visual LISP Editor или введя выражение VLIDE в командную строку. Затем откройте окно текстового редактора, выбрав команду New File из меню File. Для написания программы на языке LISP можно воспользоваться любым текстовым редактором, например, таким как Notepad. Ниже приведен листинг программы для примера 4. (Для программ LISP использование строчных букв не является обязательным, поэтому могут использоваться как строчные, так и прописные буквы.)
;С помощью этой программы вы сможете построить ;развертку сопряжения прямоугольных поперечных сечений
;
(defun TRANA () (graphscr)
(setvar "cmdecho" 0)
(setq L (getdist "\n Enter length of bottom rectangle: ")) (setq W (getdist "\n Enter width of bottom rectangle: ")) (setq H (getdist "\n Enter height of transition: "))
(setq L1 (getdist "\n Enter length of top rectangle: ")) (setq W1 (getdist "\n Enter width of top rectangle: "))
(setq x1 (/ (- w w1) 2)) (setq y1 (/ (a l 11) 2))
(setq d1 (sqrt (+ (* h h) (* x1 x1)))) (setq d2 (sqrt (+ (* d1 d1) (* y1 y1)))) (setq p1 (sqrt (- (* d2 d2) (* y1 y1)))) (setq p2 (sqrt (- (* d2 d2) (* x1 x1))))
Использование Visual LISP 485
(setq t1 (+ l1 y1)) (setq t2 (+ l w)) (setq t3 (+ l x1 w1)) (setq t4 (+ l x1)) (setq pt1 (list 0 0)) (setq pt2 (list y1 p1)) (setq pt3 (list t1 p1)) (setq pt4 (list l 0)) (setq pt5 (list t4 p2)) (setq pt6 (list t3 p2)) (setq pt7 (list t2 0))
(command "layer" "make" "ccto" "c" "l" "ccto" "") (command "line" pt1 pt2 pt3 pt4 pt5 pt6 pt7 "c")
(setq sf (/ (+ l w) l2)) (setvar "dimscale" sf)
(setq c1 (list 0 (- 0 (+ 0.75 sf)))) (setq c7 (list (- 0 (+ 0.75 sf) 0))) (setq c8 (list (- 1 (+ 0.75 sf) 0)))
(command "layer" "make" "cctd" "c" "2" "cctd" "")
(command "dim" "hor" pt1 pt2 c1 "" "base" pt3 "" "base" pt4 "" "exit") (command "dim" "hor" pt4 pt5 c1 "" "base" pt6 "" "base" pt7 "" "exit") (command "dim" "vert" pt1 pt2 pt2 "" "exit")
(command "dim" "vert" pt4 pt5 pt5 "" "exit") (command "dim" "aligned" pt1 pt2 c7 "" "exit") (command "dim" "aligned" pt4 pt5 c8 "" "exit") (setvar "cmdecho" 1)
(princ))
Шаг 2: загрузка и запуск программы Visual LISP
Выберите команду Save или Save As из меню File и сохраните файл программы под именем trana.lsp. Чтобы загрузить созданную программу, выберите команду Load Text in Editor из меню Tools или щелкните на кнопке Load active edit window, которая находится на панели инструментов Tools. В окне консоли Visual LISP Console появится сообщение об успешно выполненной загрузке. Чтобы запустить программу, введите имя функции (trana) в строку приглашения консоли после знака _$. Не забывайте, что имя функции должно указываться в круглых скобках.
486 Глава 13
Пример 5
Напишите программу на языке Visual LISP, с помощью которой вы сможете построить развертку усеченного конуса, показанного на рис. 13.26, а затем проставить все необходимые размеры.
Рис. 13.26. Развертка усеченного конуса
Шаг 1: написание программы Visual LISP
Ниже приведен листинг программы Visual LISP для примера 5.
;Эта программа вычерчивает развертку усеченного конуса
;
;Функция DTR преобразует градусы в радианы (defun DTR (a)
(* PI (/ A 180.0))
)
;Функция RTD преобразует радианы в градусы (defun RTD (a)
(* a (/ 180.0 pi))
)
(defun tan (a)
(/ (sin a) (cos a))
)
(defun cone-lp () (graphscr))
(setvar "cmdecho" 0)
(setq r2 (getdist "\n Enter outer radius at larger end: ") (setq r1 (getdist "\n Enter inner radius at smaller end: ") (setq t1 (getdist "\n Enter sheet thickness: ")
(setq a (getangle "\n Enter cone angle: ")
;В этой части программы вычисляются различные параметры, ;необходимые для построения развертки
(setq x0 0) (setq y0 0)
Использование Visual LISP |
487 |
(setq sf (/ r2 3)) (setvar "dimscale" sf) (setq ar a)
(setq tx (/ (* t1 (sin ar)) 2)) (setq rx2 (- r2 tx))
(setq rx1 (+ r1 tx))
(setq w (* (* 2 pi) (cos ar))) (setq rl1 (/ rx1 (cos ar))) (setq rl2 (/ rx2 (cos ar)))
;В этой части программы вычисляются координаты x ;различных точек
(setq xl (+ x0 rl1) x3 (+ x0 rl2)
x2 (- x0 (* rl1 (cos (- pi w)))) x4 (- x0 (* rl2 (cos (- pi w))))
)
; В этой части программы вычисляются координаты y ;различных точек
(setq y1 y0 y3 y0
y2 (+ y0 (* rl1 (sin (- pi w)))) y4 (+ y0 (* rl2 (sin (- pi w))))
)
(setq p0 (list x0 y0) p1 (list x1 y1) p2 (list x2 y2) p3 (list x3 y3) p4 (list x4 y4)
)
(command "layer" "make" "ccto" "c" "1" "ccto" "") (command "arc" p1 "c" p0 p2)
(command "arc" p3 "c" p0 p4) (command "line" p1 p3 "") (command "line" p2 p4 "")
(setq f1 (/ r2 24)) (setq f2 (/ r2 2))
(setq d1 (list (+ x3 f2) y3)) (setq d2 (list x0 (- y0 f2)))
(command "layer" "make" "cctd" "c" "2" "cctd" "") (setvar "dimtih" 0)
(command "dim" "hor" p0 p1 d2 "" "baseline" p3 "" "baseline" p2 "baseline" p4 "" "exit")
(command "dim" "vert" p0 p2 d1 """baseline" p4 "" "exit") (setvar "dimscale" 1)
(setvar "cmdecho" 1) (princ)
)
488 Глава 13
Шаг 2: загрузка и запуск программы Visual LISP
Выберите команду Save или Save As из меню File и сохраните файл программы под именем cone-lp.lsp. Чтобы загрузить созданную программу, выберите команду Load Text in Editor из меню Tools или щелкните на кнопке Load active edit window, которая находится на панели инструментов Tools. В окне консоли Visual LISP Console появится сообщение об успешно выполненной загрузке. Чтобы запустить программу, введите имя функции (cone-lp) в строку приглашения консоли после знака _$. Не забывайте, что имя функции должно указываться в круглых скобках.
Отслеживание переменных
Иногда возникает необходимость определить значения переменных, которые используются в данной программе. Предположим, например, что созданная программа работает с перебоями или не выполняет требуемых функций. Чтобы исправить это положение, необходимо определить причину возникшей проблемы. Одним из способов выполнения этой задачи является отслеживание значений переменных, используемых в программе. Ниже приведено пошаговое описание этой процедуры:
1.Откройте файл, содержащий программный код, в текстовом редакторе Visual LISP. Для этого выберите команду Open File из меню File.
2.Загрузите программу, выбрав команду Load Text in Editor из меню Tools или щелкнув на кнопке Load active edit window, которая находится на панели инструментов Tools.
3.Запустите программу, введя ее имя (tr2) в строку приглашения консоли Visual LISP (после знака _$). При этом будут выполнены операции, определенные в программе. В данном случае будут построены треугольник и дуга по трем точкам, которые определены пользователем. Для определения координат точек p1, p2 и p3 можно воспользоваться средством Watch window, которое находится на панели инструментов View.
4.Запустив программу, выделите в окне Visual LISP переменную p1, а затем щелкните на кнопке Watch window, которая находится на панели инструментов View. На переднем плане появится диалоговое окно Add Watch, а на заднем плане отобразится окно Watch. В раскрывающемся списке открывшегося диалогового окна показана переменная р1. Щелкните на кнопке ОК и в окне Watch появятся координаты точки р1 (X, Y и Z).
5.Установите курсор рядом с переменной p2 (перед, после или прямо на ней) и щелкните на пиктограмме Add Watch, которая находится в верхней части окна Watch. В открывшемся окне Add Watch щелкните на кнопке OK. Координаты выбранной переменной появятся в окне Watch, как показано на рис. 13.27. Точно так же можно определить значения других переменных, использованных в этой программе.
Использование Visual LISP 489
Рис. 13.27. Использование функции Add Watch для отслеживания значений переменных
Коды ошибок и сообщения об ошибках, используемые в Visual LISP
В этом разделе вы познакомитесь с сообщениями об ошибках, которые могут появиться в строке приглашения консоли при выполнении программ Visual LISP. Сообщения об ошибках располагаются по возрастанию частоты их возникновения при выполнении программ Visual LISP, т.е. первыми в списке перечислены наиболее часто встречающиеся ошибки.
•Malformed list (Неправильно сформированный список)
Преждевременное завершение списка. Наиболее распространенной причиной является несоответствие количества открывающих и закрывающих скобок.
•Malformed string (Неправильно сформированная строка)
Преждевременное завершение строки, считываемой из файла.
•Null function (Нулевая функция)
Функция, аргумент которой равен нулю.
•Too few arguments (Слишком мало параметров)
Встроенная функция получила меньше аргументов, чем требуется.
•String too long (Слишком длинная строка)
Системной переменной SETVAR присвоено слишком длинное строковое выражение.
490Глава 13
•Too many arguments (Слишком много параметров)
Встроенная функция получила слишком много параметров.
•Invalid argument (Неправильный аргумент)
Используется параметр несоответствующего типа.
•Invalid argument list (Неправильный список параметров)
Функция получила неправильный список параметров.
•Incorrect number of arguments (Неверное число параметров)
Несмотря на то, что данная функция должна содержать только один параметр, она получает еще несколько дополнительных параметров.
•Incorrect number of arguments to a function (Неверное число параметров, введенных в данную функцию)
Несоответствие между числом определенных формальных параметров и количеством аргументов, введенных в определенную пользователем функцию.
•Function cancelled (Отмена выполнения функции)
Отмена выполнения команды посредством нажатия клавиш <Ctrl+C> или <Esc> при появлении приглашения на ввод данных.
•Extra right paren (Дополнительная правая скобка)
Обнаружение одной или нескольких дополнительных правых скобок.
•Exceeded maximum string length (Превышение максимальной длины строки)
Длина строкового выражения, введенного в функцию, превышает 132 символа.
•Divide by zero (Деление на нуль)
Делить на нуль нельзя.
•Divide overflow (Переполнение при делении)
Ошибка, возникающая при делении на бесконечно малую величину.
•Console break (Прерывание работы консоли)
Ошибка, возникающая при нажатии клавиш <Ctrl+C> во время выполнения команды.
•Bad argument type (Неверный тип параметра)
Функция, получившая параметр несоответствующего типа.
•Bad association list (Неправильный ассоциированный список)
Список параметров, поставленный в соответствие данной функции, не содержит списков ключевых значений.
•Visual LISP stack overflow (Переполнение стека Visual LISP)
При выполнении программы произошло переполнение стековой памяти Visual LISP. Одной из причиной этого является слишком большое число параметров, введенных в данную функцию.
•Bad ENTMOD list (Неправильный список ENTMOD)
Параметр, переданный функции ENTMOD, не соответствует существующему списку данных.

Для пошаговой отладки программы можно использовать функцию Toggle breakpoint, 


пиктограмма которой находится на панели инструментов Debug. О том, как это сделать, рассказывается в разделе “Отладка программы”.