Trong quá trình vẽ một bản vẽ kỹ thuật hay vẽ nhiêu bản vẽ thì sẽ có nhiều hình vẽ giống nhau. Trong quá trình vẽ người vẽ có thể dùng các kỹ thuật sao chép như Copy/Paste, Array, Mirror . để không phải vẽ lại nhiều lần, nhưng cách đó thường mất nhiều thời gian và có thể gây sai sót, nhầm lẫn.
26 trang |
Chia sẻ: vietpd | Lượt xem: 1434 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tạo dựng các khối block, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
I TẠO DỰNG CÁC KHỐI BLOCK
Trong quá trình vẽ một bản vẽ kỹ thuật hay vẽ nhiêu bản vẽ thì sẽ có nhiều hình vẽ giống nhau. Trong quá trình vẽ người vẽ có thể dùng các kỹ thuật sao chép như Copy/Paste, Array, Mirror….. để không phải vẽ lại nhiều lần, nhưng cách đó thường mất nhiều thời gian và có thể gây sai sót, nhầm lẫn.
Để khắc phục được vấn đề này, trong AutoCAD đưa ra khái niệm Block (nhóm các đối tượng liên kết thành một đối tượng). Việc Insert các Block cho phép rút ngắn đáng kể thời gian, tăng cao hiệu quả và độ chính xác khi vẽ.
Để tạo một block : đầu tiên ta vẽ block cần tạo bằng các lệnh thông thường sau đó vào Draw – block – make
Sau đó ta được hộp thoại:
từ hộp thoại đặt tên cho block, chọn diểm chèn và đối tượng làm block.
Ta được các block sau:
a.Mặt cắt dầm:
b. Tạo block về mặt cắt cột BTCT
Ta tạo hai loại cột : Cột tròn và cột chữ nhật
Có dạng
Và mặt cắt cột chữ nhật có dạng
Để đảm bảo phục vụ cho nhiều chi tiết nên không ghi kích thước trong mặt cắt
Block về con tiện
d. Block về hoa sắt ban công
e. Block về cấu tạo và kiến trúc của mặt cắt ngang ban công
f. Block về kết cấu sênô
3. Từ các block in ra bản vẽ các block ứng với từng tỷ lệ trong không gian giấy vẽ
Từ các block trên ghi ra file dang *.dwg. Để tổ chức in ra các block ta chuyển sang không gian giấy vẽ dùng khung nhìn động Floadting viewport để định dạng lại các đối tượng sau đó tiến hành in bản vẽ
4. Tổ chức các block thành một thư viện và viết mênu sử dụng
Từ các block đã có ta tiến hành các thao tác tạo lập thư viện block như sau
Dùng lệnh Zoom ext để tràn hết màn hình
Dùng lệnh mslide để chụp các đối tượng là block lưu file lại dạng *.sld
Đưa các file *.dwg và *.sld vào thư mục surport của autocad và tiến hành viết mênu sử dụng lưu file dưới dạng *.mnu. Ở đây ta sử dụng file acad.mnu của autocad làm file Thu_vien_block cơ bản, sau đó ta thêm phần tạo menu “ Thuvienblock” và các mêenu con tương ứng vào. Dưới đây là phần chương trinh ta chèn thêm vào:
Phần tạo menu “ thuvienblock” với các menu images tương ứng.
***POP12
**[Thu vien block]
[Cua]$I=image_cua $I=*
[Do dung]$I=image_dodung $I=*
[Ve sinh]$I=image_vs $I=*
[Oto,xe may]$I=image_otxm $I=*
[Nguoi]$I=image_nn $I=*
[Con tien]$I=image_ct $I=*
[Cay]$I=image_cay $I=*
[Bac thang]$I=image_bacthang $I=*
[Mat cat dam BTCT]$I=image_btct $I=*
[Hoa sat]$I=image_hoasat $I=*
[Mat Cat Cot]$I=image_MCcot $I=*
[Ban Cong]$I=image_Bancong $I=*
[Se No]$I=image_Seno $I=*
Chương trình tạo các menu images :(chèn vào phần “ ***images” của file nguồn
**image_cua
[Cac loai cua]
[mb-cua1]^C^Cinsert;mb-cua1;1.0;1.0;0.0
[mb-cua2]^C^Cinsert;mb-cua2;1.0;1.0;0.0
[mb-cua3]^C^Cinsert;mb-cua3;1.0;1.0;0.0
[md-cua1]^C^Cinsert;md-cua1;1.0;1.0;0.0
[md-cua2]^C^Cinsert;md-cua2;1.0;1.0;0.0
[md-cua3]^C^Cinsert;md-cua3;1.0;1.0;0.0
[md-cua4]^C^Cinsert;md-cua4;1.0;1.0;0.0
[md-cua5]^C^Cinsert;md-cua5;1.0;1.0;0.0
[md-cua6]^C^Cinsert;md-cua6;1.0;1.0;0.0
**image_dodung
[Do dung]
[banghemy]^C^Cinsert;banghemy;1.0;1.0;0.0
[banuong]^C^Cinsert;banuong;1.0;1.0;0.0
[banghebt]^C^Cinsert;banghebt;1.0;1.0;0.0
[bepdai]^C^Cinsert;bepdai;1.0;1.0;0.0
[bepga]^C^Cinsert;bepga;1.0;1.0;0.0
[ghesl]^C^Cinsert;ghesl;1.0;1.0;0.0
[giuong11]^C^Cinsert;giuong11;1.0;1.0;0.0
[giuongngu]^C^Cinsert;giuongngu;1.0;1.0;0.0
[pan]^C^Cinsert;pan;1.0;1.0;0.0
[giuongngu]^C^Cinsert;giuongngu;1.0;1.0;0.0
[pkanh]^C^Cinsert;pkanh;1.0;1.0;0.0
[pkhach]^C^Cinsert;pkhach;1.0;1.0;0.0
**image_vs
[Ve sinh]
[mb-vs1]^C^Cinsert;mb-vs1;1.0;1.0;0.0
[mb-vs2]^C^Cinsert;mb-vs2;1.0;1.0;0.0
[md-vs1]^C^Cinsert;md-vs1;1.0;1.0;0.0
[md-vs2]^C^Cinsert;md-vs2;1.0;1.0;0.0
[btam]^C^Cinsert;btam;1.0;1.0;0.0
[brmat]^C^Cinsert;brmat;1.0;1.0;0.0
**image_otxm
[Oto xe may]
[oto1]^C^Cinsert;oto1;1.0;1.0;0.0
[oto2]^C^Cinsert;oto2;1.0;1.0;0.0
[oto]^C^Cinsert;oto;1.0;1.0;0.0
[oto4]^C^Cinsert;oto4;1.0;1.0;0.0
[oto5]^C^Cinsert;oto5;1.0;1.0;0.0
[oto6]^C^Cinsert;oto6;1.0;1.0;0.0
[XEMAYa]^C^Cinsert;XEMAYa;1.0;1.0;0.0
**image_nn
[Nguoi]
[nn1]^C^Cinsert;nn1;1.0;1.0;0.0
[nn2]^C^Cinsert;nn2;1.0;1.0;0.0
[nn3]^C^Cinsert;nn3;1.0;1.0;0.0
[nn4]^C^Cinsert;nn4;1.0;1.0;0.0
[nn5]^C^Cinsert;nn5;1.0;1.0;0.0
**image_ct
[Con tien]
[contien1]^C^Cinsert;contien1;1.0;1.0;0.0
[contien2]^C^Cinsert;contien2;1.0;1.0;0.0
[contien3]^C^Cinsert;contien3;1.0;1.0;0.0
[contien4]^C^Cinsert;contien4;1.0;1.0;0.0
**image_cay
[Cay]
[cay1]^C^Cinsert;cay1;1.0;1.0;0.0
[cay2]^C^Cinsert;cay2;1.0;1.0;0.0
[cay3]^C^Cinsert;cay3;1.0;1.0;0.0
[cay4]^C^Cinsert;cay4;1.0;1.0;0.0
[cay5]^C^Cinsert;cay5;1.0;1.0;0.0
[cay6]^C^Cinsert;cay6;1.0;1.0;0.0
[cay7]^C^Cinsert;cay7;1.0;1.0;0.0
[cay8]^C^Cinsert;cay8;1.0;1.0;0.0
[cay9]^C^Cinsert;cay9;1.0;1.0;0.0
[cay10]^C^Cinsert;cay10;1.0;1.0;0.0
**image_bacthang
[Bac thang]
[bacthang1]^C^Cinsert;bacthang1;1.0;1.0;0.0
[bacthang2]^C^Cinsert;bacthang2;1.0;1.0;0.0
[bacthang3]^C^Cinsert;bacthang3;1.0;1.0;0.0
[bacthang4]^C^Cinsert;bacthang4;1.0;1.0;0.0
**image_btct
[Dam be tong cot thep]
[matbangcot1]^C^Cinsert;matbangcot1;1.0;1.0;0.0
[matbangcot2]^C^Cinsert;matbangcot2;1.0;1.0;0.0
[matcatdam1]^C^Cinsert;matdamcot1;1.0;1.0;0.0
[matcatdam2]^C^Cinsert;matdamcot2;1.0;1.0;0.0
[matdungcot1]^C^Cinsert;matdungcot1;1.0;1.0;0.0
[matdungcot2]^C^Cinsert;matdungcot2;1.0;1.0;0.0
[matcatbtct]^C^Cinsert;matcatbtct;1.0;1.0;0.0
**image_hoasat
[Hoa sat]
[hoasat1]^C^Cinsert;hoasat1;1.0;1.0;0.0
[hoasat2]^C^Cinsert;hoasat2;1.0;1.0;0.0
[hoasat3]^C^Cinsert;hoasat3;1.0;1.0;0.0
[hoasat4]^C^Cinsert;hoasat4;1.0;1.0;0.0
**image_MCcot
[Mat cat cot]
[cottron]^C^Cinsert;Cottron;1.0;1.0;0.0
[Cotcn]^C^Cinsert;Cotcn;1.0;1.0;0.0
**image_Seno
[Se No]
[Seno]^C^Cinsert;Seno;1.0;1.0;0.0
**image_Bancong
[Ban Cong]
[Bancong]^C^Cinsert;Bancong;1.0;1.0;0.0
Sau đó vào chương trình AutoCAD, tại Menu Tools à Customize à Menus…
Hộp thoại sau sẽ xuất hiện, tại đây ta load vào file Block.mnu vừa tạo.
Hộp thoại menu bar cho ta biết các thanh menu có trong thanh menu
Do ta tận dụng file acad.mnu nên ta có đầy đủ các menu bar của cad ngoai ra ta còn tạo thêm cho mình một menu bar mới đó là menu “ Thuvienblock” với menu này giúp ta rất tiên lợi cho việc chèn block.
Sau khi load se cho ta hộp thoại:
Nếu chọn yes ta sẽ có thanh menu mới còn no thì ta vẫn ở thanh menu cũ.
Menu mới có dạng:
Các Menu con thành phần như sau:
PHẦN II: LẬP TRÌNH TRONG AUTOCAD
Tuỳ biến bản vẽ giúp người hoạ viên tăng hiệu quả, hiệu suất và tốc độ khi vẽ trong môi trường AutoCAD. Nhưng như vậy vẫn chưa đủ, một hoạ viên chuyên nghiệp cần nắm rõ cả các ngôn ngữ lập trình được hỗ trợ trong AutoCAD để có thể rút ngắn các thao tác làm việc, nhất là khi công việc đòi hỏi một khối lượng vẽ lớn. Thay vì phải vẽ từng tý một, người hoạ viên chỉ cần gõ lệnh là có thể hoàn thành bản vẽ một cách chính xác, nhanh chóng.
Một trong những ngôn ngữ lập trình thông dụng được hỗ trợ trong AutoCAD đó là ngôn ngữ VBA, với cấu trúc, cú pháp, câu lệnh dễ hiểu, ngôn ngữ VBA thực sự mạnh và phù hợp cho những hoạ viên mới bắ đầu làm quen với việc lập trình trong môi trường AutoCAD.
Trong khuôn khổ bài làm em chỉ xin giới thiệu về phương thức sử dụng ngôn ngữ VBA trong một số các thao tác đối với Layer.
Để sử dụng một chương trình viết bằng VBA ta thao tác như sau:
Tại không gian Model space ta phải Load chương trình đó vào trong AutoCad . Có nhiều cách làm .
Ta có thể làm như sau :Từ menu polldown \ Tools\ Load Aplication .
Sau đó ta sẽ được giao diện như sau :
Sau bước này ta vào thư mục có chứa File chương trình , để Load và trong autoCad.
Chọn file cần thiết sau ddos kích vào Load.
Chọn run để vào được menu chính :
Đây chính là giao diện menu chính:
Tại cửa sổ giao diện này ta có thể kích hoạt để sử dụng cho công việc vẽ được rồi.
Ở trên là một ví dụ : Ta muốn vẽ đường Hidden tỉ lệ Scale là 20.
Kích hoạt nút “Kich vao day de bat dau” , Sau đó dung chuột để chọn các giá trị điểm đầu cuối ta đã có một đường thằng cần vẽ :
Để tạo và sửa chữa chương trình ta vào mã nguồn bằng phím tắt : Alt + F11
Hoặc Từ menu pollDown / Tools/ Macro /Visual Basic Editor.
Đây là mã nguồn để Load một dạng đường thẳng trong File Acad.lin. Các đường này đã được ta tạo sẵn và lưu vào trong File Acad.lin :
Sub Linetp(linetypeName As String, scaleLine As Double)
On Error Resume Next
ThisDrawing.Linetypes.Load linetypeName, "acad.lin"
ThisDrawing.ActiveLinetype = ThisDrawing.Linetypes.Item("HIDDEN")
If Err.Description = "Duplicate record name" Then
MsgBox "A line type named '" & linetypeName
End If
Dim returnObj As AcadObject
Dim basePnt As Variant
Dim sPnt As Variant
Dim ePnt As Variant
Dim eePnt(0 To 2) As Double
Dim ssPnt(0 To 2) As Double
Dim lineObj As AcadLine
sPnt = ThisDrawing.Utility.GetPoint(, "Select first object")
ssPnt(0) = sPnt(0): ssPnt(1) = sPnt(1): ssPnt(2) = sPnt(2)
ePnt = ThisDrawing.Utility.GetPoint(, "Select second object")
eePnt(0) = ePnt(0): eePnt(1) = ePnt(1): eePnt(2) = ePnt(2)
Set lineObj = ThisDrawing.ModelSpace.AddLine(ssPnt, eePnt)
lineObj.LinetypeScale = scaleLine
End Sub
Sub openform()
Linetpe.Show
End Sub
Đoạn chương trình này được gắn vào một From để ta dễ dàng sử dụng .Dưới đây là mã nguồn để tạo ra một From.
Private Sub ct_Click()
End Sub
Private Sub Drwl_Click()
Linetpe.Hide
If ct.Value = True Then
LineType.Linetp "CENTER", lscl.Value
Else
If hi.Value = True Then
LineType.Linetp "HIDDEN", lscl.Value
Else
If cont.Value = True Then
LineType.Linetp "continuous", lscl.Value
Else
If Border.Value = True Then
LineType.Linetp "Border", lscl.Value
Else
If Dashed.Value = True Then
LineType.Linetp "Dashed", lscl.Value
Else
If Divide.Value = True Then
LineType.Linetp "Divide", lscl.Value
Else
If Dot.Value = True Then
LineType.Linetp "Dot", lscl.Value
End If
If Tracks.Value = True Then
LineType.Linetp "Tracks", lscl.Value
End If
End If
End If
End If
End If
End If
End If
Linetpe.Show
Có dạng như sau :
Các lệnh kích hoạt VBA tại Command line của AutoCAD
VBALOAD
Load một file VBA Project vào trong phiên làm việc hiện tại của AutoCAD.
VBARUN
Chạy một đoạn macro của VBA từ hộp thoại Macros dialog hay từ dòng Command line của AutoCAD.
VBAUNLOAD
Loại bỏ một file VBA project từ phiên làm việc hiện thời của AutoCAD.
Nếu file VBA project đã được sửa đổi mà chưa được lưu thì người dùng sẽ nhận được yêu cầu lưu.
VBAMAN
Hiển thị chương trinh quản lý VBA cho phép người dùng xem, tao, nhập, đóng, gắn vào, trích ra các projects.
Kết luận
Phần trên ta đã tóm tắt sơ lược quá trình tạo và sử dụng một trình ứng dụng viết bằng ngôn ngữ lập trình VBA for AutoCad .
Do thời gian nghiên cứu ngắn ,Tầm hiểu biết có hạn cho nên chương trình này còn rất mhiều hạn chế .Chưa đủ để đáp ứng nhu cầu đề ra rất mong sự góp ý của thầy giáo để sau này em có những chương trình hay phù hợp để có thể áp dụng vào trong thực tế.
III LẬP TRÌNH TẠO MỘT KHUNG TÊN
Vẽ khung tên bản vẽ
Tạo khung tên bản vẽ bằng lập trình VBA
Sử dụng VBA để vẽ khung tên bản vẽ. Tạo một giao diện như sau
Vơi đoạn mã viết trong VBA như sau:
Private Sub CommandButton1_Click()
UserForm1.hide
'Viet chu trong ban ve
Dim textObj As AcadMText
Dim dc(0 To 2) As Double
Dim i As Integer
Dim mt(0 To 6) As String
mt(6) = "TRUONG " & UCase(CStr(truong)): mt(5) = "LOP: " & CStr(lop): mt(4) = "NGUOI VE: " & CStr(nguoive): mt(3) = "MA SV: " & CStr(masv): mt(2) = CStr(ngayve)
mt(1) = "SO HIEU: " & CStr(sohieu): mt(0) = CStr(ngayht):
dc(0) = 170
dc(1) = 27
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(6))
ZoomAll
textObj.Height = 5
textObj.Update
dc(0) = 170
dc(1) = 14
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(4))
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 145
dc(1) = 29
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, "NGAY VE")
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 143
dc(1) = 23
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(2))
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 145
dc(1) = 13
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, "NGAY HT")
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 143
dc(1) = 7.5
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(0))
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 251
dc(1) = 13.5
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(3))
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 255
dc(1) = 6.2
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(1))
ZoomAll
textObj.Height = 3
textObj.Update
dc(0) = 192
dc(1) = 5.8
dc(2) = 0
Width = 150
Set textObj = ThisDrawing.ModelSpace.AddMText(dc, Width, mt(5))
ZoomAll
textObj.Height = 3
textObj.Update
'Ve khung ten
Dim lineObj As AcadLine
Dim d(0 To 2) As Double
Dim c(0 To 2) As Double
'Ve duong bao khung
d(0) = 0#: d(1) = 0#: d(2) = 0#
c(0) = 297#: c(1) = 0#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 297#: d(1) = 0#: d(2) = 0#
c(0) = 297#: c(1) = 210#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 297#: d(1) = 210#: d(2) = 0#
c(0) = 0#: c(1) = 210#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
'lineObj.layer = "tuan"
d(0) = 0#: d(1) = 210#: d(2) = 0#
c(0) = 0#: c(1) = 0#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
'Ve khung ten
d(0) = 137#: d(1) = 0#: d(2) = 0#
c(0) = 137#: c(1) = 32#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 137#: d(1) = 32#: d(2) = 0#
c(0) = 297#: c(1) = 32#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 169#: d(1) = 0#: d(2) = 0#
c(0) = 169#: c(1) = 32#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 169#: d(1) = 8#: d(2) = 0#
c(0) = 233#: c(1) = 8#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 233#: d(1) = 0#: d(2) = 0#
c(0) = 233#: c(1) = 16#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 233#: d(1) = 8#: d(2) = 0#
c(0) = 297#: c(1) = 8#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
d(0) = 137#: d(1) = 16#: d(2) = 0#
c(0) = 297#: c(1) = 16#: c(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(d, c)
ZoomAll
Unload Me
End Sub
Ta khai báo các hộp textbox là tên các nhãn
Nhập trường , lớp , sinh viên thực hiện, mã sinh viên, ngày vẽ ,ngày hoàn thành, số hiệu bản vẽ sau đó nhấn vào vẽ khung tên ta được như hình vẽ sau