Xây dựng mô hình tự động hoá thiết kế trong AutoCad bằng ngôn ngữ lập trình VB6 Phan Tự Hướng, Trường Đại học Kiến trúc Hà Nội Tóm tắt: Trong lĩnh vực thiết kế công trình, phần mềm AutoCad được sử dụng rất phổ biến vì nhiều tính năng ưu việt. Với yêu cầu thiết kế xây dựng đòi hỏi chất lượng ngày càng cao, nhiều công việc phải giao tiếp với các phần mềm ứng dụng bên ngoài hoặc thực hiện lặp đi lặp lại gây nhàm chán, mất nhiều công sức và dễ sai sót. Công việc đó có thể hoàn toàn thực hiện tự động với thời gian ngắn, độ chính xác cao nhờ ngôn ngữ lập trình VB6 (Visual Basic 6) trong môi trường AutoCad. Bài báo này trình bày mô hình tự động hoá thiết kế trong AutoCad bằng ngôn ngữ lập trình VB6. Mô hình tự động hoá này đã được ứng dụng trong nhiều phần mềm thiết kế xây dựng hiện nay, nhưng tài liệu viết về mô hình liên kết này rất hiếm (kể cả các tài liệu nước ngoài). Hy vọng bài báo này sẽ đáp ứng nhu cầu những ai muốn khám phá lĩnh vực tự động hoá trong AutoCad bằng VB6. 1. Đặt vấn đề AutoCad là phần mềm chuyên về lĩnh vực vẽ kỹ thuật và đồ hoạ, được ứng dụng rất phổ biến trong thiết kế công trình. Bản thân AutoCad đã được tích hợp ngôn ngữ lập trình Visual Lisp và VBA (Visual Basic for Applications) nhưng đều có hạn chế nhất định. Ví dụ như khả năng bảo mật kém, không có khả năng đóng gói thành ứng dụng chạy độc lập, hỗ trợ ít điều khiển ActiveX,... Hai ngôn ngữ này thường được sử dụng với các ứng dụng quy mô vừa và nhỏ, hoặc đóng vai trò kết nối hay khởi động ứng dụng khác. VB6 khắc phục được những mặt hạn chế trên, có thể tạo ra các ứng dụng trong AutoCad hoàn toàn chạy độc lập (không phụ thuộc vào phiên bản), không cần các chương trình nền hỗ trợ, sản phẩm có khả năng thương mại. Nhìn chung cấu trúc, mã lệnh trong thủ tục của VB6 và VBA rất giống nhau nên dễ dàng chuyển đổi. Vì vậy, những người am hiểu về VBA thì có thể nhanh chóng tiếp cận, sử dụng VB6 và ngược lại. Hiện nay, tuy được thay thế bằng VB.NET nhưng VB6 vẫn được sử dụng rộng rãi nhờ những ưu điểm trên. 2. Điều khiển AutoCad từ VB6 VB6 có thể tạo ra hơn 6 kiểu ứng dụng, nhưng chỉ có hai kiểu điều khiển (liên kết) được với AutoCad (và cả các phần mềm trong bộ Office) là Standard EXE và ActiveX DLL. Standard EXE là ứng dụng được biên dịch chạy hoàn toàn độc lập, điều khiển
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Xây dựng mô hình tự động hoá thiết kế trong AutoCad
bằng ngôn ngữ lập trình VB6
Phan Tự Hướng, Trường Đại học Kiến trúc Hà Nội
Tóm tắt: Trong lĩnh vực thiết kế công trình, phần mềm AutoCad được sử dụng rất phổ
biến vì nhiều tính năng ưu việt. Với yêu cầu thiết kế xây dựng đòi hỏi chất lượng ngày càng
cao, nhiều công việc phải giao tiếp với các phần mềm ứng dụng bên ngoài hoặc thực hiện
lặp đi lặp lại gây nhàm chán, mất nhiều công sức và dễ sai sót. Công việc đó có thể hoàn
toàn thực hiện tự động với thời gian ngắn, độ chính xác cao nhờ ngôn ngữ lập trình VB6
(Visual Basic 6) trong môi trường AutoCad. Bài báo này trình bày mô hình tự động hoá thiết
kế trong AutoCad bằng ngôn ngữ lập trình VB6. Mô hình tự động hoá này đã được ứng
dụng trong nhiều phần mềm thiết kế xây dựng hiện nay, nhưng tài liệu viết về mô hình liên
kết này rất hiếm (kể cả các tài liệu nước ngoài). Hy vọng bài báo này sẽ đáp ứng nhu cầu
những ai muốn khám phá lĩnh vực tự động hoá trong AutoCad bằng VB6.
1. Đặt vấn đề
AutoCad là phần mềm chuyên về lĩnh vực vẽ kỹ thuật và đồ hoạ, được ứng dụng rất
phổ biến trong thiết kế công trình. Bản thân AutoCad đã được tích hợp ngôn ngữ lập trình
Visual Lisp và VBA (Visual Basic for Applications) nhưng đều có hạn chế nhất định. Ví dụ
như khả năng bảo mật kém, không có khả năng đóng gói thành ứng dụng chạy độc lập,
hỗ trợ ít điều khiển ActiveX,... Hai ngôn ngữ này thường được sử dụng với các ứng dụng
quy mô vừa và nhỏ, hoặc đóng vai trò kết nối hay khởi động ứng dụng khác.
VB6 khắc phục được những mặt hạn chế trên, có thể tạo ra các ứng dụng trong
AutoCad hoàn toàn chạy độc lập (không phụ thuộc vào phiên bản), không cần các
chương trình nền hỗ trợ, sản phẩm có khả năng thương mại. Nhìn chung cấu trúc, mã
lệnh trong thủ tục của VB6 và VBA rất giống nhau nên dễ dàng chuyển đổi. Vì vậy, những
người am hiểu về VBA thì có thể nhanh chóng tiếp cận, sử dụng VB6 và ngược lại. Hiện
nay, tuy được thay thế bằng VB.NET nhưng VB6 vẫn được sử dụng rộng rãi nhờ những
ưu điểm trên.
2. Điều khiển AutoCad từ VB6
VB6 có thể tạo ra hơn 6 kiểu ứng dụng, nhưng chỉ có hai kiểu điều khiển (liên kết)
được với AutoCad (và cả các phần mềm trong bộ Office) là Standard EXE và ActiveX
DLL. Standard EXE là ứng dụng được biên dịch chạy hoàn toàn độc lập, điều khiển
AutoCad thông qua đối tượng Automation. Automation là một dạng công nghệ ActiveX
trong gia đình Microsoft, cho phép điều khiển các ứng dụng (AutoCad) từ môi trường bên
ngoài (như VB6). ActiveX DLL được hiểu là thư viện liên kết động (Dynamic Link Library -
DLL) để các ứng dụng có thể tham chiếu, sử dụng được. Khác với VB6, VBA là môi
trường lập trình có sẵn trong AutoCad nên điều khiển không thông qua đối tượng
Automation (được gọi là AutoCAD.Application). Điều đó có nghĩa Automation là đối tượng
trung gian để VB6 từ bên ngoài có thể điều khiển các ứng dụng khác như AutoCad, Excel,
Word,...
Hình 1: Mô hình trao đổi dữ liệu với các ứng dụng khác từ VB6
Bài báo này giới thiệu 2 ứng dụng điều khiển AutoCad từ VB6 qua Standard EXE và
ActiveX DLL một cách đơn giản nhất.
2.1. Điều khiển AutoCad bằng Standard EXE
VB6
AutoCad
AUTOMATION
PowerPoint Excel Word
Hình 2: Tạo ứng dụng Standard EXE
Khởi động VB6, chọn Standard EXE trong cửa sổ New Project (hình 2). Dự án (project)
mới mặc định sẵn có Form1, đổi tên của dự án thành VB6exeAcad, đổi tên Form thành
ControlAcad và lưu lại dự án đó.
Hình 3: Xây dựng các điều khiển trong dự án VB6exeAcad
Sau đó, xây dựng các điều khiển chính như hình 3. Điều khiển Text Box gồm có
txtFirstX, txtFirstY (toạ độ điểm đầu), txtSecondX, txtSecondY (tọa độ điểm cuối). Điều
khiển CommandButton gồm có cmdFirstP, cmdSecondP (chọn điểm đầu, điểm cuối),
cmdOK (thực hiện lệnh vẽ), cmdClose (đóng cửa sổ),...
Thủ tục dưới đây sẽ khởi động AutoCad khi Form ControlAcad được tải:
Private Sub Form_Load()
On Error Resume Next 'Bỏ qua lỗi khi AutoCad chưa mở sẵn
'"Bắt" đối tượng AutoCad nếu đang mở
Set AcadApp = GetObject(, "AutoCAD.Application")
'Xoá lỗi nếu AutoCad chưa mở
If Err <> 0
Err.Clear 'Xoá lỗi phát sinh
Set AcadApp = CreateObject("AutoCAD.Application")
End If
AppActivate AcadApp.Caption 'Kích hoạt AutoCad
AcadApp.Visible = True 'Hiện cửa sổ AutoCad
End Sub
Thủ tục thi hành một số nút lệnh cmdClose, cmdFirstP, cmdSecondP như hình 4.
Hình 4: Nội dung thủ tục của nút lệnh cmdClose, cmdFirstP, cmdSecondP
Nội dung thủ tục của nút cmdOK (vẽ đoạn thẳng từ điểm LineP1 và LineP2):
Private Sub cmdOK_Click()
Dim LineL As Object, LineP1(0 To 2) As Double, LineP2(0 To 2) As Double
With Me
LineP1(0) = Val(.txtFirstX) 'Gán toạ độ điểm đầu
LineP1(1) = Val(.txtFirstY)
LineP2(0) = Val(.txtSecondX) 'Gán toạ độ điểm cuối
LineP2(1) = Val(.txtSecondY)
End With
'Vẽ đoạn thẳng và chuyển sang màu đỏ
Set LineL = AcadApp.ActiveDocument.ModelSpace.AddLine(LineP1, LineP2)
LineL.Color = 1
Unload Me
Set AcadApp = Nothing 'Xoá biến đối tượng
End Sub
Đối tượng AcadApp được khai báo ở trên chính là AutoCAD.Application. Nếu AutoCad
đang được mở, sử dụng hàm GetObject để chương trình tham chiếu đến đối tượng
AutoCAD.Application. Trong trường hợp AutoCad đang đóng, sử dụng hàm CreateObject
để tạo ra và trả về tham chiếu đến đối tượng AutoCAD.Application.
Sau khi xây dựng hoàn chỉnh, bạn vào menu File và chọn Make VB6exeAcad.exe... để
tạo file chạy độc lập như các chương trình khác. Ứng dụng này có thể thực hiện trên các
phiên bản AutoCad bắt đầu từ 2000 (phiên bản đầu tiên hỗ trợ Automation).
Chi tiết của dự án này trong www.cadviet.com...
2.2. Điều khiển AutoCad bằng ActiveX DLL
Khởi động VB6, chọn ActiveX DLL trong cửa sổ New Project (hình 2). Dự án mới mặc
định có một Class Module, đổi tên của dự án thành Dll_VB6_Project và lưu lại dự án đó.
Sau đó thêm Form, Module, Class Module bằng cách vào menu Project và chọn Add