Hiện tại có nhiều người muốn tìm hiểu về lập trình trên nền tảng .NET với AutoCAD.
Với một số kinh nghiệm tích lũy được về lập trình với AutoCAD, tôi mạn phép viết phần hướng dẫn này.
Hy vọng là sẽ có nhiều điều bổ ích cho mọi người.
Một số ghi chú:
Trong các phần hướng dẫn, chỉ chú trọng đến cách thức giao tiếp với CAD
mà không bàn về việc sử dụng và thao tác các chương trình lập trình.
Có thể sử dụng VB.NET hoặc C#, nhưng các hướng dẫn sau này sẽ viết bằng code VB.NET.
Chương trình tạo ra sẽ chạy độc lập với AutoCAD, không sử dụng tham
chiếu đến thư viện đối tượng của AutoCAD mà sử dụng kỹ thuật liên kết -
muộn.
So với phương pháp chèn thư viện tham chiếu thì nó có ưu điểm riêng và thuận lợi riêng.
- Ưu điểm: giao tiếp với phần lớn các phiên bản của CAD
- Nhược điểm:
Không có sẵn các lớp, hàm và các hằng số AutoCAD, người dùng phải tự định nghĩa, tự ghi nhớ lấy tên.
Một số chức năng không sử dụng tường minh được.
I. Tạo liên kết với AutoCADVì AutoCAD là đối tượng chính nhắm tới và thường xuyên thao tác đến nó,
cho nên cần khai báo một biến đại diện cho chương trình AutoCAD (tương
tự như AcadApplication trong VBA) để dễ dàng thao tác như sau:
'Biến toàn cục chỉ đến chương trình AutoCAD chạy sau cùng nhất,
Public Acad As Object
Để làm việc với biến này, cần tạo ra sự liên kết chương trình AutoCAD đến nó.
Tại thời điểm chạy, các dữ liệu của chương trình AutoCAd sẽ được ép sang
biến Acad, với biến này ta có thể truy xuất đến các thuộc tính và hàm
của nó, phương pháp này gọi là pp liên kết muộn.
Trước hết định nghĩa cách thức liên kết như sau:Enum acAcadLink As Integer
'Chỉ liên kết đến chương trình AutoCAD đang chạy
Link = 1
'Tạo một phiên chạy mới của chương trình AutoCAD
NewSession = 2
'Liên kết đến chương trình AutoCAD, nếu không được thì chạy một bản mới
LinkNewSession = 3
End Enum
và đây là hàm dùng để liên kết với một biến bất kỳ chứa đựng thông tin của chương trình AutoCADfile: cadvietlisp.lsp
'''
''' Hàm liên kết với AutoCAD, đồng thời hiển thị thông báo lỗi (nếu có)
'''
''' "acad_app">Trả về biến liên kết đại diện cho chương trình AutoCAD
''' "op">Tùy chọn liên kết
''' "Visible">Có hiển thị chương trình AutoCAD hay không
''' True nếu thành công, ngược lại là false ''' Hàm này có thêm hàm ghi đè Public
Function ACADLink
(ByRef acad_app As Object, Optional ByVal op As acAcadLink
= acAcadLink.Link, Optional ByVal Visible As Boolean
= True
) As Boolean
Select Case op
Case acAcadLink.Link
Try
acad_app
= GetObject
(,
"AutoCAD.Application") Catch
If MsgBox
("AutoCAD chưa chạy, khởi động nó ?", MsgBoxStyle.YesNo,
"Chú ý") = MsgBoxResult.Yes Then
Try
acad_app
= CreateObject
("AutoCAD.Application") Catch
MsgBox
("Có lỗi khi khởi động AutoCAD!", MsgBoxStyle.Information,
"Chú ý") Return False
End Try
Else
Return False
End
If End Try
Case acAcadLink.LinkNewSession
Try
acad_app
= GetObject
(,
"AutoCAD.Application") Catch
Try
acad_app
= CreateObject
("AutoCAD.Application") Catch
MsgBox
("Có lỗi khi khởi động AutoCAD!", MsgBoxStyle.Information,
"Chú ý") Return False
End Try
End Try
Case acAcadLink.NewSession
Try
acad_app
= CreateObject
("AutoCAD.Application") Catch
MsgBox
("Có lỗi khi khởi động AutoCAD!", MsgBoxStyle.Information,
"Chú ý") Return False
End Try
End Select
Try
Dim acAcadState
= acad_app.GetAcadState
If
Not acAcadState.IsQuiescent Then
MsgBox
("AutoCAD chưa sẵn sàng. Hãy đóng hộp thoại đang mở hoặc thoát khỏi lệnh đang thực hiện", MsgBoxStyle.Critical,
"Chú ý") Else
acad_app.Visible
= Visible
Return True
End
If Catch
Return False
End Try
End
FunctionTrong trường hợp muốn liên kết với biến Acad đã khai báo ở trên, ta dùng hàm saufile: cadvietlisp.lsp
'''
''' Hàm liên kết với AutoCAD và gán vào biến Acad, đồng thời hiển thị thông báo lỗi (nếu có)
'''
''' "op">Tùy chọn liên kết
''' "Visible">Có hiển thị chương trình AutoCAD hay không
''' True nếu thành công, ngược lại là false ''' Hàm này có thêm hàm ghi đè Public
Function ACADLink
(Optional ByVal op As acAcadLink
= acAcadLink.Link, Optional ByVal Visible As Boolean
= True
) As Boolean
Return ACADLink
(Acad, op, Visible
) End
FunctionVD:
Để liên kết biến Acad với chương trình AutoCAD đang chạy, ta dùng như sau:
if ACADLink() then
'Nếu AutoCAD chưa chạy thì câu lệnh if sẽ kết thúc
'Làm cái gì đó ở đây
end if
Để liên kết biến Acad với chương trình AutoCAD đang chạy, or chưa chạy thì chạy nó, ta dùng như sau:
if ACADLink(acAcadLink.LinkNewSession) then
'Làm cái gì đó ở đây
end if
Để liên kết biến MyAcad với một phiên mới AutoCAD đồng thời ẩn nó để xử lý chạy nền
Dim MyAcad as Object
if ACADLink(MyAcad, acAcadLink.NewSession, False) then
'Làm cái gì đó ở đây
end if
Tải về ch trình mẫu VD về thao tác với AutoCADPhần 2:
Thao tác với các đối tượng AutoCADPhần 3:
Lập trình với bản vẽSource chương trình mẫu:
http://www.mediafire.com/file/99auvrs75mgi...WorkWithDwg.rarPhần 4: Lập trình với các đối tượng trong bản vẽ
Source chương trình mẫu:
1.
Thao tác với các đối tượng 2.
Tạo bảng trong CAD từ dữ liệu trong Excel 3.
Break các Polyline thành các Polyline con tại các giao điểm giữa chúng với nhau.