Có ai muốn nghiên cứu VBA trong CAD cùng với mình không. Chúng ta nghiên cứu trực tuyến luôn nhỉ. OK??? Nhưng phải thăm dò đã xem có ai quan tâm đến không. Chỉ nghiên cứu thêm một ngôn ngữ lập trình thôi, chứ tui cũng chưa làm một cái gì ra hồn cả . Ai cùng nghiên cứu thì vô đây chua một câu nào.
QUẢNG CÁO ĐẦU TRANG
Collapse
Thông báo
Collapse
No announcement yet.
VBA trong Autocad
Collapse
X
-
To But Chi
Bạn đang quan tâm đến VBA trong AutoCad sao? Đây là một vấn đề rất thú vị đấy. Nếu có chỗ nào bí thì cứ hỏi nhé, tôi sẽ trả lời cho. Tôi đã làm rất nhiều về cái này rồi màCông ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
Email : cncc.jsc@gmail.com
-
Lý do chọn VBA để học và nghiên cứu
Ta thấy rằng AutoCad là một hê vẽ mà ta có thể lập trình trên chúng một cách linh hoạt. Bạn có thể điều chỉnh Autocad từ các dòng lệnh, từ các menu, các thanh công cụ, từ các macro hoặc từ AutoLISP,VBA hay C++.
--------------
AutoDesk cung cấp cho chúng ta một bộ các phần mở rộng để kiểm soát AutoCad từ ngôn ngữ. Những phần mở rộng này được gọi là Object ARX. Đây là một phương pháp tiếp cận với CAD một cách chuyên nghiệp nhất tuy nhiên nó lại quá phức tạp đối với dân Xây chúng ta.
AutoLisp là một ngôn ngữ lập trình thông dịch, Nó là một phiên bản mới nhất về ngôn ngữ lập trình nhân tạo cũ nhất mà ngày nay vẫn còn được sử dụng. Autolisp nằm trong bộ Common LISP. LISP viết tắt của LIST Processor !. Nói chung Lisp dễ học bở cú pháp của nó đơn giản nhưng nó không tương tác được vớic các cơ sở dữ liệu như Excel, access. Nên việc sử dụng nó tạo ra các ứng dụng to tát là hơi chuối. Viết các chương trình phức tạp thì rất lằng nhằng. Tuy nhiên mức độ lằng nhằng đã được giảm bớt đi rất nhiều trong Visual LISP !
VBA viết tắt của visual Basic Application. Cũng như Object Arx thì VBA cũng là một môi trường lập trình hướng đối tượng sử dụng ngôn ngữ VB. ưu điểm của VBA là sử dụng VB, một ngôn ngữ lập trình tương đối thông dụng và dễ học.VBA nằm trong CAD nên tốc độ chạy cũng tương đối nhanh, Dễ dạng trong việc tạo ra các giao diện (hộp thoại, menu). Chia sẽ tương đối tốt dữ liệu với các ứng dụng khác trên môi trường Window.
--------------
Từ sự phân tích trên tôi quyết định chọn VBA làm ngôn ngữ thứ n để nghiên cứu. . Bài tiếp theo chúng ta sẽ nghiên cứu đến AutoCAD ActiveX . Nếu ai biết hoặc quan tâm, xin gửi bài giới thiệu về AutoCAD ActiveX. xin cảm ơn !
Ghi chú
-
Em xin hỏi các bác 1 câu về VBA:
Khi dùng VBA để tạo giao diện người dùng rất tiện so với tạo bằng file
*.mnu và *.dcl trong CAD nhưng khi em muốn tạo 1 menu :Ví dụ NewMenu (Bên cạnh menu Help của CAD)Menu này có 1 lệnh (VD:Lệnh1)
Lệnh này sẽ gọi 1 form để người dùng nhập liệu =>thì lệnh gọi 1 form ra sẽ là gì (trong VBA)??Bác nào đã từng có kinh nghiệm xin chỉ giúp.
Ghi chú
-
Nguyên văn bởi daucuchuoiLàm thế này nhá:
I. Để bấm được nút
1. Bấm nút phải chuột vào 1 thanh toolbar nào đó, chọn customize
2. Bấm tiếp nút phải chuột vào nút toolbar nào đó, ví dụ zoom
3. Chọn properties...
4. Xem lệnh gọi chương trình ở đó (nếu là macro thì dùng lệnh vbarun)
5. Thế là chạy
Em nghĩ là bác chưa chạy thử hoặc là bác hiểu nhầm ý em hỏi rồi thì phải.
Để em làm mấy cái hinh minh họa cho câu hỏi của em rồi em đưa lên đây cho bác xem.Cả code VBA luôn.Em thật sự vướng mắc.Mong bác chỉ cho em với.
Ghi chú
-
Nguyên văn bởi tdhtkcdEm xin hỏi các bác 1 câu về VBA:
Khi dùng VBA để tạo giao diện người dùng rất tiện so với tạo bằng file
*.mnu và *.dcl trong CAD nhưng khi em muốn tạo 1 menu :Ví dụ NewMenu (Bên cạnh menu Help của CAD)Menu này có 1 lệnh (VD:Lệnh1)
Lệnh này sẽ gọi 1 form để người dùng nhập liệu =>thì lệnh gọi 1 form ra sẽ là gì (trong VBA)??Bác nào đã từng có kinh nghiệm xin chỉ giúp.
TenForm.Show
Còn để AutoCad tự động thêm vào một Menu hay Toolbar thì khá phức tạp đấy. Sau đây là những dòng lệnh mà tôi đã viết để thêm Menu cho AutoCad.
'====================================================
Sub Toolbar()
' This example creates a new toolbar called TestToolbar and inserts a
' toolbar button into it. The toolbar is then displayed.
' To remove the toolbar after execution of this macro, use the Customize Menu
' option from the Tools menu.
Dim i As Integer
On Error GoTo Loix
Dim currMenuGroup As AcadMenuGroup
AppPath = ThisDrawing.Path
FrmWelcome.Show
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
'currMenuGroup.Menus("TK_Dan").RemoveFromMenuBar
'Create the new toolbar
Dim newToolBar As AcadToolbar
Set newToolBar = currMenuGroup.Toolbars.Add("TK_Thep")
newToolBar.Dock acToolbarDockLeft
'Add a button to the new toolbar
Dim newButton As AcadToolbarItem
Dim openMacro As String
Dim DD As String
DD = ThisDrawing.Path & "\Image"
Dim Bm As String
'Assign the macro string the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) & Chr(3) & Chr(95) & "TK" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Thiet Ke Thanh", "Open a file.", openMacro)
Bm = DD & "\Tk_thanh.bmp"
newButton.SetBitmaps Bm, Bm
openMacro = Chr(3) & Chr(3) & Chr(95) & "BM" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Thiet Ke Ban Ma", "Open a file.", openMacro)
Bm = DD & "\Tk_Banma.bmp"
newButton.SetBitmaps Bm, Bm
openMacro = Chr(3) & Chr(3) & Chr(95) & "CPT" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Copy thuoc tinh thanh", "Open a file.", openMacro)
Bm = DD & "\Copy_Thanh.bmp"
newButton.SetBitmaps Bm, Bm
openMacro = Chr(3) & Chr(3) & Chr(95) & "UD" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Cap Nhat Ban Ve", "Open a file.", openMacro)
Bm = DD & "\Update.bmp"
newButton.SetBitmaps Bm, Bm
openMacro = Chr(3) & Chr(3) & Chr(95) & "CTBM" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Chi Tiet Ban Ma", "Open a file.", openMacro)
Bm = DD & "\Chitiet_BM.bmp"
newButton.SetBitmaps Bm, Bm
openMacro = Chr(3) & Chr(3) & Chr(95) & "CTT" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Chi Tiet Thanh", "Open a file.", openMacro)
Bm = DD & "\ChiTiet_Thanh.bmp"
newButton.SetBitmaps Bm, Bm
openMacro = Chr(3) & Chr(3) & Chr(95) & "TKT" & Chr(32)
Set newButton = newToolBar.AddToolbarButton("", "Thong ke khoi luong", "Open a file.", openMacro)
Bm = DD & "\TKT.bmp"
newButton.SetBitmaps Bm, Bm
' openMacro = Chr(3) & Chr(3) & Chr(95) & "TKBM" & Chr(32)
' Set newButton = newToolBar.AddToolbarButton("", "Thong ke ban ma", "Open a file.", openMacro)
' Bm = DD & "\TKBM.bmp"
' newButton.SetBitmaps Bm, Bm
'
' openMacro = Chr(3) & Chr(3) & Chr(95) & "TKBL" & Chr(32)
' Set newButton = newToolBar.AddToolbarButton("", "Thong ke bu long", "Open a file.", openMacro)
' Bm = DD & "\TKBL.bmp"
' newButton.SetBitmaps Bm, Bm
'Display the toolbar
newToolBar.Visible = True
'\\\\\\Tao menu bar
' Create the new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("SCD Menu")
' Add a menu item to the sub menu
Dim newMenuItem As AcadPopupMenuItem
' Assign the macro string the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) & Chr(3) & Chr(95) & "TK" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Thiet Ke Thanh", openMacro)
newMenu.InsertInMenuBar (ThisDrawing.Application.MenuBar.Count + 1)
openMacro = Chr(3) & Chr(3) & Chr(95) & "CPT" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Copy Thuoc Tinh Thanh", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "BM" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Thiet Ke Ban Ma", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "CTBM" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Chi Tiet Ban Ma", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "CTT" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Chi Tiet Thanh", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "TKT" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Thong Ke Khoi Luong", openMacro)
'==========================================================================================
openMacro = Chr(3) & Chr(3) & Chr(95) & "KHOITAO" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Khoi tao ban ve", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "GIAIPHONG" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Loai bo du lieu", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "DK" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Dang ky su dung", openMacro)
Loix:
End Sub
'====================================================Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
Email : cncc.jsc@gmail.com
Ghi chú
-
Tôi cũng quan tâm đến vấn đề này
Dùng VBA trong CAD viết dễ dàng hơn và dễ kiểm soát hơn do tận dụng dc lợi thế của VB.Tuy nhiên Tôi nghĩ là chúng ta nên tập trung chủ đề cho CAD(CAD only) nhũng vấn đề đã quá rõ cho VB thì không nên bàn ở đây ( coi như các Quí vị đã biết rồi).Cái cần biết thêm là dùng VBA trong CAD chúng ta làm thêm dc gì?Tự động hoá dc gì?Các bác nào có phần mềm nc ngoài viết sẵn thì upload lên để khỏi phải viết lại, hay chỉnh sửa cho phù hợp v VN
Mong dc trao đổi
Ghi chú
-
Nguyên văn bởi ldzTôi cũng quan tâm đến vấn đề này
Dùng VBA trong CAD viết dễ dàng hơn và dễ kiểm soát hơn do tận dụng dc lợi thế của VB.Tuy nhiên Tôi nghĩ là chúng ta nên tập trung chủ đề cho CAD(CAD only) nhũng vấn đề đã quá rõ cho VB thì không nên bàn ở đây ( coi như các Quí vị đã biết rồi).Cái cần biết thêm là dùng VBA trong CAD chúng ta làm thêm dc gì?Tự động hoá dc gì?Các bác nào có phần mềm nc ngoài viết sẵn thì upload lên để khỏi phải viết lại, hay chỉnh sửa cho phù hợp v VN
Mong dc trao đổi
Bản thân bạn, tôi chưa rõ bạn quan tâm đến lĩnh vực nào để có thể ứng dụng VBA cho lĩnh vực đó.Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
Email : cncc.jsc@gmail.com
Ghi chú
-
Nguyên văn bởi ldzTôi cũng quan tâm đến vấn đề này
Dùng VBA trong CAD viết dễ dàng hơn và dễ kiểm soát hơn do tận dụng dc lợi thế của VB.Tuy nhiên Tôi nghĩ là chúng ta nên tập trung chủ đề cho CAD(CAD only) nhũng vấn đề đã quá rõ cho VB thì không nên bàn ở đây ( coi như các Quí vị đã biết rồi).Cái cần biết thêm là dùng VBA trong CAD chúng ta làm thêm dc gì?Tự động hoá dc gì?Các bác nào có phần mềm nc ngoài viết sẵn thì upload lên để khỏi phải viết lại, hay chỉnh sửa cho phù hợp v VN
Mong dc trao đổi
Cám ơn anh PMXD
Lúc trước em cứ viết như thế này:
openMacro = "TenForm.Show"
=> Cad nó chả hiểu thế nào cả.(Chán thế cơ chứ...)
Ghi chú
-
Nguyên văn bởi tdhtkcdBác không biết chứ các anh trên em 1 khóa họ TDH vẽ cả 1 cái cầu đấy.
Cám ơn anh PMXD
Lúc trước em cứ viết như thế này:
openMacro = "TenForm.Show"
=> Cad nó chả hiểu thế nào cả.(Chán thế cơ chứ...)
2- Trong VBA hình như không có đối tượng nào tên là openMacro
Nếu bạn muốn học VBA, cách tốt nhất là đọc trong Help, Ở đó nó có sẵn các ví dụ cụ thể cho từng trường hợp. Bạn hãy Copy các đoạn Code vào, chạy thử, nghiền ngẫm thì se khá liền (Cách này đối với tôi là nhanh nhất)
Chuc bạn thành côngCông ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
Email : cncc.jsc@gmail.com
Ghi chú
-
Bác cho em hỏi chi tiết thêm 1 tý nha:
Ví dụ thế này nhé:
'\\\\\\Em tao 1 menu bar PMXD Menu
'====================================================
Sub newmenu()
On Error GoTo Loix
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("PMXD Menu")
Dim newMenuItem As AcadPopupMenuItem
openMacro = Chr(3) & Chr(3) & Chr(95) & "Lenh1" & Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Lenh1", openMacro)
newMenu.InsertInMenuBar (ThisDrawing.Application.MenuBar.Count + 1)
Loix:
End Sub
'====================================================
Nhưng cái lệnh 1 kia phải thế nào...???... để khi chọn vào PMXD menu >Lenh 1 thì cho kết quả là FrmWelcome hiện ra(Giả sử em đã tạo xong Form FrmWelcome)
Mong được tiếp tục hỏi các anh về VBA !
Ghi chú
-
Để form frmWelcome hiện ra khi nhấn vào Menu lenh 1 thì bạn phải làm như sau:
- Tạo ra một Module (ví dụ tên module là mdlVietAnh). Trong Module này có một Proceduce :
Sub ShowForm
frmWelcome.show
End sub
- Tạo ra một file Autolisp để tạo ra một lệnh mới cho AutoCad(Ví dụ tên lệnh này là VA). Gán lệnh này để nó gọi Sub ShowForm
- Gán tên của lệnh VA cho lenh 1
Nếu để ý kỹ, bạn có thể thấy rằng: Việc tạo ra một Menu hay Toolbar cho AutoCad và gán lệnh cho nó thì bắt buộc phải thông qua một lệnh của AutoCad.Mà muốn tạo ra một lệnh của AutoCad thì phải nhờ đến AutoLisp (hoặc phương tiện khác). Đây là một trong những điểm rất không hay của VBA.
Chuc bạn thành côngCông ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
Email : cncc.jsc@gmail.com
Ghi chú
-
Mạn phép các bác VBA !!!
Mạn phép các bác VBA, Tôi thấy dùng AutoLisp để gán thêm menu vào AutoCAD hình như đơn giản hơn. Đối với AutoCAD, nemu chỉ là cái vỏ thôi còn đường dẫn đến các thư mục chứa các Files Support (không nằm trong các thư mục mặc định của AutoCAD) mới là quan trọng - Mà AutoLisp làm việc này rất ngon. Tôi đã thử dùng VBA rồi nhưng thấy khó làm, khó sửa hơn. Bác nào cần biết cách làm bằng AutoLisp thì ghé qua bên "Visual Lisp" vì đây là đất VBA mà !
Ghi chú
-
Đúng là việc làm Menu đối với VBA phức tạp hơn AutoLisp thật, nhưng để lựa chọn 1 trong 2 phương tiện phát triển, tôi vẫn chọn VBA hơn AutoLisp, vì bản thân tôi đã làm cả 2 thứ trên. Còn phương án hay nhất, theo tôi là biết cách sử dụng công cụ nào trong từng trường hợp cụ thể. Tôi cũng rất mong được thảo luận với các bạn về vấn đề này.Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
Email : cncc.jsc@gmail.com
Ghi chú
Quảng cáo cuối trang
Collapse
Ghi chú