Работа с графическими объектами AutoCAD с использованием языка AutoLISP. Учебно-методическое пособие
.pdf
14 |
15 |
16 |
17 |
18 |
41 |
19 |
20 |
21 |
22 |
23 |
42 |
24 |
25 |
43
Лабораторная работа №6 Создание пространственной параметрической модели
конструкции с использованием операций циклического повторения.
Работа с пользовательскими функциями
; получение точки симметрично оси Y, ; проходящей через заданную точку
(defun sym_coor (pt_axis pt / dx x x_axis)
(setq |
x_axis (car pt_axis) |
|
||
x |
(car pt) |
|
||
dx |
(- x x_axis) |
|
||
) |
|
|
|
|
(list (- x_axis dx) (cadr pt)) |
|
|||
) |
|
|
|
|
(defun c:sym () |
|
|
||
(setq |
pt_ins |
(getpoint "\nТочка вставки:") |
||
l1 |
(getdist pt_ins "\nL1=") |
|||
l_05 |
(/ l1 2) |
|
||
l2 |
(getdist pt_ins "\nL2=") |
|||
h |
(getdist pt_ins "\nH=") |
|||
x_ins |
(car pt_ins) |
|
||
y_ins |
(cadr pt_ins) |
|
||
pt1 |
(list (+ x_ins l_05) |
y_ins) |
||
pt2 |
(list (+ x_ins l_05 l2) (+ y_ins h) ) |
|||
pt1_sym (sym_coor pt_ins pt1) |
||||
pt2_sym |
(sym_coor pt_ins |
pt2) |
||
) |
|
|
|
|
(setvar "OSMODE" 0)
(command "_PLINE" pt1 pt2 pt2_sym pt1_sym "_C")
)
Рисование проекции шлицевой головки шурупа
(defun shlic (pt r alfa / pt1 pt2) (setq pt1 (polar pt alfa r)
44
pt2 (polar pt (+ alfa pi) r)
)
(command "_circle" pt r) (command "_line" pt1 pt2 "")
)
Функция рисования фасонки
(defun draw_fas ( ptc h l1 l2 / xc yc l1_05 l2_05 pt1 pt2 pt3 pt4)
(setq xc |
(car ptc) |
|
|
|
yc |
(cadr ptc) |
|
|
|
l1_05 |
(/ |
l1 2) |
|
|
l2_05 |
(/ |
l2 2) |
|
|
pt1 |
(list (- xc l1_05) |
yc) |
||
pt2 |
(list (+ xc l1_05) |
yc) |
||
pt3 |
(list (- xc l2_05) |
(+ |
yc h)) |
|
pt4 |
(list (+ xc l2_05) |
(+ |
yc h)) |
|
)
(command "_SOLID" pt1 pt2 pt3 pt4 "")
)
Рисование прямоугольной фермы c фасонками в узлах.
(defun c:f_orthof ( / )
(setq osmode_old (getvar "OSMODE")
pt_ins (getpoint |
"\nУкажите точку вставки : ") |
||
hf |
(getdist |
pt_ins "\nЗадайте высоту фермы : ") |
|
lf |
(getdist |
pt_ins "\nЗадайте пролёт фермы : ") |
|
n_ots (getint |
|
"\nЗадайте число отсеков: ") |
|
|
|
|
45 |
dx |
(/ lf n_ots) |
x_ins |
(car pt_ins) |
y_low |
(cadr pt_ins) |
y_up |
(+ y_low hf) |
x_cur x_ins |
|
h_fas |
(/ hf 10.0) |
l1_fas |
(* h_fas 0.8) |
l2_fas |
(* h_fas 0.4) |
)
(setvar "OSMODE" 0)
; пояса
(repeat n_ots
(setq pt1_low (list x_cur y_low) pt1_up (list x_cur y_up) x_cur (+ x_cur dx) pt2_low (list x_cur y_low) pt2_up (list x_cur y_up)
)
(command "_LINE" pt1_low pt2_low "") (command "_LINE" pt1_up pt2_up "")
) ; end repeat
; стойки и фасонки
(setq x_cur x_ins ) (repeat (+ n_ots 1)
(setq pt1 (list x_cur y_low) pt2 (list x_cur y_up)
)
(command "_LINE" pt1 pt2 "" )
(draw_fas |
pt1 |
h_fas l1_fas l2_fas) |
(draw_fas |
pt2 |
(* -1.0 h_fas) l1_fas l2_fas) |
(setq x_cur (+ x_cur dx)) ) ; end repeat
(setvar "OSMODE" osmode_old ) (princ)
46
)
Задание: Рисование пространственной фермы c помощью функций. Вариант задания берем из предыдущей лабораторной работы.
Функция рисования поясов
(defun line_poys ( pt1 pt2 a b w / l ang ptc1 ptc2 ptc3 ptc4) (setq l (distance pt1 pt2)
ptc1 (list (* -0.5 a) (* -0.5 b) ) ptc2 (list (* 0.5 a) (* -0.5 b) ) ptc3 (list (* 0.5 a) (* 0.5 b) ) ptc4 (list (* -0.5 a) (* 0.5 b) )
)
(command "_UCS" "_ZAXIS" pt1 pt2)
(command "_POLYSOLID" "_H" l "_W" w ptc1 ptc2 ptc3 ptc4 "_C")
(command "_UCS" "_P")
)
Функция рисования стоек
(defun line_stoyki ( pt1 pt2 r / l) (setq l (distance pt1 pt2))
(command "_UCS" "_ZAXIS" pt1 pt2) (command "_CYLINDER" '(0 0 ) r l) (command "_UCS" "_P")
)
Рисование фермы
(command "_UCS" "_W" pt_ins)
; сохранение тек. режима объект. прив.
(setq osmode_old (getvar "OSMODE")
pt_ins (getpoint |
"\nУкажите точку вставки : ") |
|
hf |
8 ;(getdist |
pt_ins "\nЗадайте высоту фермы : ") |
lf |
40 ;(getdist |
pt_ins "\nЗадайте пролёт фермы : ") |
bf |
6 |
|
|
|
47 |
n_ots |
10 ;(getint |
"\nЗадайте число отсеков: ") |
al |
0.6 |
|
bl |
0.5 |
|
wl |
0.02 |
|
au |
0.8 |
|
bu |
0.6 |
|
wu |
0.03 |
|
r |
0.15 |
|
dx |
(/ lf n_ots) |
|
) |
|
|
(command "_UCS" "_O" pt_ins) (command "_UCS" "_X" 90.0) (setq
x_ins 0.0 y_low 0.0 y_up hf x_cur x_ins
)
(setvar "OSMODE" 0) ; пояса
(repeat n_ots
(setq pt1_low (list x_cur y_low 0) pt1_up (list x_cur y_up 0) pt1_lowz (list x_cur y_low bf) pt1_upz (list x_cur y_up bf) x_cur (+ x_cur dx)
pt2_low (list x_cur y_low 0) pt2_up (list x_cur y_up 0) pt2_lowz (list x_cur y_low bf) pt2_upz (list x_cur y_up bf)
)
(command "_color" "_RED") (line_poys pt1_low pt2_low al bl wl) (line_poys pt1_up pt2_up au bu wu)
48
(line_poys |
pt1_lowz pt2_lowz |
al bl wl) |
|
(line_poys |
pt1_upz pt2_upz |
au bu wu) |
|
; ветровые раскосы |
|
||
(command "_color" "_GREEN") |
|||
(line_stoyki |
pt1_low pt2_lowz r) |
||
(line_stoyki |
pt2_low pt1_lowz r) |
||
(line_stoyki |
pt1_up pt2_upz r) |
||
(line_stoyki |
pt2_up pt1_upz r) |
||
) ; end repeat |
|
|
|
; стойки |
|
|
|
(setq x_cur |
x_ins ) |
|
|
(repeat (+ n_ots 1) |
|
||
(setq pt1 |
|
(list x_cur y_low 0) |
|
pt2 |
(list x_cur y_up 0) |
|
|
pt1z |
(list x_cur y_low bf) |
|
|
pt2z |
(list x_cur y_up bf) |
|
|
x_cur |
(+ x_cur dx) |
|
|
)
(command "_color" "_BLUE") (line_stoyki pt1 pt2 r) (line_stoyki pt1z pt2z r) (command "_color" "_GREEN") (line_stoyki pt1 pt1z r) (line_stoyki pt2 pt2z r)
) ;end repeat
(setvar "OSMODE" osmode_old ) (command "_UCS" "_W" pt_ins) (princ)
49
Задания к лабораторной работе № 6
Поперечные сечения элементов фермы
50
