Đến nội dung


Hình ảnh

VBA trong auto cad


  • Please log in to reply
12 replies to this topic

#1 phongvu199x

phongvu199x

    biết zoom

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

Đã gửi 26 January 2015 - 03:38 PM

Anh chị nào rành về Autocad cho em giúp em cái ạ:

Em cần làm 1 chương trình vba để autocad tự động vẽ 1 hình mà dữ liệu của hình được nhập từ 1 file excel Sau đó trả giá trị diện tích và chu vi hình vừa vẽ ngược về excel. Đây là hình cần vẽ ạ ( Các số đo H1->H10 là nhập trong excel ạ)

Ai giúp được em xin cảm ơn và hậu tạ ạ

139073_bt.png

 


  • 0

#2 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 26 January 2015 - 03:48 PM

Cái này không phải là quá khó, có một số vấn đề sau nếu bạn đồng ý thì mình sẽ giúp:
1. So lieu dau vao va ket qua dau ra se xuat ra file txt. Dữ liệu đầu vào là tọa độ các đỉnh của hình vẽ, chỉ có mỗi chiều dài không thì mình chịu
2. Chương trình viết bằng ngôn ngữ autolisp, mình không thạo VBA
3. Chỉ vẽ hình, không ghi chú dim, chỉnh đường nét cho bạn được
  • 1

#3 phongvu199x

phongvu199x

    biết zoom

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

Đã gửi 26 January 2015 - 03:55 PM

Cái này không phải là quá khó, có một số vấn đề sau nếu bạn đồng ý thì mình sẽ giúp:
1. So lieu dau vao va ket qua dau ra se xuat ra file txt. Dữ liệu đầu vào là tọa độ các đỉnh của hình vẽ, chỉ có mỗi chiều dài không thì mình chịu
2. Chương trình viết bằng ngôn ngữ autolisp, mình không thạo VBA
3. Chỉ vẽ hình, không ghi chú dim, chỉnh đường nét cho bạn được

Cảm ơn bạn ạ. Nhưng mà mình đang học VBA nên phải làm bằng VBA. Dù sao cũng rất cảm ơn bạn đã nhiệt tình :)


  • 0

#4 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 26 January 2015 - 03:59 PM

Thế thì bạn phải chờ các bro rồi. Mà dù viết bằng ngôn ngữ VBA hay Lisp thì dữ liệu đầu vào của bạn chỉ gồm mỗi các cạnh cũng chưa đủ điều kiện để vẽ hình
  • 0

#5 phongvu199x

phongvu199x

    biết zoom

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

Đã gửi 26 January 2015 - 04:02 PM

Thế thì bạn phải chờ các bro rồi. Mà dù viết bằng ngôn ngữ VBA hay Lisp thì dữ liệu đầu vào của bạn chỉ gồm mỗi các cạnh cũng chưa đủ điều kiện để vẽ hình

Sẽ nhập tất cả dữ liệu để vẽ hình trong excel mà. Thầy gợi ý là dùng polyline để vẽ


  • 0

#6 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 26 January 2015 - 07:37 PM

Dữ liệu của bạn đâu ?
Đây là BTL hay đồ án của bạn ?
Nếu đang học VBA thì mình thấy bài toán của bạn k phải vấn đề, chỉ việc code VBA bên Excel với Automation sang CAD để vẽ hình. Diện tích thì có thể tính toán ngay bên Excel cũng được
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#7 phongvu199x

phongvu199x

    biết zoom

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

Đã gửi 26 January 2015 - 07:56 PM


 

Dạ... Đây là bài tập lớn ạ. Anh có thể giúp em viết code được không ạ. Yêu cầu là phải viết code VBA bên autocad ạ. Autocad sẽ đọc dữ liệu mình nhập sẵn ở fileexcel sau đó lưu lại sau đó dùng lệnh để autocad có thể đọc được dữ liệu trong file đó và vẽ thành hình  ạ. Anh có thể giúp em viết đoạn code vẽ cái hình đó thôi cũng được ạ. Em cảm ơn139073_excel.png


  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 26 January 2015 - 10:15 PM

Mình thua. Ngần kia H, k ràng buộc thì vẽ bao nhiêu nghiệm :) Bạn có vẽ bằng tay được hay k ??
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 26 January 2015 - 10:59 PM

Thế thì bạn phải chờ các bro rồi. Mà dù viết bằng ngôn ngữ VBA hay Lisp thì dữ liệu đầu vào của bạn chỉ gồm mỗi các cạnh cũng chưa đủ điều kiện để vẽ hình


  • 0

#10 phongvu199x

phongvu199x

    biết zoom

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

Đã gửi 27 January 2015 - 12:45 PM

Mình thua. Ngần kia H, k ràng buộc thì vẽ bao nhiêu nghiệm :) Bạn có vẽ bằng tay được hay k ??

Em xin lỗi ạ. Tại em hiểu sai đề. Hình em đã vẽ lại ở trên mong các anh giúp đỡ ạ


  • 0

#11 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 January 2015 - 02:20 AM

Hình bạn vẽ luộm thuộm quá. b, h k theo thứ tự nào cả
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#12 phongvu199x

phongvu199x

    biết zoom

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

Đã gửi 28 January 2015 - 08:01 AM

Em đã vẽ được rồi ạ. Cảm ơn mọi người đã qua tâm. Đây là mã lệnh mong mọi người góp ý thêm ạ

Sub VeMatCat()
Dim AppEx As Excel.Application
Set AppEx = New Excel.Application
AppEx.Visible = False
Dim wb As Excel.Workbook
Dim ws As Worksheet
Set wb = Excel.Workbooks.Open("c:\matcat.xlsx")
Set ws = wb.Worksheets(1)
ThisDrawing.ActiveLayer = ThisDrawing.Layers("netdam")
Dim b1 As Double
Dim b2 As Double
Dim b3 As Double
Dim b4 As Double
Dim b5 As Double
Dim b6 As Double
Dim b7 As Double
Dim b8 As Double
Dim h1 As Double
Dim h2 As Double
Dim h3 As Double
Dim h4 As Double
Dim h5 As Double
Dim VB As String
b1 = ws.Range("B1").Value
b2 = ws.Range("B2").Value
b3 = ws.Range("B3").Value
b4 = ws.Range("B4").Value
b5 = ws.Range("B5").Value
b6 = ws.Range("B6").Value
b7 = ws.Range("B7").Value
b8 = ws.Range("B8").Value
h1 = ws.Range("B9").Value
h2 = ws.Range("B10").Value
h3 = ws.Range("B11").Value
h4 = ws.Range("B12").Value
h5 = ws.Range("B13").Value
AppEx.Quit
Dim plineObj As AcadLWPolyline
Dim gocve As Variant
Dim A(0 To 21) As Double
    gocve = ThisDrawing.Utility.GetPoint(, "Please choose the start point: ")
A(0) = gocve(0): A(1) = gocve(1)
A(2) = gocve(0) + b1: A(3) = gocve(1)
A(4) = gocve(0) + b1 + b3: A(5) = gocve(1) - h1
A(6) = gocve(0) + b1 + b2 + b3: A(7) = gocve(1) - h1 - h5
A(8) = gocve(0) + b1 + b2 + b3: A(9) = gocve(1) - h1 - h5 - h4
A(10) = gocve(0) + b1 + b2 + b3 - b8: A(11) = gocve(1) - h1 - h5 - h4
A(12) = gocve(0) + b1 + b2 + b3 - b8 - b7: A(13) = gocve(1) - h1 - h5 - h4 + h3
A(14) = gocve(0) + b1 + b2 + b3 - b8 - b7 - b6: A(15) = gocve(1) - h1 - h5 - h4 + h3
A(16) = gocve(0) + b1 + b2 + b3 - b8 - b7 - b6: A(17) = gocve(1) - h1 - h5 - h4 + h3 + h2
A(18) = gocve(0) + b1 + b2 + b3 - b8 - b7 - b6 + b5: A(19) = gocve(1) - h1 - h5 - h4 + h3 + h2 + h5
A(20) = gocve(0): A(21) = gocve(1)
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(A)
Dim plineArea As Double
plineArea = plineObj.Area
Dim plinelength As Double
plinelength = plineObj.Length
Dim dientich As AcadText
Dim point(2) As Double
point(0) = gocve(0) + b1 - 4: point(1) = gocve(1) - h1 - 7
Set dientich = ThisDrawing.ModelSpace.AddText("S = " & plineArea, point, 3)
Dim chuvi As AcadText
Dim point1(2) As Double
point1(0) = gocve(0) + b1 - 4: point1(1) = gocve(1) - h1 - 17
Set chuvi = ThisDrawing.ModelSpace.AddText("C = " & plinelength, point1, 3)
ZoomExtents
Set AppEx = New Excel.Application
AppEx.Visible = False
Set wb = Excel.Workbooks.Open("c:\matcat.xlsx")
Set ws = wb.Worksheets(1)
ws.Range("B14").Value = plinelength
ws.Range("B15").Value = plineArea
wb.Save
AppEx.Quit
End Sub

  • 0

#13 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 28 January 2015 - 04:52 PM

Excel.Workbooks.Open("c:\matcat.xlsx")

Bạn có thể viết lại dòng trên theo chiều hướng gọi hộp thoại lên và chọn file excel được không,vì để đường dẫn và tên file cố định như thế sẽ kém linh hoạt hơn (luôn luôn phải có file matcat.xlsx ở ổ c mới chạy được chuơng trình)
  • 0