Download - VB6 trong AutoCad

Transcript
Page 1: VB6 trong AutoCad

Bạn có thể download tài liệu này về từ http://ghic.co.cc Hoặc blog: http://chunguv.blogspot.comwebsite cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000,ms project, photoshop…..

ghi chú:http://ghic.co.cc không chịu trách nhiệm về bản quyền của tài liệuđược phát hành.Tất cả tài liệu do chúng tôi phát hành đều có nguồn gốc rõ ràng vàđược chọn lọc một cách khắt khe để mang lại cho bạn đọc nhữngtài liệu tốt nhất.Trong thời gian tới chúng tôi sẽ chuyển toàn bộ dữ liệu sang blog: http://chunguv.blogspot.com

Chúc mọi người thành công !

Page 2: VB6 trong AutoCad

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

http://ghic.co.cc không chịu trách nhiệm về bản quyền của tài liệu được phát hành.Tất cả tài liệu do chúng tôi phát hành đều có nguồn gốc rõ ràng và được chọn lọc một cách khắt khe để mang lại cho bạn đọcnhững tài liệu tốt nhất.Chúc mọi người thành công !

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 3: VB6 trong AutoCad

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

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 4: VB6 trong AutoCad

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

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 5: VB6 trong AutoCad

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

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 6: VB6 trong AutoCad

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

Form, Add Module, Add Class Module (hình 5).

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 7: VB6 trong AutoCad

Hình 5: Tải Form, Module vào dự án Dll_VB6_Project

Hình 6: Cấu trúc Dự án Dll_VB6_Project

Dự án Dll_VB6 có ba thành phần là Form FDllVb6, Module Dll_in_AutoCad, Class

Module HelloDllVB6 như sau:

- Module Dll_in_AutoCad: Khai báo biến đối tượng CadApp, chính là đối tượng

Acad.Application để các thủ tục có thể truy cập.

Public CadApp As Object (gọi chung)

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 8: VB6 trong AutoCad

- Form FDllVb6: Là Form sẽ hiển thị trong AutoCad, Form này chứa các điều khiển

theo ý muốn. Phương pháp xây dựng các điều khiển tương tự như ở mục 2.1 nên

tôi không trình bày lại nữa.

Private Sub cmdLine_Click()

Dim LineObj As Object

Dim StartPoint As Variant

Dim EndPoint As Variant

On Error GoTo Thoat 'Tự thoát khi gặp lỗi hay bấm phím Esc

Unload Me

'Chọn điểm đầu của đường thẳng

StartPoint = CadApp.ActiveDocument.Utility.GetPoint(, "Chon diem dau:")

Do

'Chọn điểm cuối của đường thẳng, được lặp giống lệnh Line trong AutoCad

EndPoint = CadApp.ActiveDocument.Utility. _

GetPoint(StartPoint, "Chon diem tiep theo:")

'Vẽ đoạn thẳng

Set LineObj = CadApp.ActiveDocument.ModelSpace. _

AddLine(StartPoint, EndPoint)

'Gán biến đối tượng

StartPoint = EndPoint

Loop

Set LineObj = Nothing

Thoat:

End Sub

- Class Module HelloDllVB6: Tạo đối tượng mới có tên HelloDllVb6, trong

HelloDllVb6 xây dựng thủ tục ShowVB6Form (hình 7). Thủ tục ShowVB6Form có

chức năng hiển thị form FDllVb6 trong AutoCad.

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 9: VB6 trong AutoCad

Hình 7: Cấu trúc Class Module HelloDllVB6

Đáng chú ý trong dự án này có sử dụng hai hàm API là FindWindowA và

SetWindowLongA. Hàm FindWindowA lấy handle của cửa sổ có tên (title) được chỉ định.

Hàm SetWindowLongA sẽ thay đổi thuộc tính của cửa sổ chỉ định (xem thêm trong trang

www.microsoft.com).

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 10: VB6 trong AutoCad

Hình 8: Biên dịch dự án Dll_VB6_Project sang DLL

Khi dự án hoàn thành, chúng ta tiến hành biên dịch bằng cách chọn menu File\ Make

Dll in AutoCad.dll... (hình 8). Bây giờ, công việc tiếp theo của chúng ta là sử dụng file Dll

in AutoCad.dll như thế nào?

Khác với dự án VB6exeAcad.exe có thể điều khiển trực tiếp AutoCad, để sử dụng

ActiveX DLL cần phải có thủ tục trong AutoCad gọi ứng dụng đó. Thủ tục đó được xây

dựng trong VBA của AutoCad.

Đầu tiên khởi động AutoCad, sau đó vào menu Tools\ Macro\ Visual Basic Editer (hoặc

bấm Alt+F11). Cửa sổ Microsoft Visual Basic hiện ra (hình 9), chọn menu Insert\ Module

để thêm module mới. Sau đó vào menu Tools\ References..., cửa sổ References -

ACADProject hiện ra như hình 10. Bấm vào nút Browse... để tìm tới file Dll in AutoCad.dll

vừa được biên dịch. Sau khi chọn xong, AutoCad xác nhận dự án Dll_VB6_Project đã

được tải vào chương trình (hình 10). Sau đó bạn tiến hành xây dựng thủ tục

DisplayDLLForm trong VBA, dự án vừa rồi đã được nạp vào Auto List Members như các

thành phần sẵn có trong AutoCad (hình 11).

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 11: VB6 trong AutoCad

Hình 9: Cửa sổ Microsoft Visual Basic trong AutoCad

Hình 10: Cửa sổ Microsoft Visual Basic trong AutoCad

Hình 11: Dự án Dll_VB6_Project được xác nhận trong Auto List Members

Thủ tục DisplayDLLForm hoàn chỉnh như ở dưới:

Public Sub DisplayDLLForm()

'Khai báo biến HelloDllVb6 trong Dll_VB6_Project

Dim HelloDllVb6 As Dll_VB6_Project.HelloDllVb6

Set HelloDllVb6 = New Dll_VB6_Project.HelloDllVb6

Set HelloDllVb6.AcadApp = Application

'Hiện thi hành thủ tục ShowVB6Form để tải form FDllVb6

HelloDllVb6.ShowVB6Form

Set HelloDllVb6 = Nothing

End Sub

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 12: VB6 trong AutoCad

Trong thủ tục trên, HelloDllVb6 đóng vai trò là một đối tượng nằm trong

Dll_VB6_Project. Đối tượng HelloDllVb6 có phương thức ShowVB6Form.

Sau đó thi hành thủ tục trên bằng cách chuyển sang cửa sổ AutoCad, vào menu Tools\

Macro\ Macros... (hoặc phím tắt Alt+F8). Cửa sổ Macros hiện ra như hình 12, chọn thủ tục

DisplayDLLForm và bấm nút Run. Kết quả thể hiện như hình 13 để thi hành các lệnh.

Hình 12: Thi hành thủ tục DisplayDLLForm trong AutoCad

Hình 13: Form xây dựng trong VB6 trong AutoCad

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 13: VB6 trong AutoCad

Chi tiết của dự án này trong www.cadviet.com...

4. Quan hệ giữa VB6 và VBA trong AutoCad

Như đã đề cập ở trên, VB6 và VBA rất gần gũi nhau và có thể chuyển đổi code giữa 2

môi trường một cách dễ dàng. Chúng đều là ngôn ngữ lập trình Visual Basic và khi điều

khiển đối tượng giống nhau, cách thức thực hiện tương tự. Để tiện so sánh, tôi xây dựng

Form trong VBA giống như trong VB6 (hình 14). Các đối tượng bên trong Form cũng như

thuộc tính của chúng thiết lập gần tương tự nhau. Giao diện giữa 2 chương trình giống

nhau đến mức dễ gây nên sự xáo trộn khi làm việc với chúng (hình 6 và 14).

Hình 14: Form xây dựng trong VBA của AutoCad

Về mặt thuật toán cũng như mã lệnh (code) giữa chúng gần tương tự nhau. Để tiện so

sánh tôi copy toàn bộ code vẽ đoạn thẳng trong VB6 (hình 6) sang VBA (hình 14). Do VBA

nằm sẵn trong AutoCad (không phải can thiệp từ bên ngoài như VB6) nên chỉ cần bỏ đi

đoạn code “CadApp.”, còn toàn bộ giữ nguyên. Thủ tục vẽ đoạn thẳng trong VBA sửa lại

như sau:

Private Sub cmdLine_Click()

Dim LineObj As Object

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 14: VB6 trong AutoCad

Dim StartPoint As Variant

Dim EndPoint As Variant

On Error GoTo Thoat ' Tự thoát khi gặp lỗi hay bấm phím Esc

Unload Me

'Chọn điểm đầu của đường thẳng

StartPoint = ActiveDocument.Utility.GetPoint(, "Chon diem dau:")

Do

'Chọn điểm cuối của đường thẳng, được lặp giống lệnh Line trong AutoCad

EndPoint = ActiveDocument.Utility. _

GetPoint(StartPoint, "Chon diem tiep theo:")

'Vẽ đoạn thẳng

Set LineObj = ActiveDocument.ModelSpace. _

AddLine(StartPoint, EndPoint)

'Gán biến đối tượng

StartPoint = EndPoint

Loop

Set LineObj = Nothing

Thoat:

End Sub

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 15: VB6 trong AutoCad

Hình 15: Trợ giúp về ActiveX và VBA

Hãy kiểm tra thủ tục trên, bạn sẽ thấy kết quả tương tự như với VB6. Đó là cách

chuyển code từ VB6 sang VBA, còn nếu muốn chuyển từ VBA sang VB6 thì thực hiện

ngược lại bằng cách bổ sung đường dẫn ở trên. Điều đó thật đơn giản phải không?

Tại sao tôi lại quan tâm đến mối liên quan giữa VB6 và VBA? Sách hướng dẫn lập trình

VB6 điều khiển các đối tượng bên ngoài, đặc biệt là AutoCad là rất hiếm hoặc chỉ dẫn một

cách sơ sài. Trong khi đó, nguồn tài liệu hướng dẫn sử dụng VBA trong AutoCad lại rất

phong phú trên Internet cũng như có sẵn trong phần Help của AutoCad. Trong AutoCad

(2007), để có hướng dẫn sử dụng VBA, vào menu Help\ Additional Resources\ Developer

Help, cửa sổ AutoCad 2007 Help: Developer Documentation hiện ra như hình 15. Khai

thác những thông tin trong đó ta sẽ thu được nhiều kiến thức VBA với những chỉ dẫn cụ

thể với ví dụ kèm theo (hình 16).

Và như vậy, để trở thành “chuyên gia” lập trình VB6 cho đối tượng AutoCad (hay

Office), cần có bước đệm nghiên cứu và sử dụng thành thạo VBA. Khi thủ tục viết trong

VBA đã chạy chuẩn, chỉ cần vài thao tác sao chép, bổ sung đơn giản là code VBA trở

thành code VB6.

Hình 16: Hướng dẫn sử dụng phương thức vẽ cung tròn Arc trong Help

4. Kết luận

Visual Basic là ngôn ngữ lập trình rất phổ biến vì dễ học, phạm vi ứng dụng rộng rãi.

http://ghic.co.cc website cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, ms project, photoshop…..

Page 16: VB6 trong AutoCad

Bạn có thể download tài liệu này về từ http://ghic.co.cc Hoặc blog: http://chunguv.blogspot.comwebsite cung cấp đầy đủ ebook về : acad, 3dsmax, etabs, sap2000, msproject, photoshop…..

ghi chú:http://ghic.co.cc không chịu trách nhiệm về bản quyền của tài liệu đượcphát hành.Tất cả tài liệu do chúng tôi phát hành đều có nguồn gốc rõ ràng và đượcchọn lọc một cách khắt khe để mang lại cho bạn đọc những tài liệu tốtnhất.Trong thời gian tới chúng tôi sẽ chuyển toàn bộ dữ liệu sang blog: http://chunguv.blogspot.com

Chúc mọi người thành công !


Top Related