Лабораторная работа №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.4 Построение контура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 позволяет создавать различные параметрические модели, которые могут существенно автоматизировать работу конструктора.

Работу считаю выполненной в полном объеме.