: box_colum n{
4. Chương trình minh hoạ
Để minh họa cho lợi ích của việc sử dụng các hàm tự tạo AutoLISP trong thiết kế các bản vẽ kỹ thuật bằng AutoCAD, em đã xây dựng lên hai hàm tự tạo để vẽ các chi tiết thường được dùng khi thiết kế các chi tiết máy và trong thiết kế cầu đường. Đó là:
¾ Lỗ Gujong có tác dụng đệm trong một số chi tiết máy. Nó có thể làm bằng cao su, thép hay các vật liệu tổng hợp khác
¾ Dầm chữ I bê tông dựứng lực trước trong cầu đường, bốn lỗ dùng để căng cáp thép dựứng lực (hay dùng trong dầm cầu)
4.1 Lỗ Gujong
• Mô tả cụ thể: Lỗ Gujong được dùng trong các bản thiết kế chi tiết máy, là một chi tiết nhỏ trong tổng thể một chi tiết máy hoàn chỉnh. Lỗ Gujong gồm bốn chi tiết con. Hình dạng như sau:
Hình 2. Chi tiết Gujong
z Các bước để vẽ bằng tay
¾ Vẽđường tròn lớn bên ngoài (dùng lệnh circle).
¾ Bắt dính tâm của đường tròn vừa vẽ, vẽđường tròn có kích thước nhỏ hơn (dùng lệnh Object Snap, circle).
¾ Tạo layer phụ tên là centre có kiểu đường là center, màu xanh
¾ Bắt dính tâm đường tròn đã vẽ, chọn layer hiện hành là centre và vẽ một đường tròn nằm nữa hai đường tròn vừa vẽ (dùng lệnh Object Snap, circle).
¾ Vẽđoạn thẳng nằm trên đường tròn có layer là centre (dùng lệnh Object Snap, line)
¾ Chọn layer chính, sau đó bắt dính giao điểm của đoạn thẳng vừa vẽ với đường tròn có layer la centre làm tâm của lỗ tròn nhỏ, vẽđường tròn nhỏ (kích thước phải nhỏ hơn khoảng cách hai đường tròn màu trắng, dùng lệnh Object Snap, circle).
em đã xây dựng lên một hàm với tên là holes.lsp để vẽ chi tiết này chỉ bằng một câu lệnh đơn giản.
(defun c:holes(/ bm cm sm layer C1 R1 D C num hole)
; khởi tạo giá trị cho các biến
(if (not (= (type R1) 'real)) (setq R1 100.0)
)
(if (not (= (type D) 'real)) (setq D 20.0)
)
(if (not (= (type num) 'int)) (setq num 10)
)
(if (not (= (type hole) 'real)) (setq hole 10.0)
)
(setq C1 (getpoint "\n nhap toa do tam"));chọn vị trí vẽ
;gọi hộp thoại và thiết lập các biến hệ thống,khởi tạo môi trường bản vẽ
(setq dcl (load_dialog "holes.dcl")) (if
(not (new_dialog "holes" dcl)) (exit) )
(setq bm (getvar "blipmode") cm (getvar "cmdecho") sm (getvar "osmode") layer (getvar "clayer") )
(setvar "blipmode" 0) (setvar "cmdecho" 0) (set_tile "Bkinh" (rtos R1)) (set_tile "doday" (rtos D)) (set_tile "numholes" (itoa num)) (set_tile "holedia" (rtos hole))
;định nghĩa hàm gán giá trị các biến cho hộp thoại
(defun setall1()
(setq R1 (atof (get_tile "Bkinh")) D (atof (get_tile "doday")) num (atoi (get_tile "numholes")) hole (atof (get_tile "holedia")) )
)
(action_tile "cancel" "(done_dialog) (exit)") (action_tile "accept" "(setall1) (done_dialog)") (start_dialog)
(unload_dialog dcl)
(defun Degrees2Radians(numberOfDegrees) (* pi (/ numberOfDegrees 180.0))
)
(if (> D hole ) ; kiểm tra thông số nhập vào
(progn ;vẽ hai đường tròn chính (setq C (- (/ R1 2) (/ D 2))) (command "circle" C1 (/ R1 2)) (command "circle" C1 (- (/ R1 2) D)) (setvar "osmode" 0) (setq ra (/ 180 num)) ;xác định tọa độ các điểm để vẽ lỗ tròn nhỏ và đoạn thẳng nằm trên đường tròn phụ
(setq pt1 (polar C1 (Degrees2Radians ra) C )
pt2 (polar pt1 (Degrees2Radians (+ 180 ra)) hole) pt3 (polar pt2 (Degrees2Radians ra) (* hole 2)) )
; vẽ lỗ tròn nhỏ và đoạn thẳng nằm trên đường tròn phụ
(command "circle" pt1 (/ hole 2)
"array" "L" "" "P" C1 num "360" "Y"
"layer" "m" "centre" "c" "green" "" "l" "center" "" "" "circle" C1 C
"line" pt2 pt3 ""
"array" "L" "" "P" C1 num "360" "Y" )
)
(alert "Duong kinh lo vuot qua lon!") )
;sau khi vẽ xong thì trở về môi trường ban đầu
(setvar "blipmode" bm) (setvar "cmdecho" cm) (setvar "osmode" sm) (setvar "clayer" layer) )
Sau khi biên dịch và kiểm tra lỗi, ta lưu file holes.lsp và file holes.dcl (là hàm tạo hộp thoại ) vào trong thư mục support của AutoCAD. Cuối cùng, để vẽ chi tiết trên ta làm như sau:
¾ Gõ lệnh appload (hoặc vào tool/load application) chọn file holes.lsp.
¾ Gõ holes tại cửa sổ command của autoCAD, điền các thông số chi tiết, nhấn nút OK.
Hình3. Hộp thoại vẽ chi tiết Gujong Kết quả ta có một chi tiết kỹ thuật như hình 2
4.2 Dầm chữ I
• Mô tả cụ thể: chi tiết dầm chữ I dùng trong các bản vẽ thiết kế cầu đường, gồm hai chi tiết con tạo thành gồm các đoạn thẳng và các hình tròn nhỏ.
Hình 4. Chi tiết dầm chữ I
z Các bước để vẽ bằng tay: vì chi tiết này có tính đối xứng nên ta chỉ cần vẽ nửa chi tiết sau đó sẽ dùng lệnh để lấy đối xứng vẽ nữa chi tiết còn lại.
¾ Dùng lệnh line để vẽ nửa thân chữ I hoặc dùng lệnh Rec để vẽ hai hình chữ nhật giao nhau sau đó sẽ dùng lệnh trim để cắt xén.
¾ Dùng lệnh mirror để vẽ nữa chi tiết còn lại
¾ Vẽ lỗ tròn
¾ Dùng lệnh array để vẽ nốt 3 lỗ tròn còn lại
• Tương tự như chi tiết gujong, ta sẽ xây dựng hàm chu_i.lsp và hàm chu_i.dcl để vẽ chi tiết. Sau đó lưu hai file này vào thư mục support của AutoCAD.
(defun c:chu_i(/ bm cm sm rong dai day cao dkinh kcach P1 P2 P3 P4 P5)
;khởi tạo giá trị ban đầu
(setq rong 15.0) )
(if (not (= (type cao) 'real)) (setq cao 30.0)
)
(if (not (= (type dkinh) 'real)) (setq dkinh 5.0)
)
(if (not (= (type kcach) 'real)) (setq kcach 18.0)
)
(if (not (= (type dai) 'real)) (setq dai 40.0)
)
(if (not (= (type day) 'real)) (setq day 10.0)
)
(setq P1 (getpoint "\n nhap toa do tam"));vị trí vẽ chi tiết
;thiết lập hộp thoại và môi trường vẽ
(setq dcl (load_dialog "chu_i.dcl")) (if
(not (new_dialog "chu_i" dcl)) (exit) )
(setq bm (getvar "blipmode") cm (getvar "cmdecho") sm (getvar "osmode") )
(setvar "blipmode" 0) (setvar "cmdecho" 0)
(set_tile "chieurong" (rtos rong)) (set_tile "chieucao" (rtos cao)) (set_tile "duongkinh" (rtos dkinh)) (set_tile "khoangcach" (rtos kcach)) (set_tile "chieudai" (rtos dai)) (set_tile "doday" (rtos day))
;gán giá trị biến cho hộp thoại
(defun setall()
(setq rong (atof (get_tile "chieurong")) cao (atof (get_tile "chieucao")) dkinh (atof (get_tile "duongkinh")) kcach (atof (get_tile "khoangcach")) dai (atof (get_tile "chieudai")) day (atof (get_tile "doday")) )
(action_tile "accept" "(setall) (done_dialog)") (start_dialog)
(unload_dialog dcl)
(if (>= day cao)(alert "\n do day phai nho hon chieu cao") (progn
(if (>= dkinh rong) (alert "\n Dkinh phai nho hon do rong dau chu I") (progn
(if (>= dkinh day) (alert "\n Dkinh phai nho hon do day") (progn
(if (>= kcach cao)(alert "\n kcach phai nho hon chieu cao") ( progn
;xác định tọa độ các điểm để vẽ (setq P2 (polar P1 0 (/ dai 2))
P3 (polar P2 (- (/ pi 2)) (/ (- cao day) 2)) P4 (polar P3 0 rong) P5 (polar P4 (/ pi 2) (/ cao 2)) );end of setq ;vẽ chi tiết (command "redraw" "Pline" P1 P2 P3 P4 P5 "" "select" "L" "" "mirror" "P" "" P1 (polar P1 (/ pi 2) 1) "N" "mirror" "P" "L" "" P5 (polar P5 0 1) "N"
"circle" (list (- (car P5) (/ rong 2)) (- (cadr P5) (/ kcach 2))) "d" kinh "array" "L" "" "R" 2 2 kcach (-(+ rong dai))
) );end of progn );end of if );end progn );end of if );end ptogn );end of if );end progn );end of if
;thoát khỏi môi trường vẽ, trở về môi trường vẽ ban đầu
(setvar "blipmode" bm) (setvar "cmdecho" cm) (setvar "osmode" sm) )
• Sau khi biên dịch và kiểm tra lỗi, ta lưu file chu_i.lsp và file chu_i.dcl (là hàm tạo hộp thoại ) vào trong thư mục support của AutoCAD. Cuối cùng, để vẽ chi tiết trên ta làm như sau:
¾ Gõ lệnh appload (hoặc vào tools/load application) chọn file chu_i.lsp
¾ Gõ chu_i tại cửa sổ command của autoCAD, nhập các thông số của chi tiết, ấn OK
Hình 5.Hộp thoại vẽ chi tiết dầm chữ I Kết quả ta sẽ có được một chi tiết như hình 4.
5 Kết luận
Autolisp là một ngôn ngữ lập trình đơn giản, dễ tiếp cận và hiệu quả công việc nó đem lại là đáng kể. Những đoạn chương trình Autolisp đơn giản nhưng có thể giảm được thời gian đáng kể trong việc hoàn thiện các bản vẽ. Một chương trình Autolisp thành công không phải là chương trình có qui mô lớn đến vài chục ngàn dòng lệnh mà đó là chương hiệu quả, giải quyết được các yêu cầu của người thiết kế và tiết kiệm được thời gian thực hiện công việc.
Hiện nay, AutoLISP không được sử dụng nhiều do sự ra đời của Visual LISP đã khắc phục được những nhược điểm của AutoLISP nhưng AutoLISP vẫn được tích hợp trong các bản Realease của AutoCAD nhằm giúp cho người dùng lần đầu tiên tiếp xúc với AutoLISP có những kiến thức cơ bản nhất về ngôn ngữ này. Trên cơ sởđã tìm hiểu và nghiên cứu kỹ AutoLISP, người dùng AutoCAD có thể học và sử dụng thành thạo Visual LISP, đặc biệt là đối với những người không chuyên về lập trình.
Đồ án đã tìm hiểu được những nét cơ bản về ngôn ngữ AutoLISP và lập trình trong AutoCAD như các hàm cơ bản trong AutoLISP, cách xây dựng hàm tự tạo, các biến, các kiểu dữ liệu... Đồ án cũng đã xây dựng hai hàm vẽ hai chi tiết dùng trong các bản vẽ thiết kế chi tiết máy và xây dựng cầu đường là chi tiết Gujong và dầm chữ I. Trong thời gian tiếp theo, đồ án sẽ tiếp tục tìm hiểu về cơ sở dữ liệu và cách truy nhập thực thể trong AutoCAD để từđó có thể xây dựng lên một chương trình có sử dụng cơ sở dữ liệu vừa giúp người dùng dễ sử dụng vừa giúp người lập trình dễ dàng chỉnh sửa khi có thay đổi.
Hải Phòng, ngày……tháng 7 năm 2007 Sinh viên