Lập trình VBA trong AutoCAD

By Nặc danh - tháng 12 03, 2011

Kể từ hôm nay mình mở topic này để trao đổi với các bạn về lập trình VBA trong AutoCAD. Theo kinh nghiệm của mình thì không nhất thiết các bạn phải hiểu rõ các lệnh, cách dùng AutoCAD mới học được. Chỉ cần các bạn cài được CAD, đã dùng được con chuột để vẽ được điểm, đoạn thẳng, đường gấp khúc là đủ để chúng ta bắt đầu.


1. Giới thiệu qua.
Từ phiên bản AutoCAD 2000 đã bắt đầu hỗ trợ VBA và không có nhiều cải tiến đáng kể trong các phiên bản từ 2000 so với các bản tiếp theo. Các bạn có máy PC ghẻ tốt nhất cài AutoCAD 2000. Theo mình đánh giá AutoCAD 2000 vừa tốt, nhanh, nhẹ mà vẫn đáp ứng đủ nhu cầu học lập trình.
Cài CAD xong các bạn gõ VBAIDE tại cửa sổ lệnh của AutoCAD hoặc vào Tool-Macro-Visual Basic Editor để mở cửa sổ lập trình VBA. Trông nó như thế này:



Cửa sổ này chắc bạn nào đã học qua lập trình là thấy quen quen ngay. Nó giống với IDE của visual Basic 6.0 và các môi trường VBA của các phần mềm khác.
2. Kinh thánh (Bible) của những người mới học.
Bạn nào đọc sách tin học của nước ngoài chắc cũng từng đọc tiêu đề kiểu như “xyz bible”. Vậy thì: “ActiveX and VBA Reference” thực sự là cuốn kinh thánh cho người định học VBA trong CAD. Bạn tìm cuốn sách này ở đâu? Câu trả lời là ngay trong phần help của AutoCAD: Bạn bấm F1 để gọi help bạn sẽ thấy ActiveX Automation and VBA bấm vào đây bạn sẽ thấy:

Nó là cái link thứ hai sau cái ActiveX and VBA Developer’s Guide đấy. Nhấp chuột vào cái link đó nó sẽ gọi quyển Kinh thánh của mình ra. :d
Để ban đầu làm quen và tạo hứng thú cho bạn tìm hiểu cách lập trình, bạn tập trung vào mục Code Examples cho mình đã, các phần khác, mục khác mình sẽ cần để tra cứu sau khi mà bạn đã nắm rõ cách lập trình.
Bạn mở phần Code Examples sẽ được như thế này:

Giờ ta bắt đầu vẽ cái để lấy hứng thú học tiếp nhé. Bạn kéo thanh cuộn để tìm đến mục AddLine example cho mình, chọn vào sẽ được như thế này:

Copy toàn bộ đoạn code bên khung bên phải rồi quay trở lại cửa sổ VBA chuột phải vào chọn như hình:

Tại cửa sổ CAD các bạn dán đoạn code ví dụ ở bước trên vào, được như thế này:

Giờ thì các bạn chỉ cần đặt con chuột vào bất cứ dòng code nào ở trên rồi nhấn vào cái nút run hình tam giác hoặc vào Run – Run sub/userform hoặc nhấn F5 rồi chuyển sang môi trường CAD đã thấy một đoạn thẳng nằm ở đó rồi.
Phân tích code tý để các bạn hiểu:
Dòng: 

1
Dim lineObj As AcadLine

‘Để khai báo một đối tượng line – trong AutoCAD muốn vẽ đối tượng nào bạn phải khai báo đối tượng đó với đúng kiểu
Hai dòng:

1
2
3
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double

‘Để khai báo hai mảng, mỗi mảng 3 phần tử lưu các tọa độ X,Y,Z của mỗi đầu đoạn thẳng. CAD thông thường quản lý một điểm bằng 3 phần tử, như vậy, trong các bài học sau bạn sẽ biết đôi khi chỉ dùng hai với một vài đối tượng. Với các đối tượng là một chuỗi các đỉnh liên tiếp, CAD cũng dùng một mảng có số phần tử là bội của 3 để quản lý. Ví dụ một Polyline có 4 đỉnh thì khai báo mảng sẽ là: Dim arr(0 to 11) as Double
Hai dòng:

1
2
3
startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#

‘Để định tọa độ các điểm theo đó điểm đầu của line sẽ có tọa độ (1,1,0) điểm cuối của line sẽ có tọa độ (5,5,0)
Dòng:

1
2
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)

‘ Để vẽ line lên môi trường CAD:
lineObj là một object nên phải dùng lệnh set; ThisDrawing là cửa sổ CAD; ModelSpace là phần thể hiện đồ họa vì trong ThisDrawing còn có phần quản lý Layer, Layout… nên phải chỉ định rõ sẽ vẽ vào Môi trường đồ họa ModelSpace; Phương thức AddLine có hai đối số là điểm đầu và điểm cuối
Dòng:
ZoomAll
Để gọi lệnh Zoom All trong CAD.

Bài mở đầu tạm thời chúng ta dừng tại đây. 
Bài tập cho các bạn:
- Thành thạo việc gọi môi trường lập trình, Help, tạo module
- Sử dụng code ví dụ từ help để vẽ được Point, Polyline, Circle
- Ứng với mỗi code ví dụ các bạn thay đổi giá trị các biến để hiểu rõ các phương thức.





Ps: Bài này mình copy ở đây: http://www.geovn.com/showthread.php?t=108&page=1

  • Share:

You Might Also Like

0 Comments

Vui lòng viết tiếng Việt có dấu!!!