QUẢNG CÁO ĐẦU TRANG

Collapse

Thông báo

Collapse
No announcement yet.

VBA trong Autocad

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • VBA trong Autocad

    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.

  • #2
    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

    Ghi chú


    • #3
      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ú


      • #4
        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.
        Tuổi nhỏ làm việc nhỏ
        Tùy theo sức của mình

        Ghi chú


        • #5
          Là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

          Ghi chú


          • #6
            Nguyên văn bởi daucuchuoi
            Là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
            Bác có thể upload lên đây hình minh họa được không?
            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.
            Tuổi nhỏ làm việc nhỏ
            Tùy theo sức của mình

            Ghi chú


            • #7
              Nguyên văn bởi tdhtkcd
              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.
              Để gọi 1 form trong VB hay VBA thì câu lệnh đơn giản chỉ là
              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ú


              • #8
                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ú


                • #9
                  Nguyên văn bởi ldz
                  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
                  Dùng VBA trong Cad, chúng ta có thể làm gần như mọi thứ thay vì chúng ta phải ngồi gõ từng lệnh: Line, Circle, Pan, Zoom.... Với mỗi một lĩnh vực thì chúng ta có thể tạo nên một ứng dụng để điểu khiển Cad vẽ theo ý muốn của người lập trình. Bản thân tôi thì tôi thấy VBA có rất nhiều cái hữu ích để tạo nên các ứng dụng cho ngành Xây dựng. Ngoài những khả năng gọi các lệnh thông thường của AutoCad như đã kể trên, VBA còn cho phép dễ dàng truy xuất Database, ghi dữ liệu vào các đối tượng vẽ (Extend data) và quản lý đối tượng theo Handle...
                  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ú


                  • #10
                    Nguyên văn bởi ldz
                    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
                    Bá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ứ...)
                    Tuổi nhỏ làm việc nhỏ
                    Tùy theo sức của mình

                    Ghi chú


                    • #11
                      Nguyên văn bởi tdhtkcd
                      Bá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ứ...)
                      1- Nếu bạn để trong ngoặc kép thế kia " " thì VB sẽ hiểu TenForm.Show là một chuỗi.
                      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ông
                      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ú


                      • #12
                        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 !
                        Tuổi nhỏ làm việc nhỏ
                        Tùy theo sức của mình

                        Ghi chú


                        • #13
                          Để 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ông
                          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ú


                          • #14
                            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à !
                            Nguyễn Lam - A.Design Group & N.Architect

                            Ghi chú


                            • #15
                              Đú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ú

                              Working...
                              X