Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Gà mờ

[Hỏi] Lập trình VB.net chạy với mọi phiên bản CAD

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

Em mới chuyển sang ngâm cứu VB.net được 2 ngày, bước đầu nói chung đang chuyển thể dần các app cũ từ VB6, chạy cũng OK rồi.

 

Chỉ có vấn đề là : các app em viết bằng VB6 thì CAD nào cũng chạy được hết trơn, còn chuyển sang VB.net thì chỉ chạy & đọc thông số bản vẽ với CAD2012

 

Em đang dùng CAD 2004 & 2012 song song.

 

Có cách nào để ứng dụng VB.net có thể chay được với mọi phiên bản CAD không các bác.

 

======================================================================

Với VB6 : thì toàn bộ các biến liên quan đến CAD em đều khai báo Object

Ví dụ

Dim AcadApp as Object

======================================================================

Với VB.net thì em đặt cái này ở đầu form (tham khảo trên mạng nên cũng chưa hiểu cặn kẽ lắm)

 

Imports Autodesk.AutoCAD.Interop

Imports Autodesk.AutoCAD.Interop.Common

Public WithEvents AcadApp As Autodesk.AutoCAD.Interop.AcadApplication

======================================================================

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 nghĩ nếu đã khai báo muộn thì bạn không nên import thư viện cad vào vì như vậy là bạn đã import thư việc cad nhất định(2012) vào dự án của bạn nên khi chạy chương trình chỉ nhận được một một phiên bản cad đó mà thôi. dùng .net hơi phức tạp ngày trước mình cũng đã dùng và thấy nó có nhiều ưu điểm hơn 6.0(ít nhất là phần giao diện-mình mới chỉ nghiên cứu đến đó), vì nó phức tạp nên mình thấy ngại và quay lại về 6.0 hề hề hề...

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 VB6 : thì toàn bộ các biến liên quan đến CAD em đều khai báo Object

Ví dụ

Dim AcadApp as Object

======================================================================

 

Nếu VB6 như thế thì VB.NET bạn cũng dùng như thế.

Đừng import các thư viện của CAD vào, như vậy sẽ chạy với mọi phiên bản AutoCAD và đặc biệt là với GCAD luô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

Oh, em cũng nghĩ do phần khai báo, mà qua VB.net thấy tiện nên để vậy luôn, hóa ra là vậy, cảm ơn bác nhiều

 

Ah cho em hỏi ngoài lề chút :

Thủ tục

============================================

On Error Resume Next

AcadApp = GetObject(, "AutoCAD.Application")

 

If Err.Number 0 Then

Err.Clear()

AcadApp = CreateObject("AutoCAD.Application")

End If

============================================

Dùng để kiểm tra xem CAD có mở không khi chạy chương trình, mà khi dùng thì em thấy chạy lúc được lúc không, ví dụ :

- Chạy lần 1 (chưa mở CAD) - app tự mở

- Tắt đi chạy lại (CAD cũng tắt luôn) gặp lỗi không tự mở CAD lên

- Lại tắt mở lại lần 3 (chưa mở CAD) - app lại tự mở CAD được.

- Etc ... nghĩa là lần được lầ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

qua VB.Net bạn không nên dùng On error resume next nữa mà nên dùng cú pháp Try Catch End Try để bắt lỗi.

 

VD: Khởi động và liên kết với GCAD Star, AutoCAD cũng tương tự:

 

DIm CadApp as Object

Try

CadApp = GetObject(,"GCAD.Application")

Catch

CadApp = CreateObject("GCAD.Application")

End try

 

Mặc định bản Acad/Gcad sẽ không hiển thị, vì thế phải dùng lệnh CadApp.Visible = True sau đó.

 

Trong khi chạy thử, bạn đã vô tình tạo ra một số phiên (session) của Cad chạy ở background, nên cái dòng GetObject kia sẽ liên kết với phiên đang ẩn --> Đã có liên kết nhưng bạn không trông thấy được.

 

Dùng TaskManager đóng hết các session đang chạy của CAD. rồi chạy lại.

 

Bài hướng dẫn VB.NET cho AutoCAD ở đây, tất cả đều áp dụng được cho GCAD.

  • 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

Cái link trên em cũng xem rồi, có điều gà mờ như em nhìn hoa cả mắt, bác thông cảm.

 

Cho em hỏi thêm điều này

 

Đoạn mã LISP lấy 2 điểm trên bản vẽ :

======================================

(setq pt1 (getpoint "\nChọn điểm thứ nhất :")

(setq pt2 (getpoint pt1 "\nChọn điểm thứ hai :")

======================================

Dòng lệnh CAD hiển thị :

======================================

Command :

Chọn điểm thứ nhất :

Chọn điểm thứ hai :

======================================

 

Cùng mục đích như trên, với VB.net thì

======================================

pt1 = AcadApp.ActiveDocument.Utility.GetPoint(, vbCrLf & "Chọn điểm thứ nhất : ")

pt2 = AcadApp.ActiveDocument.Utility.GetPoint(pt1, vbCrLf & "Chọn điểm thứ hai : ")

======================================

Và dòng lệnh CAD hiển thị :

======================================

Command:

Chọn điểm thứ nhất :

Command:

Chọn điểm thứ hai :

======================================

 

Tức là cứ sau khi gửi một lệnh đến CAD thì VB xem như kết thúc một lệnh và cái chữ Command hiển thị đều đặn sau mỗi một lệnh đó, có cách nào cho nó hiển thị như với LISP không bác.

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

Ý em không phải là xuống hàng mà là cái chữ "Command :" nó cứ hiện ra ngay sau lệnh trong khi với LISP thì không

 

======================================

Command: Chọn điểm thứ nhất :

Command: Chọn điểm thứ hai :

======================================

 

Có bỏ đi nữa thì nó cũng thế này, trông rất khó chịu

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

Thế mạnh của vb.net là giao diện riêng dễ tùy biến. Phần thể hiện trong cad như kia chỉ là chuyện vặt. Nên chú trọng GUI của mình

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

Thôi để em nghiên cứu thêm rồi phản hồi lại cho bác.

 

Có lẽ bác lập trình chuyên về xử lý nên ít gặp những vấn đề về cách thể hiện, thực sự nhìn dòng lệnh nó nhảy như thế rất là rối mắt, hix

 

PS : Em vẫn không tóm được thằng CAD cho nó hiện lên, set thuộc tính Visible = True mà nó vẫn cứ trơ trơ mặc dù kiểm tra trong Task Manager thì CAD đã kích hoạt.

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
Đăng nhập để thực hiện theo  

×