Chuyển đến nội dung
Diễn đàn CADViet

anhcos

Nhà quảng cáo
  • Số lượng nội dung

    275
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    15

Mọi thứ được đăng bởi anhcos

  1. anhcos

    Hướng dẫn lập trình với AutoCAD bằng VB.NET

    Duyệt qua từng đối tượng là cách cơ bản, rồi, tuy nhiên tốc độ rất chậm, nếu cỡ 200 đối tượng trở lên thì còn chậm nữa. Nên giải pháp là phải dùng filter cùng với SelectionSet trước khi chọn đối tượng để lọc bớt số lượng ngay từ đầu.
  2. 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 AutoCAD Vì 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 AutoCAD ''' <summary> ''' Hàm liên kết với AutoCAD, đồng thời hiển thị thông báo lỗi (nếu có) ''' </summary> ''' <param name="acad_app">Trả về biến liên kết đại diện cho chương trình AutoCAD</param> ''' <param name="op">Tùy chọn liên kết</param> ''' <param name="Visible">Có hiển thị chương trình AutoCAD hay không</param> ''' <returns>True nếu thành công, ngược lại là false</returns> ''' <remarks>Hàm này có thêm hàm ghi đè</remarks> 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 Function Trong 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 sau ''' <summary> ''' 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ó) ''' </summary> ''' <param name="op">Tùy chọn liên kết</param> ''' <param name="Visible">Có hiển thị chương trình AutoCAD hay không</param> ''' <returns>True nếu thành công, ngược lại là false</returns> ''' <remarks>Hàm này có thêm hàm ghi đè</remarks> Public Function ACADLink(Optional ByVal op As acAcadLink = acAcadLink.Link, Optional ByVal Visible As Boolean = True) As Boolean Return ACADLink(Acad, op, Visible) End Function VD: Để 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 AutoCAD Phần 2: Thao tác với các đối tượng AutoCAD Phần 3: Lập trình với bản vẽ Source chương trình mẫu: http://www.fshare.vn/file/TWZSCHPKZT Phầ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: http://www.fshare.vn/file/THA20XJFHT 2. Tạo bảng trong CAD từ dữ liệu trong Excel: http://www.fshare.vn/file/TXHY1W363T 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: http://www.fshare.vn/file/TGBGC2NFVT
×