Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
hoaletrang

Bản chất của ACET-ERROR-INIT và ACET-ERROR-RESTORE, những lưu ý sử dụng?

Các bài được khuyến nghị

Chào mọi người, mới làm quen với Lisp thấy một số chương trình mẫu có sử dụng hàm ACET-ERROR-INIT và ACET-ERROR-RESTORE để thiết lập và khôi phục biến hệ thống.

Ví dụ:

 (setq oldpo (getvar "pdmode"))
 (setq oldla (getvar "clayer"))
 (setq oldos (getvar "osmode"))

 (setvar "pdmode" 3)
 (setvar "clayer" "5")
 (setvar "osmode" 0)
;..................................
;..................................
 (setvar "pdmode" oldpo)
 (setvar "clayer" oldla)
 (setvar "osmode" oldos)
;Có thể thay thế bằng
(ACET-ERROR-INIT (LIST (LIST "pdmode" 3 "OSMODE" 0 "clayer" "5")  T))
;Sau đó muốn khôi phục thì dùng
(ACET-ERROR-RESTORE)

Tuy nhiên cách thức thực hiện của hai phương pháp trên khác nhau ra sao, lợi hại thế nào thì không thấy có trong Help và cũng không rõ hai hàm đó và một số hàm dựng sẵn khác tương tự như thế nằm ở đâu, cách sử dụng ra sao.

Rất mong nhận được sự chỉ giáo.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào bạn hoaletrang đã có những bài viết đầu tiên :D

 (setq oldpo (getvar "pdmode"))
 (setq oldla (getvar "clayer"))
 (setq oldos (getvar "osmode"))

 (setvar "pdmode" 3)
 (setvar "clayer" "5")
 (setvar "osmode" 0)
;..................................
MAINFUNCTION
;..................................
 (setvar "pdmode" oldpo)
 (setvar "clayer" oldla)
 (setvar "osmode" oldos)

Với cách này như code trên không thực hiện được chức năng bẫy lỗi khi User nhấn phím ESC giữa chừng khi đang thực hiện MAINFUNCTION. Tức là không trả lại thiết lập ban đầu khi USER nhấn phím ESC giữa chừng khi đang thực hiện MAINFUNCTION

 

 

 
(ACET-ERROR-INIT (LIST (LIST "pdmode" 3 "OSMODE" 0 "clayer" "5") T))
;..................................
MAINFUNCTION
;..................................
(ACET-ERROR-RESTORE)

Cách này thực hiện chức năng bẫy lỗi khi User nhấn phím ESC giữa chừng khi đang thực hiện MAINFUNCTION. Tức là trả lại thiết lập ban đầu khi USER nhấn phím ESC giữa chừng khi đang thực hiện MAINFUNCTION. -> trả lại chế độ làm việc của CAD ở dòng command

Bạn thực hiện dòng 2 đoạn code này sẽ thấy sự khác biệt. Bật chế độ OSMODE để kiểm chứng

Tại 2 dòng

Nhap diem thu nhat :

Nhap diem thu hai :

Bạn bấm ESC sẽ thấy sự khác biệt

Đoạn 1 :

(defun c:drl(/ p1 p2)
 (setq oldos (getvar "osmode"))
 (setvar "osmode" 0)
 (setq p1 (getpoint "\n Nhap diem thu nhat :"))
 (setq p2 (getpoint p1 "\n Nhap diem thu hai :"))
 (command "LINE" p1 p2 "")
 (setvar "osmode" oldos)
)

Đoạn 2 :

(defun c:drl(/ p1 p2)
 (setq oldos (getvar "osmode"))
 (ACET-ERROR-INIT (LIST (LIST "OSMODE" 0) T))
 (setq p1 (getpoint "\n Nhap diem thu nhat :"))
 (setq p2 (getpoint p1 "\n Nhap diem thu hai :"))
 (command "LINE" p1 p2 "")
 (ACET-ERROR-RESTORE)
)

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cảm ơn bạn đã có những giải thích bổ ích tuy nhiên vẫn còn một số thắc mắc.

Có lần sử dụng 2 hàm này, khi nhấn ESC thì toàn bộ những gì có trong bản vẽ đều bị xóa hết, đành phải quay về phương pháp thủ công. (Không nhớ rõ là trường hợp nào)

Ngoài ra, nguồn gốc của các hàm ACET-XXX này nằm ở đâu, cách thức sử dụng như thế nào, ý nghĩa của các tham số..., tìm hòa mà chẳng biết nằm ở đâu.

À, nhân tiện hỏi Tue_NV luôn xem có giúp được vụ biên dịch file vlx có chứa file dvb không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nhờ mấy cao thủ giúp mình 1 tí:

khi dùng hàm ACET-ERROR-INIT và ACET-ERROR-RESTORE, chạy trực tiếp từ file LSP thì ok, Nhưng khi đã biên dịch ra file VLX thì cad báo lỗi: "no function definition: ACET-ERROR-INIT".

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nhờ mấy cao thủ giúp mình 1 tí:

khi dùng hàm ACET-ERROR-INIT và ACET-ERROR-RESTORE, chạy trực tiếp từ file LSP thì ok, Nhưng khi đã biên dịch ra file VLX thì cad báo lỗi: "no function definition: ACET-ERROR-INIT".

hàm ACET-ERROR-INIT và ACET-ERROR-RESTORE thuộc bộ Express Tool.

Lỗi trên có thể do các nguyên nhân :

1. chưa cài Express Tool.

2. đã cài Express Tool, nhưng chưa Active Express Tool : To activate the AutoCAD Express Tools, use the EXPRESSTOOLS command.

3. Express Tool bị lỗi.

4. ....

 

..............

Ngoài ra, nguồn gốc của các hàm ACET-XXX này nằm ở đâu, cách thức sử dụng như thế nào, ý nghĩa của các tham số..., tìm hòa mà chẳng biết nằm ở đâu.

....

Bạn tham khảo :

- Các hàm thư viện trong Express

- file AcetUtil.chm

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nhờ mấy cao thủ giúp mình 1 tí:

khi dùng hàm ACET-ERROR-INIT và ACET-ERROR-RESTORE, chạy trực tiếp từ file LSP thì ok, Nhưng khi đã biên dịch ra file VLX thì cad báo lỗi: "no function definition: ACET-ERROR-INIT".

Tương tự với hàm (inintdia) nữa ạ ^^..Khi biên dịch vlx thì sẽ bị lỗi này,mặc dù đã active đầy đủ bộ express..Nếu đi đường vòng dịch lsp->fas->vlx thì giải quyết được..Cái nì e hỏi r mà vẫn chưa có đáp án :lol:(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tương tự với hàm (inintdia) nữa ạ ^^..Khi biên dịch vlx thì sẽ bị lỗi này,mặc dù đã active đầy đủ bộ express..Nếu đi đường vòng dịch lsp->fas->vlx thì giải quyết được..Cái nì e hỏi r mà vẫn chưa có đáp án :lol:(

Thử kiểm tra lại với code của Tue_NV bài số 2

Tạo file VLX -> kết quả OK trên CAD 2010, 2007, 2008.

 

- bạn sử dụng CAD mấy ?

- không biết có liên quan đến hàm (vl-load-com) không ?

Chỉnh sửa theo gia_bach

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×