Đến nội dung


Hình ảnh
- - - - -

Lập trình VB.NET với AutoCAD


  • Please log in to reply
11 replies to this topic

#1 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 December 2007 - 02:14 PM

Tôi thấy trong forum này chưa có bàn nhiều về lập trình VB.NET cho AutoCAD.

So với AutoLISP thì VB.NET dễ lập trình hơn và có thể kiểm soát các lỗi dễ dàng hơn. Nhưng tốc độ thì không bằng AutoLISP được vì nó chạy trực tiếp trên nền ACAD.

Các bước khi lập trình với VB.NET(VB 6.0 hoặc Excel.Macro sẽ khác một ít)

Bước 1: Tạo liên kết với AutoCAD (có thể liên kết với bất kỳ version nào của AutoCAD đang cài đặt trên máy)

Dim AcadApp as object
Try
'Xem acad đã chạy chưa
AcadApp = GetObject(, "AutoCAD.Application")
Catch
'Nếu chưa có bản ACAD nào đang chạy thì khởi động ACAD lên
Acad = CreateObject("AutoCAD.Application")
Acad.Visible = True 'Hiện acad lên, nếu không nó sẽ chạy ở background
End Try

Sau khi liên kết chtrình ACAD vào biến AcadApp, từ biến này ta có thể can thiệp vào rất nhiều dữ liệu chứa trong ACAD
VD:
dim acDocs as object = AcadApp.Documents
dim acLayers as object = AcadApp.Layers
dim acTextStyles as object = AcadApp.TextStyles
...

Để tham khảo các thuộc tính, các hàm và các sự kiện của mỗi đối tượng ACAD, xem phần giúp đỡ của ACAD.
Ấn F1, chọn ActiveX Automation & VBA, click tiếp mục ActiveX and VBA Reference.

------------------------------

Bước 2: Can thiệp vào các dữ liệu của AutoCAD

Ứng với mỗi đối tượng, sẽ có nhiều thuộc tính và hàm tương ưng với nó.
VD: đối tượng Layers bao gồm tất cả các layer nằm trong 1 bản vẽ, nó bao gồm
Các hàm
Add 'dùng để thêm một layer mới
GenerateUsageData
GetExtensionDictionary
Item 'lấy dữ liệu của một layer
SetXData
và các thuộc tính
Application 'bản AutoCAD đang chạy
Count 'số lượng layer trong bản vẽ
Document 'bản vẽ đang xét
Handle
HasExtensionDictionary
ObjectID
ObjectName
OwnerID

Như vậy để tắt hết các layer ta sẽ viết code như sau
dim i as integer
dim acLayers as object = acadApp.ActiveDocuments.Layers
dim acEachLayer as object
for i= 0 to acLayers.Count - 1
acLayer = acLayers.Item(i)
acEachLayer.LayerOn = FALSE
next i

Và sẽ còn rất nhiều thứ nữa cần các bạn thử nghiệm và khám phá
  • 3
Clear sky!

MF Rock collection.

#2 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 31 December 2007 - 06:06 PM

Bạn có biết tại sao Microsoft đưa ra dotNET không?
Nếu bạn biết thì có lẽ bạn chẳng đưa bài viết này lên đây đâu
  • 0

#3 phamngocsau

phamngocsau

    biết zoom

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

Đã gửi 31 December 2007 - 10:22 PM

Bạn có biết tại sao Microsoft đưa ra dotNET không?
Nếu bạn biết thì có lẽ bạn chẳng đưa bài viết này lên đây đâu


sao bạn không giải thích dùm luôn đi, mà lại hỏi đố người khác vậy, dĩ nhiên là ko biết lý do thì bạn đó mới gửi lên chứ
bạn giải thích để mọi người hiểu thêm nha.
  • 0

#4 mua_buon12

mua_buon12

    biết vẽ circle

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

Đã gửi 22 October 2009 - 02:56 PM

Dear anhcos & All!

- Trước đây trên forum CADVIET tôi đã được anhcos và mọi người giúp đỡ rất nhiều về lisp/VBA.Hiện tại tôi muốn tìm hiểu về VB.net vì tôi thấy hiện nay mọi người chuyển dần sang VB.net rất nhiều. Tôi mới tìm hiểu nên rất ít tài liệu vì thế tôi rất cần anhcos và mọi người chia sẻ tài liệu. VB.net rất hay. Nếu có thể anhcos hãy cho tôi 1 vài ví dụ cụ thể nhé! ví dụ như: Vẽ 1 poline và viết 1 text tại trung điểm của poline đó. Tôi cảm ơn anhcos và mọi người đã giúp đỡ tôi!
- Ứng dụng của VB.net có chạy được trên AutocadLT 2006 không Anhcos?
  • 0
Khi Lập Trình Kiến Thức Là Một Phần, Nghệ Thuật Mới Là Tất Cả.

#5 mua_buon12

mua_buon12

    biết vẽ circle

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

Đã gửi 24 October 2009 - 12:39 AM

Dear all!
AutoCAD LT không hỗ trợ lập trình bên ngoài.Ok. Tuy nhiên một số chương trình vẫn can thiệp được vào Cad để load Lisp. Ví dụ như Object ARX.Tôi chưa hiểu thuật giải cho bài toán này như thế nào nên nhờ mọi người trên cadviet giúp cho tôi nhé! Ví dụ như để load Lisp cần phải gọi thư viện nào? <Ứng dụng cho AutocadLT>

AutoCAD LT không hỗ trợ lập trình bên ngoài.


  • 0
Khi Lập Trình Kiến Thức Là Một Phần, Nghệ Thuật Mới Là Tất Cả.

#6 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 25 October 2009 - 01:00 PM

ví dụ như: Vẽ 1 poline và viết 1 text tại trung điểm của poline đó.
- Ứng dụng của VB.net có chạy được trên AutocadLT 2006 không?


- Khai báo biến
Giả sử LineObj là thực thể Line và PolyObj là thực thể Polyline
Dim diem_dau(2) As Double
Dim diem_cuoi(2) As Double
Dim trung_diem(2) As Double

'Xác định điểm giữa trong các trường hợp sau:

- Đối với đoạn thẳng
diem_dau = LineObj.StartPoint
diem_cuoi = LineObj.EndPoint

trung_diem(0) = (diem_dau(0) + diem_cuoi(0)) / 2 'X
trung_diem(1) = (diem_dau(1) + diem_cuoi(1)) / 2 'Y

- Đối với PolyLine
'1/2 tổng chiều dài
Dim HalfLen As Double = PolyObj.Length / 2

Dim Count As Integer = PolyObj.Coordinates.Length / 2 ' số điểm của Polyline

Dim LineLen As Double 'chiều dài của đoạn thẳng
Dim AccLen As Double = 0 'chiều dài cộng dồn

'Điểm đầu đoạn thẳng trong poly
diem_dau(0) = PolyObj.Coordinates(0)
diem_dau(1) = PolyObj.Coordinates(1)

'Xác định điểm giữa đang nằm ở đoạn nào trong poly
For i = 0 To Count - 2 'duyệt qua từng đoạn trong poly
'Điểm cuối đoạn thẳng trong poly
diem_cuoi(0) = PolyObj.Coordinates((i + 1) * 2)
diem_cuoi(1) = PolyObj.Coordinates((i + 1) * 2 + 1)

'Chiều dài đoạn
LineLen = Math.Sqrt((diem_dau(0) - diem_cuoi(0)) ^ 2 + (diem_dau(1) - diem_cuoi(1)) ^ 2)

If AccLen + LineLen > HalfLen Then 'Điểm chính giữa nằm trong đoạn này
trung_diem(0) = diem_dau(0) + (diem_cuoi(0) - diem_dau(0)) * (HalfLen - AccLen) / LineLen 'X
trung_diem(1) = diem_dau(1) + (diem_cuoi(1) - diem_dau(1)) * (HalfLen - AccLen) / LineLen 'Y

Exit For
End If

'Còn không thì xét đoạn thẳng kế tiếp
AccLen += LineLen
diem_dau = diem_cuoi.Clone 'điểm cuối của em này là đầu của em kia
Next i

- Cuối cùng vẽ Text tại điểm tìm thấy

Acad.ActiveDocument.ModelSpace.AddText("VD ve Text", trung_diem, 1)


Tôi chưa xài AutoCAD LT bao giờ cả nên không rõ ntn.

  • 0
Clear sky!

MF Rock collection.

#7 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 25 October 2009 - 01:07 PM

AutoCAD LT không hỗ trợ lập trình bên ngoài.


AutoCad LT là bản AutoCad Limited nên mất nhiều tính năng, giá chỉ bằng 36% AutoCad Full. Chẳng ai dùng bản LT làm gì cả trong khi Full phổ biến. Xem thêm ở đây:


http://www.cadtutor......d AutoCAD LT?
  • 0
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#8 mua_buon12

mua_buon12

    biết vẽ circle

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

Đã gửi 26 October 2009 - 07:13 AM

Dear Phantuhuong!
- Đồng ý là CAD LT mất nhiều tính năng tuy nhiên giá một phần mềm full rất đắt. Vì thế dùng full không hiệu quả lắm

AutoCad LT là bản AutoCad Limited nên mất nhiều tính năng, giá chỉ bằng 36% AutoCad Full. Chẳng ai dùng bản LT làm gì cả trong khi Full phổ biến. Xem thêm ở đây:
http://www.cadtutor......d AutoCAD LT?


  • 0
Khi Lập Trình Kiến Thức Là Một Phần, Nghệ Thuật Mới Là Tất Cả.

#9 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 26 October 2009 - 08:01 AM

Dear Phantuhuong!
- Đồng ý là CAD LT mất nhiều tính năng tuy nhiên giá một phần mềm full rất đắt. Vì thế dùng full không hiệu quả lắm


Acad Full có tràn lan khắp nơi.
Tuy nhiên cty tôi đang có kế hoạch trang bị LT bản quyền cho nhân viên.
LT mới có giá < 1K$, chứ bản full cũng > 5K$ rồi.
  • 0
Clear sky!

MF Rock collection.

#10 mua_buon12

mua_buon12

    biết vẽ circle

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

Đã gửi 26 October 2009 - 02:51 PM

Dear anhcos!
Đồng ý với ý kiến của anhcos. Tôi đề xuất ý kiến mong nuốn các cao thủ ObjectARX hãy viết một chương trình Load lisp cho cadLT để mọi người cùng sử dụng.
Theo tìm hiểu của tôi thì chỉ có ObjectARX mới có thể can thiệp vào sâu trong autocad LT


Acad Full có tràn lan khắp nơi.
Tuy nhiên cty tôi đang có kế hoạch trang bị LT bản quyền cho nhân viên.
LT mới có giá < 1K$, chứ bản full cũng > 5K$ rồi.


  • 0
Khi Lập Trình Kiến Thức Là Một Phần, Nghệ Thuật Mới Là Tất Cả.

#11 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 26 October 2009 - 03:25 PM

Dear anhcos!
Đồng ý với ý kiến của anhcos. Tôi đề xuất ý kiến mong nuốn các cao thủ ObjectARX hãy viết một chương trình Load lisp cho cadLT để mọi người cùng sử dụng.
Theo tìm hiểu của tôi thì chỉ có ObjectARX mới có thể can thiệp vào sâu trong autocad LT


AutoCAD có cung cấp sẵn bộ ObjectARX rồi.

Đăng ký và tải phiên bản phù hợp về ở đây:
http://usa.autodesk....?...2&id=785550

Cái này nó có sẵn Help và Example luôn, tuy nhiên nó viết bằng C thì phải.
  • 0
Clear sky!

MF Rock collection.

#12 wendypro

wendypro

    biết pan

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

Đã gửi 21 August 2010 - 07:24 PM

Thanks bạn….!!!!!
-------------------------
Theo doi lich thi dau bong daket qua bong da tại giải bong da anh bạn có thể xem nhanh tin bong da tại bong da 24h…………..!!!!
Theo dõi gia vang hàng tuần………
  • 0