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

  • 47cg2
    replied
    Ðề: VBA trong Autocad

    Em là sinh viên trường xây Dựng em rất muốn tìm hiểu về vba cho cho autocad nhưng thiếu tài liệu quá. Em thấy bác PMXD rất giỏi về VBA cho autocad vây bác có thể đưa lên một số tài liệu để anh em tham khao được ko.

    Leave a comment:


  • Vandtd
    replied
    Ðề: 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ả)

    Leave a comment:


  • nglam_adg
    replied
    Ðề: VBA trong Autocad

    Chà, Khách sáo quá !

    Leave a comment:


  • ttkh
    replied
    Ðề: 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 ..........

    Leave a comment:


  • nglam_adg
    replied
    Ðề: 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.

    Leave a comment:


  • ttkh
    replied
    Ðề: 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

    Leave a comment:


  • nglam_adg
    replied
    Ðề: 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ự.

    Leave a comment:


  • ttkh
    replied
    Ðề: 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

    Leave a comment:


  • Minh
    replied
    Ðề: VBA trong Autocad

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

    Leave a comment:


  • Tran Duc Minh
    replied
    Ðề: 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.

    Leave a comment:


  • tdhtkcd
    replied
    Ðề: 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

    Leave a comment:


  • PMXD
    replied
    Ðề: 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

    Leave a comment:


  • htuan
    replied
    Ðề: 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é!

    Leave a comment:


  • PMXD
    replied
    Ðề: 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é.

    Leave a comment:


  • ngayxuan
    replied
    Ðề: 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.

    Leave a comment:

Working...
X