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....
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.
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
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
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
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é.
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)
+ 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ấ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)
+ 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 cancelledLỗ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
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 cancelledLỗ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.
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.
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ú