Rated 5/5 based on 240179 internet user reviews

Đến nội dung


Hình ảnh

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


  • Please log in to reply
113 replies to this topic

#41 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

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

Đã gửi 14 March 2011 - 12:21 PM

E không biết tý gì về VB mới chán.
Bác nào cho em biết tổng quát cách sử dụng các lệnh Lặp của VB ( VD: for...., if-then...) :ph34r:
Thanks
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#42 anhcos

anhcos

    biết lệnh properties

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

Đã gửi 14 March 2011 - 02:39 PM

Nếu không biết VB thì nên bắt đầu bằng C# là hay nhất.

Tài liệu hướng dẫn lập trình bằng tiếng Việt ở đây:
- C#
- VB
  • 1
Clear sky!

MF Rock collection.

#43 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 15 March 2011 - 11:03 AM

Cho mình hỏi tại sao trong CommandMethod lại không nhận được Form nhỉ?
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#44 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1297 Bài viết
Điểm đánh giá: 1343 (rất tốt)

Đã gửi 15 March 2011 - 11:14 AM

Cho mình hỏi tại sao trong CommandMethod lại không nhận được Form nhỉ?

Bạn tạ0 1 Form bình thuờng bằng cách Add Form, sau đó gọi lệnh ShowModalDialog(Form) để hiển thị nó.
code VB
<CommandMethod("MODALFORM")> _
Public Sub ShowModalForm()
Dim modalForm As ModalForm = New ModalForm()
Application.ShowModalDialog(modalForm)
End Sub
  • 0

#45 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 15 March 2011 - 11:27 AM

Thế nhưng muốn điều khiển trước các control của form đó thì mình làm thế nào?
Ví dụ mình mình muốn hiển thị hay ko một textbox nào đó của form trước khi cho form hiện ra?
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#46 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 15 March 2011 - 11:34 AM

Lỗi của mình:
Hình đã gửi
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#47 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1297 Bài viết
Điểm đánh giá: 1343 (rất tốt)

Đã gửi 15 March 2011 - 12:22 PM

Thế nhưng muốn điều khiển trước các control của form đó thì mình làm thế nào?
Ví dụ mình mình muốn hiển thị hay ko một textbox nào đó của form trước khi cho form hiện ra?

Sử dụng thuộc tính Visible = true or false để hiển thị hay ko một Control

Lỗi của mình:
Hình đã gửi

Đối số của ShowModalDialog phải là Form

Tham khảo VD bật-tắt hiển thị Label1 và Label2 : http://www.cadviet.c...es/3/formex.zip
  • 1

#48 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 15 March 2011 - 01:36 PM

Bạn gia_bach thân mến, ý mình ở đây chính là chương trình soạn thảo không nhận ra được frmHieuChinhMot chính là một form, do đó dòng lệnh frmHieuChinhMot.TextBox1.Visible không có hiệu lực
Với lại, nếu mình hiển thị form theo cách của bạn: Application.ShowModalDialog(myForm)
thì có thể gõ:

myForm.TextBox1.Visible = True
Application.ShowModalDialog(myForm)


duoc khong?
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#49 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 694 (tốt)

Đã gửi 15 March 2011 - 03:16 PM

Bạn gia_bach thân mến, ý mình ở đây chính là chương trình soạn thảo không nhận ra được frmHieuChinhMot chính là một form, do đó dòng lệnh frmHieuChinhMot.TextBox1.Visible không có hiệu lực
Với lại, nếu mình hiển thị form theo cách của bạn: Application.ShowModalDialog(myForm)
thì có thể gõ:



duoc khong?

Em nghĩ là cái frmHieuChinhMot.TextBox1.Visible = true hay false phải cho vao event form_load hay form_Active thì dúng hơn
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#50 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1297 Bài viết
Điểm đánh giá: 1343 (rất tốt)

Đã gửi 15 March 2011 - 03:37 PM

Bạn gia_bach thân mến, ý mình ở đây chính là chương trình soạn thảo không nhận ra được frmHieuChinhMot chính là một form, do đó dòng lệnh frmHieuChinhMot.TextBox1.Visible không có hiệu lực
Với lại, nếu mình hiển thị form theo cách của bạn: Application.ShowModalDialog(myForm)
thì có thể gõ:



duoc khong?

Tôi không biết bạn đang dùng chương trình soạn thảo gì nhưng nếu bạn khai báo biến đúng thì không có lí do gì "chương trình soạn thảo không nhận".

Em nghĩ là cái frmHieuChinhMot.TextBox1.Visible = true hay false phải cho vao event form_load hay form_Active thì dúng hơn

Phụ thuộc vào mục đích (ý đồ) của lập trình viên, các thuộc tính (properties) có thể gán(gọi) tại bất kỳ đâu trong Application.
- trong cửa sổ Property của chương trình soạn thảo
- trong các event như ý của phamngoctukts
- hay như ý của Jin Yong : truớc khi hiển thị Form (gọi ShowModalDialog...)
  • 0

#51 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 15 March 2011 - 05:21 PM

Tôi không biết bạn đang dùng chương trình soạn thảo gì nhưng nếu bạn khai báo biến đúng thì không có lí do gì "chương trình soạn thảo không nhận".

Phụ thuộc vào mục đích (ý đồ) của lập trình viên, các thuộc tính (properties) có thể gán(gọi) tại bất kỳ đâu trong Application.
- trong cửa sổ Property của chương trình soạn thảo
- trong các event như ý của phamngoctukts
- hay như ý của Jin Yong : truớc khi hiển thị Form (gọi ShowModalDialog...)


Cảm ơn gia_bach, mình đã làm như ví dụ và đã có kết quả :)
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#52 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 694 (tốt)

Đã gửi 19 March 2011 - 05:08 PM

Các bác chỉ em cách dùng Group trong VB.net với. Em bị lỗi "Invalid object array"
em dùng như thế này
dim group as object
dim groupobj(0 to 1) as object
group = AcadApp.ActiveDocument.Groups.Add("thongke")
groupobj(0) = AcadApp.ActiveDocument.ModelSpace.insertblock(p0, "thongke_ten", tl * 2, tl * 2, tl * 2, 0) 
groupobj(1) = AcadApp.ActiveDocument.ModelSpace.insertblock(p0, "thongke_ten", tl * 2, tl * 2, tl * 2, 0)
group.AppendItems(groupobj)

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#53 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 694 (tốt)

Đã gửi 19 March 2011 - 06:47 PM

Các bác chỉ em cách dùng Group trong VB.net với. Em bị lỗi "Invalid object array"
em dùng như thế này

dim group as object
dim groupobj(0 to 1) as object
group = AcadApp.ActiveDocument.Groups.Add("thongke")
groupobj(0) = AcadApp.ActiveDocument.ModelSpace.insertblock(p0, "thongke_ten", tl * 2, tl * 2, tl * 2, 0) 
groupobj(1) = AcadApp.ActiveDocument.ModelSpace.insertblock(p0, "thongke_ten", tl * 2, tl * 2, tl * 2, 0)
group.AppendItems(groupobj)

Em đã fix được bằng SendCommand.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#54 nghiautc

nghiautc

    biết lệnh copy

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

Đã gửi 21 March 2011 - 06:49 PM

Hỏi vắn tắt quá, không hiểu ý bạn ?
Tham khảo (Acad.Net Help): The following example creates 4 circles and assigns a different color to each circle using four different methods.

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Colors
 
<CommandMethod("SetObjectColor")> _
Public Sub SetObjectColor()
  '' Get the current document and database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  '' Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      '' Define an array of colors for the layers
      Dim acColors(2) As Color
      acColors(0) = Color.FromColorIndex(ColorMethod.ByAci, 1)
      acColors(1) = Color.FromRgb(23, 54, 232)
      acColors(2) = Color.FromNames("PANTONE Yellow 0131 C", _
                                    "PANTONE(R) pastel coated")
 
      '' Open the Block table for read
      Dim acBlkTbl As BlockTable
      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                   OpenMode.ForRead)
 
      '' Open the Block table record Model space for write
      Dim acBlkTblRec As BlockTableRecord
      acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                      OpenMode.ForWrite)
 
      '' Create a circle object and assign it the ACI value of 4
      Dim acPt As Point3d = New Point3d(0, 3, 0)
      Dim acCirc As Circle = New Circle()
      acCirc.SetDatabaseDefaults()
      acCirc.Center = acPt
      acCirc.Radius = 1
      acCirc.ColorIndex = 4
 
      acBlkTblRec.AppendEntity(acCirc)
      acTrans.AddNewlyCreatedDBObject(acCirc, True)
 
      Dim nCnt As Integer = 0
 
      While (nCnt < 3)
          '' Create a copy of the circle
          Dim acCircCopy As Circle
          acCircCopy = acCirc.Clone()
 
          '' Shift the copy along the Y-axis
          acPt = New Point3d(acPt.X, acPt.Y + 3, acPt.Z)
          acCircCopy.Center = acPt
 
          '' Assign the new color to the circle
          acCircCopy.Color = acColors(nCnt)
 
          acBlkTblRec.AppendEntity(acCircCopy)
          acTrans.AddNewlyCreatedDBObject(acCircCopy, True)
 
          nCnt = nCnt + 1
      End While
 
      '' Save the changes and dispose of the transaction
      acTrans.Commit()
  End Using
End Sub

gia_bach có thể pos Acad.Net help cho mình được không,mình cài VB.net 2005 nhấn F1 thì chỉ có help chung chung đọc mãi không hiểu, lên mạng search không thấy (Lâu giờ viết VBA giờ đang định chuyển qua .Net thấy đau đầu quá).
Mình hỏi 1 vấn đề nữa đó là file .Dll ko chạy được trong cad 2004 > vì trong cad 2004 không có lệnh netload

Mới download được cái này không biết trên diễn đàn đã có chưa
<19381092-AutoCAD-NET-Developers-Guide>
http://www.mediafire...daoap7nc4pcvcyy

Bài viết đã được chỉnh sửa nội dung bởi nghiautc: 23 March 2011 - 03:49 PM

  • 0

#55 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 21 March 2011 - 09:13 PM

F1 của VB2005 chỉ là hướng dẫn lập trình VB, còn nếu muốn học Autocad.Net thì đây là một tài liệu online khá dễ học: AutoCAD .NET Developer's Guide
  • 1

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#56 nghiautc

nghiautc

    biết lệnh copy

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

Đã gửi 22 March 2011 - 08:28 AM

F1 của VB2005 chỉ là hướng dẫn lập trình VB, còn nếu muốn học Autocad.Net thì đây là một tài liệu online khá dễ học: AutoCAD .NET Developer's Guide

Thank Jin Jong.
Mình mới đọc được cái trong trung tâm công nghệ cadcam cho lên luôn:
1. Sau bao ngày chờ đợi thì cuối cùng VB.NET/VBA.NET đã có thể tự mình tạo ra lệnh hoàn toàn mới do người dùng tự định nghĩa. Giấc mơ này trước kia "chỉ có thể" lập trình với ObjectARX trên nền VC++ ("cái này có thể nói là khó") thì đến phiên bản hoàn chỉnh AutoCAD2010 và VB.NET2008/VS.NET2008 đã có thể thay thế phần nào việc tạo ra lệnh mới trong AutoCAD.


2. Bản chất của việc tạo ra lệnh mới vẫn là tạo ra các file *.dll (dynamic link library - thư viện liên kết động) sau đó các *.dll này được tải vào AutoCAD2010 thông qua lệnh NETLOAD (khác lệnh APPLOAD). Rồi ta có thể nhập các lệnh mà ta đã định nghĩa trước.

3. Việc này có ý nghĩa bản quyền rất lớn vì các file *.dll đã được mã hóa khi được biên dịch.

4. Bộ công cụ phát triển (tham khảo):
(i) - AutoCAD2010.
(2i) - Visual Studio.NET 2008.
(3i) - ObjectARX 2010 (không cần cài đặt - chỉ cần 4 file *.dll: AcDbMgd.dll, AcMgd.dll,acax17enu.tlb,axdb17enu.tlb-Cả 4file này bạn đều có thể tìm trong Ổ C:/ tất nhiên với điều kiện máy bạn cài cad ổ C:/ )
Ví dụ đơn giản sau cho các bạn mới học như mình(mình đã chạy thử nhìn rất giống VBA, Lệnh là MyLine)

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry

Public Class Class1
<CommandMethod("MyLine")> _
Public Shared Sub CreateLine()
Dim AcadApp As Autodesk.AutoCAD.Interop.AcadApplication
Dim ThisDrawing As Autodesk.AutoCAD.Interop.AcadDocument
Dim pt As Object
Dim pt1 As Object
AcadApp = GetObject(, "Autocad.Application")
ThisDrawing = AcadApp.ActiveDocument
pt = ThisDrawing.Utility.GetPoint(, "Pick point:")
pt1 = ThisDrawing.Utility.GetPoint(pt, "Pick second point:")
Dim cc As Line
cc = ThisDrawing.ModelSpace.AddLine(pt, pt1)
End Sub
End Class
Link down http://www.mediafire...xa8ogvuza514qn5 (mình tạo VB 2008)
Bổ sung:
Bạn nào có thể chỉ cho mình cách kiểm tra xem dòng lệnh nào sai hay ko?
Ví dụ trong VBA mình có thể chạy F8 (F5) đến câu lệnh nào sai dừng lại ở câu
lệnh đó.Nhưng khi dùng Class Lybrary để viết lệnh cho cad như trên mình ko chạy thử được ? Ko kiểm tra được thuật toán của mình

Bài viết đã được chỉnh sửa nội dung bởi nghiautc: 23 March 2011 - 12:29 PM

  • 0

#57 Detailing

Detailing

    biết lệnh xclip

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

Đã gửi 23 March 2011 - 09:24 AM

BẠn nào có thể giải thích giúp mình:
Tại sao chúng ta nên sử dụng thư viện ObjectARX (COM library) trong lập trình ACAD .NET trong khi ta có thể tác động trực tiếp vào CSDL bản vẽ thông qua .NET API trừ trường hợp phải tương tác với các đối tượng COM cua CAD.
Sử dụng ObjectARX có lợi gì và có hại như thế nào?
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#58 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1297 Bài viết
Điểm đánh giá: 1343 (rất tốt)

Đã gửi 23 March 2011 - 10:44 AM

BẠn nào có thể giải thích giúp mình:
Tại sao chúng ta nên sử dụng thư viện ObjectARX (COM library) trong lập trình ACAD .NET trong khi ta có thể tác động trực tiếp vào CSDL bản vẽ thông qua .NET API trừ trường hợp phải tương tác với các đối tượng COM cua CAD.
Sử dụng ObjectARX có lợi gì và có hại như thế nào?

Chắc bạn muốn nói tới "AutoCAD .NET API"chứ không phải ObjectARX ?!

Thông tin của "AutoCAD .NET API" : help
  • 0

#59 Detailing

Detailing

    biết lệnh xclip

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

Đã gửi 23 March 2011 - 10:56 AM

Thanks bạn đã trả lời
Theo mình biết Autodesk.AutoCAD.Interop chính là thư viện của ObjectARX (COM) vậy khi làm chương trình mình nên reference nó vào rồi sử dụng các đối tượng của nó như
Dim AcadApp As Autodesk.AutoCAD.Interop.AcadApplication
Dim ThisDrawing As Autodesk.AutoCAD.Interop.AcadDocument

hay dùng
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

link đây
Tiếng Anh có hạn nên không hiểu hết được mong các bác giải thích thêm dùm.
Cám ơn.
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#60 phuonghuynhduy

phuonghuynhduy

    biết vẽ line

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

Đã gửi 24 March 2011 - 09:08 AM

Thanks bạn đã trả lời
Theo mình biết Autodesk.AutoCAD.Interop chính là thư viện của ObjectARX (COM) vậy khi làm chương trình mình nên reference nó vào rồi sử dụng các đối tượng của nó như
Dim AcadApp As Autodesk.AutoCAD.Interop.AcadApplication
Dim ThisDrawing As Autodesk.AutoCAD.Interop.AcadDocument

hay dùng
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

link đây
Tiếng Anh có hạn nên không hiểu hết được mong các bác giải thích thêm dùm.
Cám ơn.


Chào bạn!
Hình như bạn nhầm về cách phân biệt các loại trên. Có nhiều cách can thiệp vào Database của Autocad, mình chỉ nói 3 loại mà hiện nay cũng nhiều người quan tâm.
1. ObjectArx: lập trình bằng VC++. Loại này xuất ra file *.Arx như Nova... Món này mình không rành. Thôi không nói thêm
2. Autodesk.AutoCAD.Interop: dùng các thư viện Autodesk.AutoCAD.Interop.... Loại này cũng khá hay và đa dạng. Bạn AnhCos đã hướng dẫn rất nhiều. Ưu điểm là có thể viết 1 file *.exe chạy đọc lập và can thiệp vào Autocad.
Đoạn mã của bạn đưa ra như sau:
Dim AcadApp As Autodesk.AutoCAD.Interop.AcadApplication
Dim ThisDrawing As Autodesk.AutoCAD.Interop.AcadDocument
Bạn phải dùng code này vì chương trình *.exe độc lập truy cập Autocad thông qua Interop.
3. Autocad.Net: dùng các thư viện Autodesk.AutoCAD.... không có Interop. Loại này xuất ra *.dll. Load bằng lệnh NetLoad trong cad. File *.Dll chỉ chạy trong phạm vi Autocad và từ đó truy xuất dữ liệu của Cad.
Dùng đoạn mã 2:
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Chúc bạn thành công!
  • 0