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

  • #31
    Ðề: VBA trong Autocad

    Nguyên văn bởi tdhtkcd
    1 lần nữa cám ơn anh PMXD về các trao đổi của anh nha!

    Em cũng đang mần thêm về ARX ,lúc nào rỗi anh CNPM cho em cái ví dụ tạo Menu và lệnh trong Cad nha.Tự ngâm cứu lâu quá tiến bộ rất chậm.Vừa làm vừa tranh thủ hỏi các anh ,tiến bộ thêm nhiều lắm.

    Các anh làm việc nhiều với Cad thấy 14 và 2000 khác nhau nhiều không?Nếu nói là tâm đắc nhất thì 2000 có gì hơn và đến thằng 2005 thì cái khác biệt là gì vậy.(Em hỏi về khía cạnh mình hiểu về các đối tượng trong cad như thế nào và Cad nó cho mình can thiệp đến đâu với các đối tượng đó)

    Hết năm 2004 nhìn lại thấy mình vẫn đang dùng NoVa trên nền Cad 14 thấy thật là bất tiện.Mơ ước 1 ngày có NoVa trên nền Cad 2005 để xài....
    Version autocad.
    Attached Files

    Ghi chú


    • #32
      Ðề: VBA trong Autocad

      Xin hoi anh Viet Anh la lam the nao de tuong tac vao loi cua Sap, nhap thong tin cho no qua VB, goi Sap ra cho chay va xuat ket qua. Em thay sap 9 tro giup tuong tac tot thi phai.

      Ghi chú


      • #33
        Ðề: VBA trong Autocad

        Nguyên văn bởi ngayxuan
        Xin hoi anh Viet Anh la lam the nao de tuong tac vao loi cua Sap, nhap thong tin cho no qua VB, goi Sap ra cho chay va xuat ket qua. Em thay sap 9 tro giup tuong tac tot thi phai.
        Câu hỏi này ngắn gọn nhưng nghe chừng trả lời thì mất nhiều thời gian lắm. Hẹn bạn đến hôm học VBA tôi sẽ trả lời trực tiếp nhé.
        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ú


        • #34
          Ðề: VBA trong Autocad

          bác PMXD ơi! Cho em hỏi bác có tài liệu về lập trình -> đuôi ARX không ạ.
          Còn dùng VBA thì chắc là em lại phải học qua về VB rồi! Chẳng biết nên chọn cái nào đây.? Bác tư vấn giùm em vụ này nhé!
          Người gặp người cơn lốc cuốn, đối diện cuộc đời tâm nào giữ lời

          Ghi chú


          • #35
            Ðề: VBA trong Autocad

            Nguyên văn bởi htuan
            bác PMXD ơi! Cho em hỏi bác có tài liệu về lập trình -> đuôi ARX không ạ.
            Còn dùng VBA thì chắc là em lại phải học qua về VB rồi! Chẳng biết nên chọn cái nào đây.? Bác tư vấn giùm em vụ này nhé!
            Nếu lập trình ARX thì bạn phải biết về C++. Làm cái này này lắm, tuy nhiên cũng tương đối khó đấy. Tôi có một chút tài liệu ARX bằng tiếng Việt đây (chưa đầy đủ), anh em nào cần thì cứ dơwn về dùng nhé.
            Chúc thành công
            Attached Files
            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ú


            • #36
              Ðề: VBA trong Autocad

              Anh Việt Anh làm cho Hài Hòa hay sao mà có tài liệu hay thế.Còn nữa không anh cho bọn em với
              Tuổi nhỏ làm việc nhỏ
              Tùy theo sức của mình

              Ghi chú


              • #37
                Ðề: VBA trong Autocad

                VBA thì có bộ Help hổ trợ nên dể "táy máy" hơn. Còn ARX thì khó vì Cad ko có tung ra bộ Help nên anh em khó khăn hơn.

                Ghi chú


                • #38
                  Ðề: VBA trong Autocad

                  Help đây:
                  http://usa.autodesk.com/adsk/servlet...3112&id=773180

                  Ghi chú


                  • #39
                    Ðề: VBA trong Autocad

                    Nhờ các anh chỉ gíup.Em có sưu tập được vài LISP nhưng ko thực hiện đươc. Các anh xem giúp em với.
                    Lệnh: dam va mcdam em chỉ vẽ được phần dầm còn cốt thép không vẽ được. Đang thực hiện thì có lỗi
                    Command: mcdam

                    Nhap vao diem chuan(click 1 diem bat ky):
                    Nhap vao chieu cao dam(mm):500

                    Nhap vao chieu rong dam(mm):500

                    San ben trai (Co/Khong):c

                    San trai Tren hay Duoi(T/D):t

                    San ben phai (Co/Khong):c

                    San phai Tren hay Duoi(T/D):t

                    Cannot set CLAYER to that value.
                    ; error: Function cancelled
                    *Invalid*
                    Lệnh dam lỗi tương tự vậy. Mà lỗi đó có nghĩa là gì vẩy Các anh giải thích giúp.
                    Còn lệnh :XDCOT em không thể thực hiện đươc. CAD không nhận được lệnh F1 ---> HELP.
                    Xin các anh chỉ gíup. Nếu được các anh up lên lại nhé.
                    Attached Files

                    Ghi chú


                    • #40
                      Ðề: VBA trong Autocad

                      Nguyên văn bởi ttkh
                      Nhờ các anh chỉ gíup.Em có sưu tập được vài LISP nhưng ko thực hiện đươc. Các anh xem giúp em với.
                      Lệnh: dam va mcdam em chỉ vẽ được phần dầm còn cốt thép không vẽ được. Đang thực hiện thì có lỗi
                      Command: mcdam

                      Cannot set CLAYER to that value.
                      ; error: Function cancelled
                      *Invalid*
                      Xin các anh chỉ gíup. Nếu được các anh up lên lại nhé.
                      Vấn đề của cậu là ở đoạn hàm gọi lệnh Clayer (lop). Defun này được gán 1 biến cục bộ tên là tamlop. Lệnh Clayer được gọi để lấy ra 1 layer đang có trong bản vẽ mà tên được gán cho biến cục bộ tamlop. Nếu layer đó không có trên bản vẽ thì lệnh Clayer sẽ trả ra kết quả là *Invalid* và như vậy lệnh sẽ bị dừng và báo lỗi như cậu thấy.

                      Có 2 cách khắc phục lỗi trên.
                      - Cách thứ nhất, thủ công và đơn giản:
                      Tạo ra các layer theo yêu cầu của lệnh để khi lệnh yêu cầu, layer đó đã có và lệnh sẽ thực thi. Layer mà lệnh MCDAM yêu cầu là s5.

                      - Cách thứ 2 triệt để hơn nhưng phức tạp hơn 1 chút. Tạo thêm 1 hàm lệnh cục bộ (defun) để kiểm tra sự tồn tại của layer trước khi chạy lệnh Clayer. Nói tóm lại là tạo ra Layer s5 nếu chưa có còn nếu có rồi thì xài luôn.

                      Đoạn mã dùng hàm tblnext của AutoLisp để kiểm tra danh sách layer hiện hành.
                      Gán giá trị của biến cục bộ chứa layer cấp phát cho lệnh (tamlop) cho lệnh c_lay để kiểm tra layer = (c_lay "s5") rồi mới chạy lệnh của hàm (lop)
                      --------------
                      Cách sửa files: (mcdam.lsp)

                      + Copy đoạn mã dưới đây, paste vào files mcdam.lsp, phía trên đoạn mã lệnh (lop).
                      ;--------------------
                      (defun c_Lay (lay_n / tbl t1 t2 key)
                      (setq tbl (tblnext "LAYER" 1))
                      (while tbl
                      (setq t1 (strcase lay_n)
                      t2 (cdr (car (cdr tbl)))
                      )
                      (if (equal t1 t2)
                      (setq key 1)
                      )
                      (setq tbl (tblnext "LAYER"))
                      )
                      (if (/= key 1)
                      (progn (setq tbl NIL)
                      (command "_.LAYER" "N" lay_n "")
                      )
                      )
                      (setq lay_n NIL)
                      (princ)
                      )
                      ;------------------------------
                      ;Đoạn mã lệnh chuyển lớp (lop) - gây lỗi:
                      (defun lop (tamlop)
                      (command "CLAYER" tamlop)
                      )
                      ;------------------------------

                      + Ngay dòng đầu tiên phía dưới đoạn mã khai báo lệnh mcdam, đưa vào hàm tìm và kiếm tra layer (mới tạo).
                      ;-------------------
                      (defun c:mcdam()
                      (c_lay "s5")
                      (setvar "OSMODE" 0)
                      ;-------------------

                      Với các files khác làm tương tự.
                      Nguyễn Lam - A.Design Group & N.Architect

                      Ghi chú


                      • #41
                        Ðề: VBA trong Autocad

                        Nguyên văn bởi nglam_adg
                        Vấn đề của cậu là ở đoạn hàm gọi lệnh Clayer (lop). Defun này được gán 1 biến cục bộ tên là tamlop. Lệnh Clayer được gọi để lấy ra 1 layer đang có trong bản vẽ mà tên được gán cho biến cục bộ tamlop. Nếu layer đó không có trên bản vẽ thì lệnh Clayer sẽ trả ra kết quả là *Invalid* và như vậy lệnh sẽ bị dừng và báo lỗi như cậu thấy.

                        Có 2 cách khắc phục lỗi trên.
                        - Cách thứ nhất, thủ công và đơn giản:
                        Tạo ra các layer theo yêu cầu của lệnh để khi lệnh yêu cầu, layer đó đã có và lệnh sẽ thực thi. Layer mà lệnh MCDAM yêu cầu là s5.

                        - Cách thứ 2 triệt để hơn nhưng phức tạp hơn 1 chút. Tạo thêm 1 hàm lệnh cục bộ (defun) để kiểm tra sự tồn tại của layer trước khi chạy lệnh Clayer. Nói tóm lại là tạo ra Layer s5 nếu chưa có còn nếu có rồi thì xài luôn.

                        Đoạn mã dùng hàm tblnext của AutoLisp để kiểm tra danh sách layer hiện hành.
                        Gán giá trị của biến cục bộ chứa layer cấp phát cho lệnh (tamlop) cho lệnh c_lay để kiểm tra layer = (c_lay "s5") rồi mới chạy lệnh của hàm (lop)
                        --------------
                        Cách sửa files: (mcdam.lsp)

                        + Copy đoạn mã dưới đây, paste vào files mcdam.lsp, phía trên đoạn mã lệnh (lop).
                        ;--------------------
                        (defun c_Lay (lay_n / tbl t1 t2 key)
                        (setq tbl (tblnext "LAYER" 1))
                        (while tbl
                        (setq t1 (strcase lay_n)
                        t2 (cdr (car (cdr tbl)))
                        )
                        (if (equal t1 t2)
                        (setq key 1)
                        )
                        (setq tbl (tblnext "LAYER"))
                        )
                        (if (/= key 1)
                        (progn (setq tbl NIL)
                        (command "_.LAYER" "N" lay_n "")
                        )
                        )
                        (setq lay_n NIL)
                        (princ)
                        )
                        ;------------------------------
                        ;Đoạn mã lệnh chuyển lớp (lop) - gây lỗi:
                        (defun lop (tamlop)
                        (command "CLAYER" tamlop)
                        )
                        ;------------------------------

                        + Ngay dòng đầu tiên phía dưới đoạn mã khai báo lệnh mcdam, đưa vào hàm tìm và kiếm tra layer (mới tạo).
                        ;-------------------
                        (defun c:mcdam()
                        (c_lay "s5")
                        (setvar "OSMODE" 0)
                        ;-------------------

                        Với các files khác làm tương tự.
                        Cám ơn anh Ng LAM nhiều . Em đã thực được cách 1 của anh đối với lênh mcdam.
                        Còn cách thứ hai làm theo hướng dẫn lại có lỗi :
                        Command: DAM
                        ; error: no function definition: C_LAY
                        Trong lệnh này nó còn yêu cầu thêm layer s7
                        .
                        Anh chỉ giúp em luôn nhé. Em gửi cho anh file em thực hiên.
                        Còn lệnh vẽ dầm thì hình ( đây là một số bước cuối của lệnh.)
                        Command: INSERT Enter block name or [?]: CUDE7A
                        "CUDE7A.dwg": Can't find file in search path:
                        C:\Documents and Settings\binhthanh.WINDOWS-4ED00C3\My Documents\ (current
                        directory)
                        C:\Documents and Settings\binhthanh.WINDOWS-4ED00C3\Application
                        Data\Autodesk\AutoCAD 2004\R16.0\enu\support\
                        C:\AutoCAD 2004\support\
                        C:\AutoCAD 2004\fonts\
                        C:\AutoCAD 2004\help\
                        C:\AutoCAD 2004\express\
                        C:\AutoCAD 2004\support\color\
                        C:\Tkxd30\Support\
                        C:\Tkxd30\Ddtkt\
                        C:\Tkxd30\Tvdl_v30\
                        C:\Tkxd30\Vdien\
                        C:\AutoCAD 2004\drv\
                        C:\AutoCAD 2004\
                        *Invalid*
                        ; error: Function cancelled
                        Lỗi này là gì?
                        Anh Ng Lam hiện em còn một số lệnh nữa nhưng bị lỗi nhiều lắm. Anh có thể giúp không? Không biết có làm phiền anh không đây nữa
                        Attached Files

                        Ghi chú


                        • #42
                          Ðề: VBA trong Autocad

                          Nguyên văn bởi ttkh
                          Command: DAM
                          ; error: no function definition: C_LAY
                          Trong lệnh này nó còn yêu cầu thêm layer s7
                          .
                          Anh chỉ giúp em luôn nhé. Em gửi cho anh file em thực hiên.
                          Còn lệnh vẽ dầm thì hình ( đây là một số bước cuối của lệnh.)
                          Command: INSERT Enter block name or [?]: CUDE7A
                          "CUDE7A.dwg": Can't find file in search path:
                          C:\Documents and Settings\binhthanh.WINDOWS-4ED00C3\My Documents\ (current
                          directory)
                          C:\Documents and Settings\binhthanh.WINDOWS-4ED00C3\Application
                          Data\Autodesk\AutoCAD 2004\R16.0\enu\support\
                          C:\AutoCAD 2004\support\
                          C:\AutoCAD 2004\fonts\
                          C:\AutoCAD 2004\help\
                          C:\AutoCAD 2004\express\
                          C:\AutoCAD 2004\support\color\
                          C:\Tkxd30\Support\
                          C:\Tkxd30\Ddtkt\
                          C:\Tkxd30\Tvdl_v30\
                          C:\Tkxd30\Vdien\
                          C:\AutoCAD 2004\drv\
                          C:\AutoCAD 2004\
                          *Invalid*
                          ; error: Function cancelled
                          Lỗi này là gì?
                          Tôi sơ xuất không chạy thử, xin lỗi !
                          1. Lỗi thứ nhất:
                          Để thực sự hoàn chỉnh và triệt để cậu có thể làm như sau:
                          - Sửa lại từ đầu (files mcdam.lsp) đoạn mã của lệnh (lop...) bằng cách ***g hàm (c_lay...) vào hàm (lop...) như dưới đây - Phần in đậm là phần sẽ thêm vào. Với cách này, bất kỳ layer nào được yêu cầu sẽ lập tức được tạo ra. Khi đó hàm c_lay sẽ không còn, vì vậy không cần gọi thực thi (c_lay "s5") nữa.

                          ; MAT CAT DAM
                          ;==============
                          (defun c:mcdam()
                          (setvar "OSMODE" 0)
                          ;---------------------
                          (defun lop (tamlop / tbl t1 t2 key)
                          ;- Phan bo xung them:
                          (setq tbl (tblnext "LAYER" 1))
                          (while tbl
                          (setq t1 (strcase tamlop)
                          t2 (cdr (car (cdr tbl)))
                          )
                          (if (equal t1 t2)
                          (setq key 1)
                          )
                          (setq tbl (tblnext "LAYER"))
                          )
                          (if (/= key 1)

                          (progn
                          (setq tbl NIL)
                          (command "_.LAYER" "N" tamlop "")
                          )
                          )
                          (setq tam_lop NIL)

                          ;----------------------
                          (command "CLAYER" tamlop)
                          (princ)
                          )
                          ;---------------------

                          2. Lỗi thứ 2:
                          Lỗi này do không tìm được Block (có tên là CUDE7A). Người viết files Lisp này đã dùng 1 files Template (dạng *.dwt) trong đó đã có sẵn các Block và Layer cần cấp phát cho lệnh thực thi (Giống như khi tạo kiểu tic_node cho Dim vậy). Hoặc có lưu 1 files tên là CUDE7A.dwg chứa thông tin ký hiệu trong đường dãn khả thi của AutoCAD. Việc khắc phục lỗi này rất đơn giản nhưng cậu cần phải biết cái Block CUDE7A này chứa thông tin ký hiệu gì. Nếu không biết thì phải test thủ công rồi tìm cách thay thế.
                          - Cậu vẽ 1 vòng tròn có đường kính khoảng 500 rồi dùng lệnh WBlock tạo 1 files có tên là CUDE7A.dwg, điểm chèn là tâm đường tròn rồi lưu vào 1 trong các đường dẫn khả thi của AutoCAD (chính là danh sách các đường dãn cậu thấy ở phần báo lỗi lúc trước).
                          - Chạy lệnh Dam và xem cái vòng tròn đó được Insert vào đâu, biểu thị nội dung gì... từ đó sẽ suy ra cái Block đó là ký hiệu gì.
                          - Khi biết được chính xác nội dung Block CUDE7A chắc chắn cậu sẽ biết cách khắc phục lỗi trên.
                          Nguyễn Lam - A.Design Group & N.Architect

                          Ghi chú


                          • #43
                            Ðề: VBA trong Autocad

                            To Ng Lam
                            Xin cám ơn anh. Em đã khắc phục được các lỗi đó rồi. Cám ơn anh đã nhiệt tình giúp đỡ. Chúc anh luôn mạnh khoẻ để giúp đỡ chúng em ..........

                            Ghi chú


                            • #44
                              Ðề: VBA trong Autocad

                              Chà, Khách sáo quá !
                              Nguyễn Lam - A.Design Group & N.Architect

                              Ghi chú


                              • #45
                                Ðề: VBA trong Autocad

                                Có anh nào có tài liệu về VBA for AutoCad không? Upload lên cho anh em tham khao với (tiếng Anh hay Việt đều đwowcj cả)

                                Ghi chú

                                Working...
                                X