Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 Gà mờ

Gà mờ

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 October 2011 - 07:34 AM

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
======================================================================
  • 0

#2 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 20 October 2011 - 07:41 AM

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ề...
  • 0

#3 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 20 October 2011 - 09:48 AM

======================================================================
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.
  • 1
Clear sky!

MF Rock collection.

#4 Gà mờ

Gà mờ

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 October 2011 - 10:16 AM

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.
  • 0

#5 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 20 October 2011 - 01:33 PM

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.
  • 1
Clear sky!

MF Rock collection.

#6 Gà mờ

Gà mờ

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 October 2011 - 06:53 AM

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.
  • 0

#7 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 21 October 2011 - 08:31 AM

Bạn bỏ cái vbCrlf đi, đó là kí tự xuống hàng (và về đầu dòng).
  • 0
Clear sky!

MF Rock collection.

#8 Gà mờ

Gà mờ

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 October 2011 - 08:53 AM

Ý 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
  • 0

#9 Gà mờ

Gà mờ

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 22 October 2011 - 02:37 PM

Ai giúp em với
  • 0

#10 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 22 October 2011 - 05:38 PM

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
  • 0
Clear sky!

MF Rock collection.

#11 Gà mờ

Gà mờ

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 October 2011 - 08:20 AM

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.
  • 0