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

Các bài được khuyến nghị

Với sự phát triển ồ ạt và những lợi ích mà .NET mang lại, Autodesk đã có những bước tiến để phát triển VBA lên AutoCAD. NET
Vốn là một người yêu thích VBA, nên khi chuyển qua sử dụng VB.NET (cụ thể là Visual Basic 2008) Jinthấy khả năng hỗ trợ của VB.NET quả đã giúp cho việc viết Code nhẹ nhàng hơn nhiều, bên cạnh đó chương trình cũng mạnh hơn nhờ công cụ truy xuất vào hệ thống hiệu quả.
Trên diễn đàn cũng đã có người post lên sản phẩm của AutoCAD.NET (Ứng dụng AutoCAD .NET: chuyển đổi các bảng mã tiếng Việt thông dụng, Unicode, VNI-Windows, TCVN3(ABC), Unicode tổ hợp, UTF-8)

Nhưng tóm lại AutoCAD.NET là gì, tương tác với AutoCAD như thế nào (có phải là 1 modul như VBA không?), cách cách đặt và sử dụng như nào?

Mong những người đi trước đóng góp các hiểu biết của mình (dù là thô sơ hay hiện đại) để những người khác có thể tìm hiểu!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Với sự phát triển ồ ạt và những lợi ích mà .NET mang lại, Autodesk đã có những bước tiến để phát triển VBA lên AutoCAD. NET

Vốn là một người yêu thích VBA, nên khi chuyển qua sử dụng VB.NET (cụ thể là Visual Basic 2008) Jin thấy khả năng hỗ trợ của VB.NET quả đã giúp cho việc viết Code nhẹ nhàng hơn nhiều, bên cạnh đó chương trình cũng mạnh hơn nhờ công cụ truy xuất vào hệ thống hiệu quả.

Trên diễn đàn cũng đã có người post lên sản phẩm của AutoCAD.NET (Ứng dụng AutoCAD .NET: chuyển đổi các bảng mã tiếng Việt thông dụng, Unicode, VNI-Windows, TCVN3(ABC), Unicode tổ hợp, UTF-8)

 

Nhưng tóm lại AutoCAD.NET là gì, tương tác với AutoCAD như thế nào (có phải là 1 modul như VBA không?), cách cách đặt và sử dụng như nào?

 

Mong những người đi trước đóng góp các hiểu biết của mình (dù là thô sơ hay hiện đại) để những người khác có thể tìm hiểu!

Chào Jin Yong

Bạn tham khảo một vài ý về AutoCAD.NET

 

Từ AutoCAD 2010, VBA không còn bao gồm trong gói cài đặt AutoCAD. Nếu bạn muốn tiếp tục sử dụng nó cho 2010 bạn sẽ cần phải lên trang chủ của AutoCAD tải về và cài đặt VBA Enabler. (Có thể) trong tương lai AutoCAD thậm chí sẽ không hỗ trợ VBA ?! ( do Microsoft ngưng cung cấp)

 

AutoCAD cung cấp nhiều cách khác nhau để truy xuất DataBase thông qua các API khác nhau (API viết tắt của Application Programming Interfaces : giao diện lập trình ứng dụng).

VD : AutoLISP và ARX (C++ interface)

Trong khi đó AutoCAD Visual Basic for Applications gọi tắt là VBA giao tiếp với AutoCAD thông qua giao diện ActiveX Automation.

 

Microsoft giới thiệu Môi trường Net (.NET Framework) cho phép bạn có thể sử dụng bất kỳ ngôn ngữ lập trình để tạo ra một ứng dụng .

 

Thông qua .Net, các AutoCAD .NET API cho phép bạn thao tác với giao diện Acad và các tập tin.

AutoCAD .NET API gồm các tập tin DLL khác nhau chứa một loạt các lớp(classes), cấu trúc(structures), phương thức(methods) và các sự kiện( events) cung cấp truy cập vào các đối tượng trong một file bản vẽ hoặc các ứng dụng AutoCAD. 

Các DLL này bao gồm trong gói cài đặt AutoCAD, và mặc nhiên đuợc tự động cài đặt cùng với AutoCAD.

Mỗi tập tin DLL chứa các thành phần của các thư viện khác nhau.

Có hai DLL chính là :

- AcDbMgd.dll : cung cấp các thư viện (hàm) để làm việc với các đối tuợng trong bản vẽ.

- AcMgd.dll : cung cấp các thư viện (hàm) để làm việc với các ứng dụng AutoCAD.

Truớc khi sử dụng các AutoCAD .NET API, chúng ta phải tham chiếu (Add reference) các DLL này vào project

 

Thuận lợi của AutoCAD .NET API là bạn có thể sử dụng bất kì thư viện nào viết trên Môi trường Net.

VD : System.Text, System.Linq, Microsoft.Win32, System.Windows.Forms ... của Microsoft

 

Một số e-book tham khảo trên mạng (nếu bạn nào có xin vui lòng Share) :undecided: :

AutoCAD.NET-Developers-Guide

VB.NET Programming for AutoCAD Customization

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào Jin Yong

Bạn tham khảo một vài ý về AutoCAD.NET

 

Từ AutoCAD 2010, VBA không còn bao gồm trong gói cài đặt AutoCAD. Nếu bạn muốn tiếp tục sử dụng nó cho 2010 bạn sẽ cần phải lên trang chủ của AutoCAD tải về và cài đặt VBA Enabler. (Có thể) trong tương lai AutoCAD thậm chí sẽ không hỗ trợ VBA ?! ( do Microsoft ngưng cung cấp)

 

AutoCAD cung cấp nhiều cách khác nhau để truy xuất DataBase thông qua các API khác nhau (API viết tắt của Application Programming Interfaces : giao diện lập trình ứng dụng).

VD : AutoLISP và ARX (C++ interface)

Trong khi đó AutoCAD Visual Basic for Applications gọi tắt là VBA giao tiếp với AutoCAD thông qua giao diện ActiveX Automation.

 

Microsoft giới thiệu Môi trường Net (.NET Framework) cho phép bạn có thể sử dụng bất kỳ ngôn ngữ lập trình để tạo ra một ứng dụng .

 

Thông qua .Net, các AutoCAD .NET API cho phép bạn thao tác với giao diện Acad và các tập tin.

AutoCAD .NET API gồm các tập tin DLL khác nhau chứa một loạt các lớp(classes), cấu trúc(structures), phương thức(methods) và các sự kiện( events) cung cấp truy cập vào các đối tượng trong một file bản vẽ hoặc các ứng dụng AutoCAD. 

Các DLL này bao gồm trong gói cài đặt AutoCAD, và mặc nhiên đuợc tự động cài đặt cùng với AutoCAD.

Mỗi tập tin DLL chứa các thành phần của các thư viện khác nhau.

Có hai DLL chính là :

- AcDbMgd.dll : cung cấp các thư viện (hàm) để làm việc với các đối tuợng trong bản vẽ.

- AcMgd.dll : cung cấp các thư viện (hàm) để làm việc với các ứng dụng AutoCAD.

Truớc khi sử dụng các AutoCAD .NET API, chúng ta phải tham chiếu (Add reference) các DLL này vào project

 

Thuận lợi của AutoCAD .NET API là bạn có thể sử dụng bất kì thư viện nào viết trên Môi trường Net.

VD : System.Text, System.Linq, Microsoft.Win32, System.Windows.Forms ... của Microsoft

 

Một số e-book tham khảo trên mạng (nếu bạn nào có xin vui lòng Share) :undecided: :

AutoCAD.NET-Developers-Guide

VB.NET Programming for AutoCAD Customization

 

Cảm ơn bạn gia_bach vì những thông tin trên.

Sau khi tìm hiểu thì Jin có biết thêm rằng có thể sử dụng chính VB8 để viết một ứng dụng AutoCAD.NET

Chương trình được xuất ra có dạng *.dll và được load vào CAD bằng lệnh NetLoad

 

Jin còn thắc mắc một vấn đề:

1 file VBA có thể bao gồm nhiều Sub, như thế trong 1 file VBA sẽ bao gồm nhiều ứng dụng (thông qua các Sub), trong khi một ứng dụng .Net thì chỉ là một chương trình đơn lẻ duy nhất.

Jin hiểu như thế có đúng không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các anh chị tham "khổ" cái này, em mới tậu được nhưng mà ebook có nội dung "sơ lược" quá không nhiều mấy:

Link: http://www.mediafire.com/?9zwahcejr3hwle0

eBook của bạn viết về VB.Net (chung cho tất cả lĩnh vực), ebook tôi giới thiệu viết về Lập trình trên AutoCad .NET

 

 

Cảm ơn bạn gia_bach vì những thông tin trên.

Sau khi tìm hiểu thì Jin có biết thêm rằng có thể sử dụng chính VB8 để viết một ứng dụng AutoCAD.NET

Chương trình được xuất ra có dạng *.dll và được load vào CAD bằng lệnh NetLoad

 

Jin còn thắc mắc một vấn đề:

1 file VBA có thể bao gồm nhiều Sub, như thế trong 1 file VBA sẽ bao gồm nhiều ứng dụng (thông qua các Sub), trong khi một ứng dụng .Net thì chỉ là một chương trình đơn lẻ duy nhất.

Jin hiểu như thế có đúng không?

- trong khi một ứng dụng .Net thì chỉ là một chương trình đơn lẻ duy nhất?

 

Commands and AutoLISP® functions can be defined with the AutoCAD .NET API through the use of two attributes: CommandMethod and LispFunction.

Trong 1 ứng dụng có thể bao gồm nhiều lệnh và hàm Lisp.

 

Code VB.Net :

Public Class Class1
   'CMD 1
   <CommandMethod("HelloWorld")> _
   Public Sub HelloWorld()
       Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
       ed.WriteMessage("\nChào mừng đến với AutoCad .Net API")
   End Sub

   'CMD 2
   <CommandMethod("getPoint")> _
   Public Sub Asdkcmd1()
       Dim prPointOptions As PromptPointOptions = New PromptPointOptions("\nChọn điểm :")
       Dim prPointRes As PromptPointResult
       Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
       prPointRes = ed.GetPoint(prPointOptions)
       If prPointRes.Status <> PromptStatus.OK Then
           Return
       End If

       ed.WriteMessage("\nTọa độ diểm : " & prPointRes.Value.ToString)
   End Sub

   'CMD 3
   <CommandMethod("getDistance")> _
   Public Sub getdistance()
       Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
       Dim prDistOptions As PromptDistanceOptions = New PromptDistanceOptions("\nSelect first point:")
       Dim prDistRes As PromptDoubleResult
       prDistRes = ed.GetDistance(prDistOptions)
       If prDistRes.Status <> PromptStatus.OK Then
           Return
       End If

       ed.WriteMessage("\nKhoảng cách là : " & prDistRes.Value.ToString)
   End Sub

End Class

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Commands and AutoLISP® functions can be defined with the AutoCAD .NET API through the use of two attributes: CommandMethod and LispFunction.

Trong 1 ứng dụng có thể bao gồm nhiều lệnh và hàm Lisp.

Như lời bạn đã từng hứa trong bài viết về ứng dụng chuyển mã,

mong bạn gia_bach có thể bắt đầu những bài viết của mình về AutoCAD.NET cho Jin và mọi người có thể tìm hiểu.

Có thể viết theo ý bạn, hoặc đơn giản là một ví dụ đầu tiên về vẽ một lệnh Line đi.

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Do không thấy phản hồi của gia_bach, đồng thời cũng muốn chia sẻ cũng như muốn kiểm lại thông tin vừa thu nhận được, Jin sẽ bắt đầu trình bày về AutoCAD. NET.

Các bài viết được trình bày trên cơ sở người dùng sử dụng ngôn ngữ Visual Basic. NET

Do hiểu biết hạn hẹp nên mong các tiền bối bỏ quá và đóng góp các ý kiến để Jin sửa sai cho chính mình.

 

 

1. Cơ bản về AutoCAD. NET

 

AutoCAD.NET = .NET + AutoCAD Libraries

AutoCAD. NET thực chất là sử dụng các phần mềm lập trình .NET trên cơ sở tham chiếu các thư viện của AutoCAD (các file *.dll do AutoCAD cung cấp) để tạo ra các sản phẩm ứng dụng dưới dạng *.dll. Các ứng dụng này sau khi được khai báo trong AutoCAD bằng lệnh NetLoad, sẽ được thực thi bằng cách gọi các lệnh đã được định nghĩa (lập trình).

 

AutoCAD. NET khác VBA ở điểm nào?

Chính là việc thay vì là 1 modul của AutoCAD như VBA (các lệnh VBA cần được soạn thảo bằng VBA Editor trong CAD, lưu lại dưới dạng *.dvb), AutoCAD.NET sử dụng chính các phần mềm lập trình thông dụng như Visual Basic 8.0 để làm chương trình soạn thảo, tất nhiên là với điều kiện phải tham chiếu các thư viện của CAD vào VB8. Bằng cách đó, bạn sẽ:

- Có một sản phẩm mạnh hơn. Hẳn như các bạn còn nhớ, tạo Form trong VBA rất khổ sở

- Dễ dàng lập trình hơn. Vì bản thân VB8 hỗ trợ rất mạnh mẽ cho công tác lập trình

- Sản phẩm quá pro dưới dạng *.dll. Vì như chúng ta vẫn nhớ, load file *.dvb khá chậm

 

Làm việc đó như thế nào?

Bạn sạn thảo chương trình bằng VB8 (bản Microsoft Visual Basic 2008 Express Edition hiện nay đang được Microsoft cung cấp Free). Nhưng thay vì lựa chọn tạo một Windows Forms Application (sản phẩm là file *.exe), bạn hãy chọn Class Library để tạo ra một sản phẩm *.dll. Việc tiếp theo là phải tham chiếu (Reference) 2 file AcDbmgd.dllAcmgd.dll để có thế sử dụng các lệnh với AutoCAD, nói cách khác là biến VB8 thành VBA đời cao.

 

Sản phẩm là gì?

Sản phẩm của AutoCAD.NET (hay chính là VB8 đã tham chiếu file thư viện của CAD) là file *.dll

File này làm việc y như *.lsp

Nghĩa là nếu trong AutoLisp, bạn sử dụng cú pháp defun c: để khai báo 1 lệnh thì trong VB8 sẽ là CommandMethod. Một file *.dll sẽ có thể bao gồm nhiều lệnh như file *.lsp, và các file *.dll này sau khi được load bằng lệnh NetLoad thì nó làm việc cũng như file *.lsp (có điều sức mạnh thì... he he)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

2. Khởi tạo một dự án

 

1. Khởi động VB8 với lựa chọn Class Library trong hộp thoại New Project

 

89640170.jpg

 

 

2. Trong VB8, ở cửa sổ Solution Explorer, chọn Show All Files

 

59613550.jpg

 

 

3. Click chuột phải vào mục References, chọn Add References, trong hộp thoại Add Reference chuyển sang Tab Browse, chọn 2 file acdbmgd.dll acmgd.dll trong thư mục AutoCAD (Ví dụ C:\Program Files\Autocad 2009)

 

66132995.jpg

 

Và sau đây là đoạn mã đầu tiên...

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có lẽ một số bạn đã nghiên cứu AutoCAD.NET, cho mình hỏi một tý :

- Giữa AutoCAD.NET và ObjectARX(hình như chỉ viết trên VC++) có gì khác nhau, Ưu khuyết điểm của chúng, cái nào mạnh hơn, cái nào chạy nhanh hơn.

- AutoCAD.NET có thể lập trình trên VB7, VC7 ... trở lên (riêng Delphi 2009 không biết có đc không) và nó chạy với cad dưới dạng một thư viện (liên kết động) chứ kg phải là một ứng dụng độc lập phải kg

- AutoCAD.NET có phụ thuộc phiên bản không? File dll đã biên dịch trên thư viện cad 2008 có chạy đc trên cad2010 kg?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Có lẽ một số bạn đã nghiên cứu AutoCAD.NET, cho mình hỏi một tý :

- Giữa AutoCAD.NET và ObjectARX(hình như chỉ viết trên VC++) có gì khác nhau, Ưu khuyết điểm của chúng, cái nào mạnh hơn, cái nào chạy nhanh hơn.

- AutoCAD.NET có thể lập trình trên VB7, VC7 ... trở lên (riêng Delphi 2009 không biết có đc không) và nó chạy với cad dưới dạng một thư viện (liên kết động) chứ kg phải là một ứng dụng độc lập phải kg

- AutoCAD.NET có phụ thuộc phiên bản không? File dll đã biên dịch trên thư viện cad 2008 có chạy đc trên cad2010 kg?

 

1. Rất tiếc mình chưa nghiên cứu về ObjectARX nên không thể có câu trả lời về vấn đề này

2. AutoCAD.NET không phải là một phần mềm lập trình, AutoCAD.NET thực chất là dùng công nghệ .NET để lập trình cho CAD, nó chính là VBA, nhưng khác VBA ở chỗ nõ không nằm trong AutoCAD. Xin nhắc lại rằng AutoCAD.NET thực chất là dùng các phần mềm lập trình theo công nghệ .NET (Visual Basic. NET, Visual C.NET...) rồi liên kết với các file *.dll của AutoCAD để có thể viết các lệnh về CAD.

3. Trong cuốn hướng dẫn về AutoCAD. NET, có đề cập đến vấn đề phiên bản, ở đó nói rằng: đối với CAD2010 thì sử dụng VB8, còn với CAD2007 đến CAD2009 thì sử dụng VB5. Trên thực tế Jin vẫn đang dùng VB8, và File *.dll xuất ra vẫn chạy được trên CAD2007 và CAD2009. Vẫn biết rằng các đời CAD khác nhau thì các file *.dll (sử dụng làm thư viện) của CAD cũng khác nhau, nhưng Jin nghĩ là về cơ bản cốt lõi của CAD vẫn không thay đổi, nên sự khác biệt về phiên bản chắc không gấy khó khăn gì.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Jin định viết các ví dụ, nhưng nhận ra cuốn AutoCAD .NET Developer's Guide đã trình bày khá cụ thể những vấn đề cơ bản.

Bản PDF: http://www.scribd.com/doc/19381092/AutoCAD...evelopers-Guide

Bản Online (rất tiện để tra cứu): http://docs.autodesk.com/ACD/2010/ENU/Auto...uide/index.html

 

Ví dụ để add một đường Line vào trong bản vẽ thì đoạn mã được trình bày như sau: http://docs.autodesk.com/ACD/2010/ENU/Auto...uide/index.html

 

Ban đầu thì viết mã với AutoCAD. NET có vẻ mang tính thủ tục phiền phức một chút. Nhưng sau khi viết một vài ứng dụng, hiểu sâu thêm một chút thì bạn sẽ thấy CAD tổ chức cơ sở dữ liệu rất chặt chẽ, và vì tính chặt chẽ minh bạch nên mọi thứ sẽ dễ nắm bắt và vận dụng thôi.

  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1. Rất tiếc mình chưa nghiên cứu về ObjectARX nên không thể có câu trả lời về vấn đề này

2. AutoCAD.NET không phải là một phần mềm lập trình, AutoCAD.NET thực chất là dùng công nghệ .NET để lập trình cho CAD, nó chính là VBA, nhưng khác VBA ở chỗ nõ không nằm trong AutoCAD. Xin nhắc lại rằng AutoCAD.NET thực chất là dùng các phần mềm lập trình theo công nghệ .NET (Visual Basic. NET, Visual C.NET...) rồi liên kết với các file *.dll của AutoCAD để có thể viết các lệnh về CAD.

3. Trong cuốn hướng dẫn về AutoCAD. NET, có đề cập đến vấn đề phiên bản, ở đó nói rằng: đối với CAD2010 thì sử dụng VB8, còn với CAD2007 đến CAD2009 thì sử dụng VB5. Trên thực tế Jin vẫn đang dùng VB8, và File *.dll xuất ra vẫn chạy được trên CAD2007 và CAD2009. Vẫn biết rằng các đời CAD khác nhau thì các file *.dll (sử dụng làm thư viện) của CAD cũng khác nhau, nhưng Jin nghĩ là về cơ bản cốt lõi của CAD vẫn không thay đổi, nên sự khác biệt về phiên bản chắc không gấy khó khăn gì.

Cám ơn Jin. Mình cũng có vài điều muốn bày tỏ:

Trước nay, ngoài lisp, mình chỉ biết có hai kỹ thuật đang đc dùng để viết ứng dụng hỗ trợ cad. Đó là : liên kết động (viết theo ARX) và ActiveX Automation (viết trên VBA, VB, Delphi ...). Trong hai kỹ thuật trên, về sức mạnh thì có vẻ như nhau, đều do người lập trình tận dụng những thê mạnh của ngôn ngữ để tạo ra ứng dụng của mình. Nhưng về tốc độ, thì liên kết động nhanh hơn nhiều.

Nhưng với công nghệ AutoCAD.NET, mình kg hiểu nó đã dùng kỹ thuật nào trong hai kỹ thuật trên hay là một kỹ thuật khác nữa. Hiện nay trên nền .NET, các ngôn ngữ chỉ khác nhau về cú pháp, còn về sức mạnh và tốc độ thì đều như nhau. vỉ khi biên dịch chúng có cùng bộ mã (kiểu như mả code của java). Nếu bạn lập trình chỉ phục vụ những công việc đơn giản thì kg quan trọng, nếu bạn lập trình với qui mô lớn, phải giải quyết nhiều bài toán phức tạp, lựa chọn công nghệ phải đc nghĩ đến. Mình thấy các phần mềm lớn viết trên cad thường sd ARX hơn là ActiveX Automation

Những điều nói trên mình chỉ nói theo hiểu biết hết sức nghiệp dư của mình, có gì kg đúng mong các bạn chỉ giáo thêm

Mình thấy có 1 địa chỉ tranh luận khá nhiều về ARX và .NET nhưng kg hiểu sao lại kg tiếp tục nữa, các bạn có thể tham khảo để có thêm thông tin http://www.ketcau.com/forum/printthread.php?t=1828&pp=20

và ở đây http://vi.ketcau.wikia.com/wiki/ObjectARX

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình cũng đang chuyển hướng nghiên cứu sang cái này, cảm ơn gia_bach và Jin Yong rất nhiều, bài viết của các bạn rất hay.

Tài liệu về autocad.net hiên tại cũng ko nhiều, toàn phải đọc online và toàn tiếng Anh. Có bản PDF dọc offline thì tốt quá!

Đây là 1 số trang web về autocad.net:

- diễn đàn: http://forums.autodesk.com/t5/NET/bd-p/152

- Các bạn vào đây: http://usa.autodesk.com/adsk/servlet/index...&id=1911627

download file: AutoCAD 2011 .Net Wizards.zip , trong đó là file setup cái Temp Autocad cho các dự án khi mở bằng VB.Net, đỡ mất công khi tạo 1 dự án mới phải add lại mấy cái .Ddll của cad

 

- Rất mong gia_bach, Jin Yong và diễn đàn có những bài viết chất lượng để mọi người có thể tiếp cận với ngôn ngữ này dễ hơn.

Mình có đọc qua cuốn Lập trình VBA cho Excel của tác giả Phan Tự Hướng, hay tài liệu Tự Động Hóa TK Cầu Đường, rất rõ ràng và dễ học. Thông qua diễn đàn, mình mong đợi Việt Nam sẽ có những cuốn tài liệu về Autocad. Net bổ ích như vậy. Chân thành càm ơn!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nhìn chung viết code cho AutoCAD. NET sẽ phiền phức dài dòng hơn một chút.

Bạn luôn phải sử dụng một Transaction để làm bất cứ một việc gì đó, và phải luôn kết thúc bằng Transaction.Commit() để hoàn tất việc cập nhật dữ liệu

Với VBA, để tạo một đường Line, tất cả những điều bạn cần làm là:

Sub Add_Line(X1, Y1, X2, Y2, tLayer)

Dim tLine As AcadLine

Dim P1(0 To 2) As Double

Dim P2(0 To 2) As Double

P1(0) = X1: P1(1) = Y1

P2(0) = X2: P2(1) = Y2

Set tLine = ThisDrawing.ModelSpace.AddLine(P1, P2)

tLine.Layer = tLayer

End Sub

Nhưng trong .NET, bạn phải truy cập vào dữ liệu chứa các đối tượng đồ họa: BlockTable, các đối tượng đồ họa (Line, Circle, Dim, Text ...) được ghi trong bảng này bằng các dòng (giống như file *.MDB của Microsoft Access vậy). Bạn không nhất thiết phải hiểu hết cấu trúc của các dòng dữ liệu này, nên việc cần làm để thêm dữ liệu (thêm các đối tường đồ họa) chính là phải khai báo một biến có cấu trúc như thế, và trong AutoCAD.NET, biến đó sẽ có kiểu: BlockTableRecord.

 

Chính vì dữ liệu trong AutoCAD.NET được sắp xếp là các bảng, nên làm bất cứ việc gì bạn cũng phải truy cập vào các bảng. Các bảng dữ liệu thường xuyên phải truy cập là: BlockTable (đối tượng đồ họa như đã nêu trên), DimStyleTable (chứa các kiểu Dim), TextStyleTable (Chứa các kiểu Text). Chẳng hạn nếu bạn muốn gán kiểu Dim cho đường Dim vừa mới tạo ra, trong VBA chỉ đơn giản là:

dimObj.StyleName = "D200"

Trong khi đó, với AutoCAD.NET, bạn phải truy cập vào DimStyleTable, lấy ID của kiểu dim D200, sau đó gán ID đó cho đường Dim vừa tạo

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào các bạn.

Thấy diễn đàn vui vẻ quá nên mình cũng muốn góp vui một tý chút. Mình muốn trao đổi về một số loại công cụ lập trình mở rộng cho AutoCAD.

- AutoLisp hay hiện nay là Visual Lisp: các bạn cũng biết rồi, gồm những mã lệnh của được lưu trong file .lsp. Khi dùng ứng dụng này, phải tải vào CAD và được CAD thông dịch các mã lệnh để thực thi.

- VBA: là một mô đun lập trình có thể được tích hợp hay không tích hợp vào CAD. Mô đun này chứa môi trường lập trình VBAIDE. Ứng dụng viết từ VBA chưa được dịch (gồm các mã lệnh Visual Basic được chứa trong các module, class module hay form). Khi ứng dụng kiểu này được tải vào CAD và chạy: nó sẽ được trình dịch VBRuntime thông dịch. Việc kết nối giữa ứng dụng VBA và CAD (gọi là ứng dụng chủ hay host application) thực hiện thông qua cơ chế COM (Component Object Model)

- ObjectArx: công cụ lập trình cho phép tạo ra các thư viện .arx. Thực chất đây là các thư viện liên kết động đã được biên dịch sang mã nhị phân (tương tự như các thư viện .dll truyền thống trong Win9x hoặc WinXP). Vì vậy tốc độ thực thi của các ứng dụng này là rất cao. Các ứng dụng ARX tương tác với CAD bằng các API và có khả năng can thiệp rất sâu vào AutoCAD. Tuy nhiên công cụ ObjARX tương đối khó học và phải dùng ngôn ngữ C++ để phát triển

- .NET API: công cụ lập trình cho phép tạo ra các thư viện dạng .dll. Tuy nhiên có vài điểm khác so với .arx, thư viện .NET là dạng thư viện động dạng gói kết hợp (assembly) và ở dạng mã trung gian (IL). Các thư viện này sẽ được .NẺT Framework dịch sang mã máy khi thực thi. Tốc độ của ứng dụng .NET API cho AutoCAD cũng rất cao (vì các mã IL rất gần gũi với mã máy). Một điểm khác của .NET API so với ObjARX là việc kết nối với AutoCAD mặc dù cũng được thực hiện qua các API nhưng các API này ở dạng thư viện lớp đã được đóng gói (Wrapped Class) và sử dụng bộ nhớ có quản lý (managed code). Việc các bạn phải tham chiếu tới "acmgd.dll" (viết tắt của Managed Autocad) và "“acdbmgd.dll” (viết tắt của Managed Autocad database) chính là vì lý do này.

Ngôn ngữ sử dụng cho .NET API với AutoCAD là các ngôn ngữ khá dễ học như CSharp hoặc VB. NET và sử dụng môi trường lập trình Visual Studio .NET rất thân thiện với người dùng.

Có bạn nói ".NET API chính là VBA" chưa chính xác. Về mặt cơ chế làm việc và tạo ứng dụng thì .NET API giống ObjectARX và VB Automation nhiều hơn là VBA.

Vì rất nhiều ưu điểm như: hướng đối tượng hoàn toàn, ngôn ngữ lập trình và môi trường lập trình thân thiện, tốc độ biên dịch và thực thi cao nên .NET API là một công cụ rất được Autodesk tập trung phát triển (không chỉ cho AutoCAD mà hầu hết các sản phẩm khác như Revit, Civil 3D) và hứa hẹn sẽ rất phổ biến.

 

- Ngoài ra, còn một loại công cụ mới hơn đang được Autodesk triển khai cho các sản phẩm của mình: VSTA (Visual Studio Tools for Application). Công cụ này tương tự như VSTO trong MS Office. Công cụ này được dự định sẽ thay thế cho VBA (công cụ mà hãng có thể không hỗ trợ và cài đặt cùng AutoCAD trong tương lai)

 

Các bạn nên chọn loại công cụ lập trình nào tùy theo khả năng của mình, nhu cầu của mình về ứng dụng mở rộng. Mình cũng dùng qua tất cả các công cụ trên và thấy NET API là công cụ rất tốt và hợp lý nhưng nhiều khi với Script, AutoLisp hoặc VBA bạn cũng có thể tạo ra các ứng dụng thỏa mãn các yêu cầu của mình mà lại tốn ít thời gian nghiên cứu hơn (mình đang nói dưới góc độ của một kỹ sư xây dựng - chuyên môn là số 1).

 

Hy vọng kiến thức ít ỏi của mình sẽ góp phần nào đó vào diễn đàn.

 

PS: Về tài liệu cho .NET API với AutoCAD bạn có thể vào Website của autodesk để download như một bạn đã viết ở trên nhưng mình muốn bổ sung thêm một số chi tiết:

- Trong bộ cài đặt ObjArx ngoài các có thể có chứa các file .chm cho cả ObjectArx và .NetAPI để các bạn đọc offline.

- Các bạn có thể tải thêm "autocad_2010_dotnet_training" và DevTV_Introduction_to_AutoCAD_NET_Programming (chứa cả video hướng dẫn) để học hiệu quả hơn.

- Các bạn có thể đăng ký các buổi webcast hoặc đặt các câu hỏi trên autodesk university. Món này rất hay đấy.

  • Vote tăng 6

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
......

Một số e-book tham khảo trên mạng (nếu bạn nào có xin vui lòng Share) :lol: :

AutoCAD.NET-Developers-Guide

Sau 1 hồi lang thang trên mạng -> Tìm cách đăng kí tài khoản trên facebook và "lần mò" tìm cách down load cuốn sách này. Được sự giúp đỡ của bạn svba1608, anh gia_bach Tue_NV đã download được cuốn AutoCAD-NET-Developers-Guide lưu dưới dạng file pdf.

Tue_NV upload cuốn sách này lên đây để các bạn tiện việc học tập và tra cứu

AutoCAD-NET-Developers-Guide

 

Hy vọng được thảo luận về đề tài này nhiều hơn nữa

Cảm ơn anh gia_bach, em svba1608 rất nhiều

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Như lời bạn đã từng hứa trong bài viết về ứng dụng chuyển mã,

mong bạn gia_bach có thể bắt đầu những bài viết của mình về AutoCAD.NET cho Jin và mọi người có thể tìm hiểu.

Có thể viết theo ý bạn, hoặc đơn giản là một ví dụ đầu tiên về vẽ một lệnh Line đi.

Mình cũng đã viết một đoạn cho VB.net nhưng vấn đề thực sự mình cảm thấy khó khăn nhất là kiểm soát lỗi trong VB.Net.

- Đối VBA viết code kiểm tra lỗi khá dễ dàng khi chạy thử.

- Nhưng VB.Net thì không biết cách xứ lí thế nào.Mình phải tạo ra 1 file .dll rồi chạy => không thể kiểm soát được code.

Có ai giúp mình với.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

VB.Net cũng có thể chạy thử

Mình cũng đã viết một đoạn cho VB.net nhưng vấn đề thực sự mình cảm thấy khó khăn nhất là kiểm soát lỗi trong VB.Net.

- Đối VBA viết code kiểm tra lỗi khá dễ dàng khi chạy thử.

- Nhưng VB.Net thì không biết cách xứ lí thế nào.Mình phải tạo ra 1 file .dll rồi chạy => không thể kiểm soát được code.

Có ai giúp mình với.

 

VB.Net cũng có thể chạy thử, nếu bạn dùng Visual Studio 8.0, bằng cách thiết lập như sau:

- Vào menu Tools -> [Tên chương trình] Properties

- Vào tab Debug, mục Start Action, chọn Start external program, chọn đường dẫn tới Autocad.exe (như hình dưới)

 

debug.png

 

Như vậy, mỗi lần bạn Run (F5), VB sẽ tự bật Autocad lên, nhiệm vụ của bạn là dùng lệnh Netload để load file Dll của bạn (bạn cũng có thể đặt đường dẫn và dùng lisp trong autocad để tự thực hiện khâu netload).

Nó khác cách thông thường ở chỗ bạn không nhất thiết tắt Autocad mỗi lần biên dịch, cũng như khi gặp lỗi nó sẽ hiện lên trong chương trình VB

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác cho em hỏi 3 câu với, thời gian tới chuyển sang em này cho hiện đại ^^ :

1- Với 1 file DLL định nghĩa các command methods, khi cung cấp cho người dùng, làm cách nào để người ta có thể thay nó bằng lệnh khác ?

2- Autocad.Net cung cấp khả năng Reactor như VBA ? Và cho e xin 1 ví dụ cách gọi nó ?

3- 1 Private / Public function trong 1 file DLL (đã Load) có thể bị ghi đè bởi 1 Public Function khác cùng tên không ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác cho em hỏi 3 câu với, thời gian tới chuyển sang em này cho hiện đại ^^ :

1- Với 1 file DLL định nghĩa các command methods, khi cung cấp cho người dùng, làm cách nào để người ta có thể thay nó bằng lệnh khác ?

2- Autocad.Net cung cấp khả năng Reactor như VBA ? Và cho e xin 1 ví dụ cách gọi nó ?

3- 1 Private / Public function trong 1 file DLL (đã Load) có thể bị ghi đè bởi 1 Public Function khác cùng tên không ?

1.làm cách nào để thay nó bằng lệnh khác ?

- dùng LISP : tương tự như việc định nghĩa lại 1 lệnh CAD

 

2. Reactor : tương tự như VBA, .Net gọi nó là Event

- Vd từ Help :

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices

<CommandMethod("AddDocEvent")> _
Public Sub AddDocEvent()
 '' Get the current document
 Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

 AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

<CommandMethod("RemoveDocEvent")> _
Public Sub RemoveDocEvent()
 '' Get the current document
 Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

 RemoveHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

Public Sub docBeginDocClose(ByVal senderObj As Object, _
                       	ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs)

 '' Display a message box prompting to continue closing the document
 If System.Windows.Forms.MessageBox.Show( _
                 	"The document is about to be closed." & _
                 	vbLf & "Do you want to continue?", _
                 	"Close Document", _
                 	System.Windows.Forms.MessageBoxButtons.YesNo) = _
                 	System.Windows.Forms.DialogResult.No Then
 	docBegClsEvtArgs.Veto()
 End If
End If

 

3. Anh không chắc lắm (chưa có th/gian kiểm chứng) nhưng nếu để private khả năng ghi đè là rất khó ?!

Vì muốn làm được điều này phải biết rõ ràng cội nguồn gốc gác của nó (nhưng trong "lý lịch" nó để private làm sao mà tra cứu được)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1.làm cách nào để thay nó bằng lệnh khác ?

- dùng LISP : tương tự như việc định nghĩa lại 1 lệnh CAD

 

 

2. Reactor : tương tự như VBA, .Net gọi nó là Event

- Vd từ Help :

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices

<CommandMethod("AddDocEvent")> _
Public Sub AddDocEvent()
 '' Get the current document
 Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

 AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

<CommandMethod("RemoveDocEvent")> _
Public Sub RemoveDocEvent()
 '' Get the current document
 Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

 RemoveHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

Public Sub docBeginDocClose(ByVal senderObj As Object, _
                       	ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs)

 '' Display a message box prompting to continue closing the document
 If System.Windows.Forms.MessageBox.Show( _
                 	"The document is about to be closed." & _
                 	vbLf & "Do you want to continue?", _
                 	"Close Document", _
                 	System.Windows.Forms.MessageBoxButtons.YesNo) = _
                 	System.Windows.Forms.DialogResult.No Then
 	docBegClsEvtArgs.Veto()
 End If
End If

 

3. Anh không chắc lắm (chưa có th/gian kiểm chứng) nhưng khả năng ghi đè là rất khó ?!

Vì muốn làm được điều này phải biết rõ ràng cội nguồn gốc gác của nó (nhưng trong "lý lịch" nó để private làm sao mà tra cứu được)

Cảm ơn bác. Em sẽ xúc tiến dần 1 số lisp sang Net cho nó dân chơi ^^.

3. Vì có thể đọc được code của nó. E ví dụ ở đây là 1 số hàm check lience code dạng Boolean, kết quả trả về True or Flase.

Có khi nào "đè" được nó thành hàm luôn luôn trả True ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

3. Vì có thể đọc được code của nó. E ví dụ ở đây là 1 số hàm check lience code dạng Boolean, kết quả trả về True or Flase.

Có khi nào "đè" được nó thành hàm luôn luôn trả True ?

 

Nếu sử dụng private thì khó mà bị ghi đè, tuy nhiên phần kết quả trả về như bạn nói vẫn có thể thay đổi được bằng kỹ thuật patch (không cần biết đè hay không)

Nói chung, ứng dụng là để dùng và bảo mật là tránh mấy kẻ tò mò, còn gặp thợ thì cũng thua.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có khi cần mở hẳn một topic bàn luận về vấn đề bảo vệ bản quyền! Thực sự rất bức xúc vì những gì mình nghĩ mãi mới được thì bị lấy đi một cách dễ dàng!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×