Лабораторная работа №2.
Проектирование параметрического описания контура на языке AutoLISP.
1 Цель работы
Построить заданный контур таким образом, чтобы меняя координаты точки привязки можно было перемещать контур по формату чертежа, а также задавать линейные и радиальные размеры контура.
2 Исходные данные
Взяты из методического пособия [1]. Контур показан на рисунке 1.
Рисунок 1 – Заданный криволинейный контур
3 Методика выполнения работы
3.1 Запускаем программу AutoCAD 2004, в меню Tools выбираем пункт «AutoLISP» и команду “Visual LISP Editor”. Открывается окно редактора AutoLISP и вводим описание контура (рисунок 2.)
Рисунок 2 – Окно редактора AutoLISP
3.2 Создание программы на языке AutoLISP.
Пишем программу для отрисовки контура с возможностью ввода параметров для точки привязки и размеров.
Рассмотрим отдельные части программы подробнее.
3.2.1 Для ввода угловых значений в градусах, создаем при помощи оператора “defun” новую функцию dtr, которая переводит градусы в радианы.
(defun dtr(a)
(* pi(/ a 180.))
)
3.2.2 Далее следует создание новой команды “kontur” и описание ее параметров.
(defun c:kontur()
(command "_limits" "" "210,297") – введение границ чертежа;
(command "_zoom" "w" "-10,-10" "90,90") – определение масштаба изображения на экране;
(command "_erase" "all"
"") – команда очищает экран;
запрос точки привязки контура:
(princ
"Укажите положение точки привязки:")
(setq
pt1 (getpoint))
запрос реальных значений размеров контура:
(setq h1 (getreal "\Размер h1:"))
(setq h2 (getreal "\Размер h2:"))
(setq h3 (getreal "\Размер h3:"))
(setq h4 (getreal "\Размер h4:")) – лишний параметр! (см.
замечание в конце работы).
(setq R1 (getreal "\Радиус R1:"))
(setq R2 (getreal "\Радиус R2:"))
3.2.3 Далее
определяем узловые точки контура (рисунок 3).
(setq pt2 (polar pt1 0. h1))
(setq pt3 (polar pt2 (dtr 90.) h2))
(setq pt4 (polar pt3 (dtr 45.) (/ R2 (cos (/ pi
4.)))))
(setq pt5 (polar pt4 (dtr 90.) (-(+ R1 h3) R2)))
(setq pt6 (polar pt5 (dtr 180.) (+ R2 h1)))
(setq pt7 (polar pt6 (dtr 225.) (/ R1 (cos (/ pi
4.)))))
(setq pt8 (polar pt7 0. R1))
(setq pt9 (polar pt3 0. R2))
(setq pt10 (polar pt9 (dtr 135.) R2))
(setq pt11 (polar pt8 (dtr 135.) R1))
Рисунок 3 – Определение узловых точек
3.2.4 Построение контура.
(command "_line" pt1 pt2 "")
(command "_line" pt2 pt3 "")
(command "_arc" pt3 pt10 pt4)
(command "_line" pt4 pt5 "")
(command "_line" pt5 pt6 "")
(command "_arc" pt6 "_e" pt7
"_r" R1)
(command
"_line" pt7 pt1 "")
3.2.5 Простановка размеров.
(command "_dimlinear" pt1 pt2 "@
0,-5")
(command "_dimlinear" pt2 pt3 "@
5,0")
(command "_dimlinear" pt7 pt1 "@
0,-5")
(command "_dimlinear" (polar pt1 (dtr 90.)
h2) pt8 (polar pt7 (dtr 180.) 5.))
(command "_dimradius" pt11 pt11)
(command "_dimradius" pt10 pt10)
(command "_line" pt1 (polar pt6 (dtr 90.) 5.)
"")
(command "_line" (polar pt1 (dtr 90.) h2)
pt3 "")
3.3 Использование созданной программы.
После того, как программа готова сохраняем файл под именем Donguzov.lsp и в окне AutoCAD открываем меню Tools, пункт «AutoLISP» и запускаем команду “Load”. После чего нам предлагается выбрать файл с расширением lsp (рисунок 4).
Рисунок 4 – Загрузка файла AutoLISP
Выбираем необходимый файл и нажимаем кнопку “Load”, а затем “Close”. В командную строку AutoCAD вводим команду “kontur” и нажимаем ввод, после чего, если в программе нет ошибок, нам предлагается указать точку привязки контура.:
Command:
Укажите положение точки привязки:
Это можно сделать путем ввода данных в командную строку, либо указать курсором «мыши» и нажать левую кнопку.
Далее предлагается ввести данные размеров контура:
Размер
h1:10
Размер
h2:10
Размер
h3:20
Размер
h4:20
Радиус
R1:20
Радиус
R2:30
Вводя разные значение размеров, получаем разные варианты исходного контура
( рисунок 5).
Рисунок 5 – Контуры с различными
заданными размерами
Полный текст программы:
(defun dtr(a)
(* pi(/ a 180.))
)
(defun c:kontur()
(command "_limits" "" "210,297")
(command "_zoom" "w" "-10,-10"
"90,90")
(command "_erase" "all" "")
(princ "Укажите положение точки
привязки:")
(setq pt1 (getpoint))
(setq h1 (getreal "\Размер h1:"))
(setq h2 (getreal "\Размер h2:"))
(setq h3 (getreal "\Размер h3:"))
(setq h4 (getreal "\Размер h4:"))
(setq R1 (getreal "\Радиус R1:"))
(setq R2 (getreal "\Радиус R2:"))
;------Определение узловых
точек---------
(setq pt2 (polar
pt1 0. h1))
(setq pt3 (polar pt2 (dtr 90.) h2))
(setq pt4 (polar pt3 (dtr 45.) (/ R2 (cos (/ pi 4.)))))
(setq pt5 (polar pt4 (dtr 90.) (-(+ R1 h3) R2)))
(setq pt6 (polar pt5 (dtr 180.) (+ R2 h1)))
(setq pt7 (polar pt6 (dtr 225.) (/ R1 (cos (/ pi 4.)))))
(setq pt8 (polar pt7 0. R1))
(setq pt9 (polar pt3 0. R2))
(setq pt10 (polar pt9 (dtr 135.) R2))
(setq pt11 (polar pt8 (dtr 135.) R1))
;-------Отрисовка контура-------------
(command "_line" pt1 pt2 "")
(command "_line" pt2 pt3 "")
(command "_arc" pt3 pt10 pt4)
(command "_line" pt4 pt5 "")
(command "_line" pt5 pt6 "")
(command "_arc" pt6 "_e" pt7 "_r" R1)
(command "_line"
pt7 pt1 "")
;---------Простановка
размеров----------
(command "_dimlinear" pt1 pt2 "@ 0,-5")
(command "_dimlinear" pt2 pt3 "@ 5,0")
(command "_dimlinear" pt7 pt1 "@ 0,-5")
(command "_dimlinear" (polar pt1 (dtr 90.) h2) pt8 (polar pt7
(dtr 180.) 5.))
(command "_dimradius" pt11 pt11)
(command "_dimradius" pt10 pt10)
(command "_line" pt1 (polar pt6 (dtr 90.) 5.) "")
(command "_line" (polar pt1 (dtr 90.) h2) pt3 "")
)
4 Обсуждение результатов
В процессе выполнения данной работы была создана программа параметрического описания контура на языке AutoLISP . Допущенные ошибки: при создание запроса реальных размеров ввел лишний параметр h4, который равен радиусу R1, и при введение значения h4, не совпадающего с R1, возникают ошибки в построение контура. Также столкнулся с рядом ошибок, которые были вызваны в основном невнимательностью (пропущены скобки или точки) и были легко устранены благодаря цветовой поддержке вводимых данных.
5
Вывод
В
результате выполнения данной работы усвоил принципы написания программ на языке
AutoLISP и закрепил на
практике теоретические знания операторов данного языка.
AutoLISP позволяет создавать различные параметрические модели, которые могут существенно автоматизировать работу конструктора.
Работу считаю выполненной в полном объеме.