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.

doc26 trang | Chia sẻ: vietpd | Lượt xem: 1422 | Lượt tải: 0download
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