Смекни!
smekni.com

Построение параметрической модели детали в среде программирования (стр. 3 из 4)

Списки создаются функцией list:

(list элемент1 элемент2 … элементN)

В качестве аргументов элементы, из которых образуется список, могут выступать любые объекты, которыми оперирует AutoLisp. В качестве элементов списка могут выступать другие списки, а также переменные и выражения AutoLisp. Функция list возвращает последний элемент списка, причем список не должен быть равным nil.

Со списками выполняют операции следующие функции:

(car список) - извлечение первого элемента списка или точечной пары;

(cadr список) - извлечение из списка подсписка путем удаления первого элемнта.

4.4 Отрисовка детали


Для построения чертежа детали использовались следующие функции:

(command “имя команды" параметр1 … параметрN)

Функция command воспринимает все сопутствующие операнды так, будто они введены в командную строку. Все константы, являющиеся параметрами функции command, задаются как текстовые строки (в кавычках), даже если они являются числами или координатами точек. Любой параметр функции command можно заменить на имя переменной или выражение AutoLisp. Данный параметр примет значение, равное значению переменной или результату значения выражения.

Таким образом, в проекте были использованы следующие команды:

(command "line" “точка1” “точка2" "") - построение линии;

(command "circle" “центр окружности” “радиус”) - построение окружности;

(command "layer" "опции") - работа со слоями;

(command "array" объекты "" "тип массива" “базовая точка" "количество элемнтов" "угол заполнения" "") - построение массива;

(command "osnap" "обозначение привязки") - включение определенного вида привязки;

(command "trim" выделяемые секущие стороны "" объекты для отсечения "") - отсечение по границе;

(command "erase" объекты "") - удаление объектов;

(command "fillet" "r" "радиус сопряжения")

(command "fillet" объект1 объект2 "") - сопряжение;

(command "lengthen" "de" "величина" объект "") - изменяет размер объекта на заданную величину;

(command "bhatch" "p" "ansi31" "0.5" "0" точка "") - штриховка объекта через указание точки внутри замкнутой области;

(entlast) - извлечение последнего построенного примитива.

4.5 Простановка размеров

Для простановки размеров использовались следующие команды:

(command "dimlinear" p1 p2 p3) - линейный размер, где p1, p2 - начальная и конечная точка на объекте; p3 - точка расположения размерной линии;

(command "dimdiameter" p1 p2) - диаметральный размер, где p1- точка на окружности или дуге; p2 - точка расположения размерной линии;

(command "dimradius" p1 p2) - радиальный размер, где p1 - точка на окружности или дуге; p2 - точка расположения размерной линии;

(command "dimangular" p1 p2 p3) - угловой размер, где p1 - точка на первом объекте; p2 - точка на втором объекте; p3 - точка расположения размерной линии.

Для создания размерного стиля использовались следующие команды:

(command "style" "имя стиля" "шрифт" "высота" эффекты) - создание и настройка нового текстового стиля (стиль назначается текущим);

(command "dimstyle" "s" "имя стиля" "y") - сохранение созданного стиля;

(command "dimstyle" "r" "имя стиля") - активизация стиля;

Использовалась функция (setvar “имя” значение). Она меняет значение соответствующей системной переменной.

В данном курсовом проекте была использована системная переменная DI MTXSTY - текстовый стиль для разеров.

4.6 Построение трехмерной модели детали

Для построения трехмерной модели детали использовались следующие команды:

(command "region" объекты "") - объединение объектов в регион;

(command "extrude" объекты "" высота "") - выдавливание объекта;

(command "subtract" p1 "" p2 "") - вычитание одного объекта из другого, где p1 - объект, из которого вычитают; p2 - объект, который вычитают;

(command "elev" высота "") - указание уровня;

(command "union" объекты "") - сложение объектов;

(command "shademode" опции "") - закрашивание детали.

Результаты работы программы

Построение двумерного изображения детали


Заключение

В данном курсовом проекте были поставлены следующие задачи:

изучить принципы создания параметрических моделей;

изучить язык программирования AutoLisp;

написать программу построения двумерного изображения детали с простановкой размеров;

написать программу построения трехмерного изображения детали.

В ходе данной работы все поставленные задачи были выполнены.

Практическую ценность проделанной работы вижу в том, что:

во-первых, мною был получен опыт создания параметрических моделей;

во-вторых, мной были изучены основы языка AutoLisp, что дает мне возможность для дальнейшего совершенствования своих знаний.

Список использованных источников

1. Райц Н.Р., Лимарева И.Г. Методические указания по выполнению курсового проекта по дисциплине "Компьютерная графика и геометрическое моделирование". - КарГТУ, 2005.

2. Воевода Е.П., Райц Н.Р., Лимарева Н.Г. Учебное пособие по работе в системе AutoCAD 2000. - КарГТУ, 2004.

3. Воевода Е.П., Райц Н.Р., Лимарева Н.Г. Геометрическое моделирование в системе AutoCAD 2000. - КарГТУ, 2006.

Приложение

(Листинг программы)

Построение двумерного изображения детали

(defun c: mod2d (/ d1 d2 d3 w1 w2 w3 r1 r2 r3)

(command "erase" "all" "")

(command "ortho" "on")

(setvar "cmdecho" 1)

(command "limits" "0,0" "210,297")

(command "grid" "10")

(command "snap" "1")

(command "osnap" "off")

(command "layer" "m" "osn" "l" "continuous" "osn" "lw" "0.3" "osn" "")

(command "layer" "m" "osev" "l" "center" "osev" "lw" "0.05" "osev" "")

(command "layer" "m" "vsp" "l" "continuous" "vsp" "lw" "0.05" "vsp" "")

(command "_. regen")

(command "view" "t")

(setvar "lwdisplay" 1)

(command "layer" "s" "osn" "")

(setq d1 0)

(while (or (< d1 35) (> d1 45))

(initget 6)

(setq d1 (getreal "Введите наибольший диаметр детали <40>"))

(if (= d1 nil) (setq d1 40)))

(setq d2 0)

(while (or (< d2 26) (> d2 37))

(initget 6)

(setq d2 (getreal " Введите средний диаметр детали <32>"))

(if (= d2 nil) (setq d2 32)))

(setq d3 0)

(while (or (< d3 15) (> d3 25))

(initget 6)

(setq d3 (getreal " Введите наименьший диаметр детали <20>"))

(if (= d3 nil) (setq d3 20)))

(setq w1 0)

(while (or (< w1 17) (> w1 27))

(initget 6)

(setq w1 (getreal " Введите максимальную ширину детали <22>"))

(if (= w1 nil) (setq w1 22)))

(setq w2 0)

(while (or (< w2 10) (> w2 20))

(initget 6)

(setq w2 (getreal " Введите расстояние от верха детали до конца среднего кольца <15> "))

(if (= w2 nil) (setq w2 15)))

(setq w3 0)

(while (or (< w3 5) (> w3 15))

(initget 6)

(setq w3 (getreal " Введите высоту верхнего кольца детали <10>"))

(if (= w3 nil) (setq w3 10)))

(setq r1 0)

(while (or (< r1 65) (> r1 75))

(initget 6)

(setq r1 (getreal "Введите диаметр, проходящий через центр фигуры и центр отверстий <70>"))

(if (= r1 nil) (setq r1 70)))

(setq r2 0)

(while (or (< r2 2) (> r2 12))

(initget 6)

(setq r2 (getreal " Введите диаметр маленьких отверстий детали <7>"))

(if (= r2 nil) (setq r2 7)))

(setq r3 0)

(while (or (< r3 3) (> r3 13))

(initget 6)

(setq r3 (getreal " Введите радиус сопряжения детали <8>"))

(if (= r3 nil) (setq r3 8)))

(setq x (list 150 150))

(command "layer" "s" "osev" "")

(setvar "ltscale" 4)

(setq h (+ (/ r1 2) (/ d1 2) r3 r3))

(setq c1 (/ d1 2))

(setq c2 (/ d2 2))

(setq c3 (/ d3 2))

(setq os1 (list ( - 150 c1 3) 150)

os2 (list (+ 150 c1 3) 150)

os3 (list ( - 150 (/ h 2) 33 w1) 150)

os4 (list ( - 150 (/ h 2) 27) 150)

os5 (list 150 (+ 150 (/ r1 2) r3 3))

os7 (list 150 ( - 150 c1 r3 3)))

(command "line" os1 os2 "")

(command "line" os3 os4 "")

(command "line" os5 x "")

(setq l1 (entlast))

(command "line" x os7 "")

(setq n1 (entlast))

(command "layer" "s" "osn" "")

(command "circle" x c1)

(command "circle" x c2)

(command "circle" x c3)

(command "layer" "s" "osev" "")

(command "circle" x (/ r1 2))

(command "layer" "s" "osn" "")

(setq b1 (list 150 (+ 150 (/ r1 2))))

(command "circle" b1 (/ r2 2))

(setq kr1 (entlast))

(command "circle" b1 r3)

(setq kr2 (entlast))

(command "array" l1 kr1 kr2 "" "P" x "2" "-120" "")

(setq mas2 (entlast))

(command "array" l1 kr1 kr2 "" "P" x "2" "120" "")

(setq mas (entlast))

(command "osnap" "tan")

(setq t1 (list ( - 150 r3) (cadr b1)))

(setq t2 (list ( - 150 (/ r1 2) (/ r3 2)) ( - 150 c2)))

(command "line" t1 t2 "")

(setq l2 (entlast))

(setq t3 (list (car t2) ( - (cadr t2) r2)))

(setq t4 (list (+ 150 (/ r1 2) (/ r3 2)) (cadr t3)))

(command "line" t3 t4 "")

(setq l3 (entlast))

(setq t5 (list (+ 150 r3) (cadr b1)))

(setq t6 (list (car t4) (cadr t2)))

(command "line" t5 t6 "")

(setq l4 (entlast))

(command "trim" l2 l3 l4 "" kr2 mas2 mas "")

(command "erase" mas "" "")

(command "fillet" "r" "8")

(command "fillet" l2 l3 "")

(setq arc1 (entlast))

(command "trim" l3 "" n1 "")

(command "lengthen" "de" "3" n1 "")

(command "lengthen" "de" (+ 40 h) l3 "")

(command "osnap" "int")

(setq ss (list (car t3) ( - (cadr t3) 2)))

(setq os8 (list (car os4) (cadr b1)))

(setq os9 (list ( - (car os8) 6 ( - w1 w2)) (cadr b1)))

(command "layer" "s" "osev" "")

(command "line" os8 os9 "")

(command "layer" "s" "osn" "")

(setq k1 (list ( - (car os8) 3) (+ 150 ( - (/ r1 2) (/ r2 2)))))

(setq k2 (list ( - (car k1) ( - w1 w2)) (cadr k1)))

(command "line" k1 k2 "")

(setq k3 (list (car k1) (+ 150 (/ r1 2) (/ r2 2))))

(setq k4 (list (car k2) (cadr k3)))

(command "line" k3 k4 "")

(setq k5 (list (car k1) (+ 150 c3)))

(setq k6 (list ( - (car k1) w1) (cadr k5)))

(command "line" k5 k6 "")

(setq k7 (list (car k1) ( - 150 c3)))

(setq k8 (list (car k6) (cadr k7)))

(command "line" k7 k8 "")

(setq a1 (list (car k1) ( - 150 (/ r1 2))))

(setq a2 (list (car k2) (cadr a1)))

(setq a3 (list (car k2) ( - 150 c1)))

(setq a4 (list ( - (car k1) ( - w1 w3)) (cadr a3)))

(setq a5 (list (car a4) (cadr t2)))

(setq a6 (list (car k6) (cadr t2)))

(setq a7 (list (car k6) (+ 150 c2)))