1. Функция присваивания

(setq переменная 1 (выражение 1)

переменная 2 (выражение 2) …

переменная N (выражение N))

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

2. Списки - основные структуры данных, используемые в программировании на языке AutoLisp. Чаще всего списки используются для определения координат точек.

Списки создаются функцией 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)))

(setq a8 (list (car a4) (cadr a7)))

(setq a9 (list (car a4) (+ 150 c1)))

(setq a10 (list (car k2) (cadr a9)))

(setq a11 (list (car k2) ( - (cadr os5) 3)))

(setq a12 (list (car k1) (cadr a11)))

(command "line" a1 a2 "")

(setq l5 (entlast))

(command "line" a2 a3 "")

(setq l6 (entlast))

(command "line" a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 "")

(command "line" a12 a1 "")

(setq l7 (entlast))

(command "trim" l7 l6 arc1 "" l3 "")

(command "trim" l7 l3 "" l7 l6"")

(command "erase" l5 "" "")

(command "trim" arc1 l7 "" ss "")

(setq m1 (list ( - (car os4) 4) (+ (cadr k1) 1)))

(setq m2 (list (car m1) (+ (cadr k3) 1)))

(setq m3 (list (car m1) ( - (cadr k7) 1)))

(command "layer" "s" "vsp" "")

(command "bhatch" "p" "ansi31" "0.5" "0" m1 "")

(command "bhatch" "p" "ansi31" "0.5" "0" m2 "")

(command "bhatch" "p" "ansi31" "0.5" "0" m3 "")

(command "style" "Марьяна" "isocpeur" "2.5" "1" "15" "n" "n" "y")

(setvar "dimtxsty" "Марьяна")

(command "dimstyle" "s" "Марьяна" "y")

(command "dimstyle" "r" "Марьяна")

(setq raz1 (list ( - 150 (/ h 2) w1 40) 150))

(setq raz2 (list ( - (car raz1) 7) 150))

(setq raz3 (list ( - (car raz1) 14) 150))

(setq raz4 (list (+ (car raz1) 10) ( - (cadr raz1) c2 10)))

(setq raz5 (list ( - 150 (/ h 2) ( - w1 w2) 40) ( - 150 c2 17)))

(setq raz6 (list (car raz4) ( - (cadr raz5) 7)))

(setq raz7 (list 150 ( - (cadr a11) r3)))

(setq raz8 (list (+ 150 c3) (cadr k5)))

(setq raz9 (list 145 (+ (cadr raz7) r3)))

(setq raz10 (list ( - 150 c3) (cadr a11)))

(setq raz11 (list 150 (+ 150 (/ r1 3))))

(setq raz12 (list (car t3) (cadr t3)))

(setq raz13 (list ( - 150 (/ r1 2) r3 10) 150))

(setq raz14 (list 150 (+ (cadr b1) (/ r2 2))))

(setq raz15 (list (car raz8) (+ (cadr b1) r3)))

(command "dimlinear" k7 k5 "m" "%%c<>" raz1)

(setq p_raz9 (osnap raz9 "nea"))

(setq p_raz14 (osnap raz14 "tan"))

(command "dimlinear" a5 a8 "m" "%%c<>" raz2)

(command "dimlinear" a3 a10 "m" "%%c<>" raz3)

(command "dimlinear" a5 k8 raz4)

(command "dimlinear" a3 k8 raz5)

(command "dimlinear" k7 k8 raz6)

(command "dimdiameter" raz7 raz8)

(command "dimradius" p_raz9 raz10)

(command "dimangular" raz11 raz12 raz13)

(command "dimradius" p_raz14 raz15)

(command "line" "20,5" "205,5" "")

(command "line" "205,5" "205,292" "")

(command "line" "205,292" "20,292" "")

(command "line" "20,292" "20,5" "")

(command "line" "20,60" "205,60" "")

(command "_. zoom" "e")

)


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

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

(command "erase" "all" "")

(setvar "cmdecho" 1)

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

(command "snap" "1")

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

(command "_. regen")

(command "view" "t")

(setvar "lwdisplay" 1)

(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))

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

(setq c1 (/ d1 2))

(setq c2 (/ d2 2))

(setq c3 (/ d3 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" kr2 "" "P" x "2" "-120" "")

(setq mas2 (entlast))

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

(setq mas22 (entlast))

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

(setq mas (entlast))

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

(setq mass (entlast))

(command "osnap" "tan")

(setq t1 (list ( - 150 r3) (+ 150 (/ r1 2))))

(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) (+ 150 (/ r1 2))))

(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" r3)

(command "fillet" l2 l3)

(setq arc1 (entlast))

(command "circle" x c3)

(setq rad3 (entlast))

(entdel kr1)

(entdel mass)

(entdel mas22)

(entdel rad3)

(setq h1 ( - w1 w2))

(command "region" "all" "")

(command "extrude" "all" "" h1 "")

(setq reg1 (entlast))

(entdel kr1)

(command "extrude" kr1 "" h1 "")

(setq en1 (entlast))

(entdel mass)

(command "extrude" mass "" h1 "")

(setq en2 (entlast))

(entdel mas22)

(command "extrude" mas22 "" h1 "")

(setq en3 (entlast))

(command "subtract" reg1 "" en1 en2 en3 "")

(command "elev" h1 "")

(command "circle" x c1)

(setq rad1 (entlast))

(setq h2 ( - w2 w3))

(command "extrude" rad1 "" h2 "")

(setq kol1 (entlast))

(command "elev" (+ h1 h2)"")

(command "circle" x c2)

(setq rad2 (entlast))

(command "extrude" rad2 "" w3 "")

(setq kol2 (entlast))

(command "union" reg1 kol1 kol2 "")

(setq reg2 (entlast))

(command "elev" "0" "")

(entdel rad3)

(command "extrude" rad3 "" w1 "")

(setq cil (entlast))

(command "subtract" reg2 "" cil "")

(command "shademode" "F" "")

(command "_. zoom" "e")

)


Информация о работе «Построение параметрической модели детали в среде программирования»
Раздел: Информатика, программирование
Количество знаков с пробелами: 34239
Количество таблиц: 1
Количество изображений: 9

Похожие работы

Скачать
60038
1
11

... и сам SolidWorks. Аналогичным образом (то есть без конвертирования данных) может выполняться подготовка управляющих программ для обработки созданных в SolidWorks моделей на оборудовании с ЧПУ. 3. Новые возможности программного комплекса SolidWorks 2010 25 февраля 2010 года в калифорнийском Анахайме прошел 11-й по счету ежегодный международный форум SolidWorks World 2010. Сразу следует ...

Скачать
231244
5
6

... По теореме 9.3 в силу результатов шагов 3 и 8. (Шаг 10). Имеет место свойство (9.4) по теореме 9.5 в силу результатов шагов 1 и 9. Литература к лекции 9. 9.1. С.А. Абрамов. Элементы программирования. - М.: Наука, 1982. С. 85-94. 9.2. М. Зелковец, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. - М.: Мир, 1982. С. 98-105. Лекция 10. ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНОГО ...

Скачать
169417
2
16

... ряде прикладных программ. Сферы применения Лиспа многообразны: наука и промышленность, образование и медицина, от декодирования генома человека до системы проектирования авиалайнеров. 3. Технологическая реализация системы подготовки обработки детали станка с ЧПУ 3.1 Описание кодов программного модуля Любой проект в Delphi состоит из нескольких частей (набора файлов, каждый из которых ...

Скачать
369637
0
0

... мероприятия по обеспечению однородности выпускаемой продукции. Все эти мероприятия можно объединить в четыре группы: 1. совершенствование технологии производства; 2. автоматизация производства; 3. технологические (тренировочные) прогоны; 4. статистическое регулирование качества продукции. 2.10. Проектирование технологических процессов с использованием средств ...

0 комментариев


Наверх