Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

Ketxu k có lời giải đáp, có lẽ phải hỏi 2 bác Microsoft và Autodesk, thích thì được không thích thì thôi ^^

 

Winvista + cad08 + chế độ 8 -1.

Lúc quay video OK

Khởi động CAD lại hết OK :D

 

  • Vote tăng 1

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ữa cháy tạm đi Bạn: dùng bộ gotiengviet của Kỳ Nam (đã có bộ mã Unicode LISP String Hex) để chuyển các file *.txt

kết quả có thể có lổi là mình chuyển thử mottj đoạn có kết quả như sau "mặt bằng chiến lược của cánh én mùa xuânx" (dư chữ x)

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ôi đang viết 1 lisp mà kết quả trả về phụ thuộc phiên bản Win và Cad. Chẳng hạn, với Win/Cad này thì tốt còn Win/Cad kia thì báo lỗi. Hiện giờ thì OK, nhưng liệu với Win/Cad đời sau thì không biết có lỗi hay không.

Hỏi: trong hàm cond, có cách gì để kiểm tra nếu điều kiện thứ 1 bị lỗi thì bỏ qua nó để thực hiện điều kiện 2, nếu điều kiện 2 bị lỗi thì bỏ qua nó để thực hiện điều kiện 3, v.v... ? Ai biết xin chỉ giùm. Thanks!

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! Nhưng hàm (vl-catch-all-error-p arg) chỉ kiểm tra lỗi được trả về bởi hàm (vl-catch-all-apply 'function list) mà thôi.

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

Vậy các điều kiện hàm cond của bạn ntn mà không thể dung cho vl-catch-all-apply được nhỉ? Mình viết cụ thể 1 ví dụ đơn giản

(cond
((if (not (vl-catch-all-error-p (vl-catch-all-apply '/ '(1 0))) (nhiem vu 1))
(t nhiem vu 2)
)

trong đoạn code trên, kiểm tra nếu phép chia 1/0 không sảy ra lỗi thì thực hiện nhiệm vụ 1. nếu sảy ra lỗi thì thực hiện nhiệm vụ 2

  • Vote tăng 1

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

Cho mình hỏi cái này:

Trong lisp mình có 1 cú pháp như sau: (getenv "ACAD")

Cú pháp trên nó sẽ hiện ra - toàn bộ đường dẫn Support path.

Vậy mình muốn tìm List Menu Name trong Hộp thoại Load/Unload Cutomizations (C:menuload) thì có cú pháp nào để lấy 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

Cho mình hỏi cái này:

Trong lisp mình có 1 cú pháp như sau: (getenv "ACAD")

Cú pháp trên nó sẽ hiện ra - toàn bộ đường dẫn Support path.

Vậy mình muốn tìm List Menu Name trong Hộp thoại Load/Unload Cutomizations (C:menuload) thì có cú pháp nào để lấy không.

Bạn đặt câu hỏi khó không nhỉ?

Của bạn đây :


(defun c:Lmenu()
 (vlax-for x (vla-get-MenuGroups (vlax-get-acad-object))
   (princ "\n")
   (princ (vl-filename-base(vla-get-MenuFileName x)))
 )
)

  • Vote tăng 1

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

Phản hồi nhanh quá! Cảm ơn a Tue_NV nhiều....

Nhưng lúc nãy hậu đậu hỏi chưa hết ý...

Ý của mình là muốn lập 1 hàm điều kiện như sau:

Tìm "Menu" trong "List Menu Name" nếu "Menu" đã có thì dừng lại, nếu chưa thì thực hiện các bước khác tiếp theo.

---

Hàm trên của a Tue_NV đã lấy được danh sách rồi, bi giờ muốn dò tìm tên của 1 menu nào đó thì mình phải làm sao....Nhờ các a giúp giùm.

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

Phản hồi nhanh quá! Cảm ơn a Tue_NV nhiều....

Nhưng lúc nãy hậu đậu hỏi chưa hết ý...

Ý của mình là muốn lập 1 hàm điều kiện như sau:

Tìm "Menu" trong "List Menu Name" nếu "Menu" đã có thì dừng lại, nếu chưa thì thực hiện các bước khác tiếp theo.

---

Hàm trên của a Tue_NV đã lấy được danh sách rồi, bi giờ muốn dò tìm tên của 1 menu nào đó thì mình phải làm sao....Nhờ các a giúp giùm.

Nếu đã có list name rồi -> Dùng hàm member đi bạn

  • Vote tăng 1

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

Ok rồi! Thanks các sư quynh nhiều nhiều.

---------------

Edit: Vấn đề đã được giải quyết nhưng có chỗ không hiểu nên muốn hỏi cho rõ hơn.

Khi em dùng Lisp của a Tue_NV để lấy ra một List Menu Name và đây là kết quả:

custom

iso-vinx

acad

rsquirrel

acimpression

autodeskseek

acetmain

"acetmain"

Nếu đúng thì nó xuất ra 1 danh sách 7 đối tượng đầu là đủ rồi (giống với hiện thị của CAD) nhưng tại sao lại có thêm 1 giá trị cuối cùng "acetmain" nữa, và nó làm cho mình khó sử lý danh sách hơn so với khi không có nó...Vậy thì bản chất của thằng này mang ý nghĩa gì...?

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

Ok rồi! Thanks các sư quynh nhiều nhiều.

---------------

Edit: Vấn đề đã được giải quyết nhưng có chỗ không hiểu nên muốn hỏi cho rõ hơn.

Khi em dùng Lisp của a Tue_NV để lấy ra một List Menu Name và đây là kết quả:

 

Nếu đúng thì nó xuất ra 1 danh sách 7 đối tượng đầu là đủ rồi (giống với hiện thị của CAD) nhưng tại sao lại có thêm 1 giá trị cuối cùng "acetmain" nữa, và nó làm cho mình khó sử lý danh sách hơn so với khi không có nó...Vậy thì bản chất của thằng này mang ý nghĩa gì...?

Giá trị "acetmain" là giá trị cuối cùng mà hàm (princ (vl-filename-base(vla-get-MenuFileName x)) trả về trên command.

Bạn có thể dùng thêm (princ) để thoát êm

Ví dụ:

(defun c:1() (princ "1") (princ))

Hãy dùng lisp trên, có sử dụng (princ) và không sử dụng (princ) để rút ra kết luận

  • Vote tăng 1

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

@avi612: Nếu chỉ để kiểm tra 1 menu đã tồn tại hay chưa thì chỉ cần dùng duy nhất hàm Ketxu hướng dẫn, khỏi phải list cho mất công

If (menugroup "Tên group name của bạn")

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

Giá trị "acetmain" là giá trị cuối cùng mà hàm (princ (vl-filename-base(vla-get-MenuFileName x)) trả về trên command.

Bạn có thể dùng thêm (princ) để thoát êm

Ví dụ:

(defun c:1() (princ "1") (princ))

Hãy dùng lisp trên, có sử dụng (princ) và không sử dụng (princ) để rút ra kết luận

Đã hiểu sự khác biệt của nó...:)

 

@Doan Van Ha: Đúng là vấn đề của mình đã được giải quyết bằng cách của Ketxu hướng dẫn, nhưng mà muốn hỏi để hiểu hết luôn phòng có khi gặp phải.

Thanks for all: đã hướng dẫn tận tình...hehe :)

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ôi có một biến như sau: (setq dau 10)

và một list: (setq lcd '( 1 2 3 4 5 6 7 8 9)

nhờ các bạn viết hộ code để cộng "dau" vào từng phần tử trong list "lcd"

(tôi đã dùng hàm "Mapcar" nhưng báo lỗi: (setq b (mapcar '+ dau lcd))...

Xin cản ơn !

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ôi có một biến như sau: (setq dau 10)

và một list: (setq lcd '( 1 2 3 4 5 6 7 8 9)

nhờ các bạn viết hộ code để cộng "dau" vào từng phần tử trong list "lcd"

(tôi đã dùng hàm "Mapcar" nhưng báo lỗi: (setq b (mapcar '+ dau lcd))...

Xin cản ơn !

Đây bạn :

(mapcar '+ (list dau dau dau dau dau dau dau dau dau) lcd)

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ôi có một biến như sau: (setq dau 10)

và một list: (setq lcd '( 1 2 3 4 5 6 7 8 9)

nhờ các bạn viết hộ code để cộng "dau" vào từng phần tử trong list "lcd"

(tôi đã dùng hàm "Mapcar" nhưng báo lỗi: (setq b (mapcar '+ dau lcd))...

Xin cản ơn !

(mapcar '(lambda (x) (+ x dau)) lcd)

  • Vote tăng 1

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

Mình có vài thắc mắc sau:

1 - Làm sao để trích ra được từng đường dẫn riêng biệt sau khi ta dùng hàm (getenv "ACAD") và khi được trích ra, giá trị của nó có phải là chuỗi không, dấu ( ; và " " ) có được loại bỏ không?

Minh định lập 1 câu điều kiện như sau, thì câu lệnh của mình sẽ phải viết như thế nào.

"Nếu đường dẫn #path chưa có trong (getenv "ACAD") thì thực hiện (load "#path") nếu có rồi thì thực hiện bước A B C D....".

2 - Câu lệnh (setenv "ACAD" #path) có tác dụng gì mà khi mình thử chạy thì tất cả các đường dẫn trong Support Files của mình mất hết và thay vào đó là đường dẫn tên #path. Làm ách nào để khôi phục lại các đường dẫn bị mất.

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

2. Get theo mình dịch là đọc. Set theo mình dịch là gán nên bạn đã gán cho "nó" đường dẩn mới trụi lủi cái #path. nếu nuốn thêm cái #path vào cái hiện có thì dùng hàm ghép chuổi xong hảy gán. Bạn không cần kiểm tra cứ ghép chuỗi xong thì gán vì nếu trùng thì cad tự loại bớt ra thôi.

 

Mình đoán bạn đang đi theo đường làm bộ lisp thì phải những vấn đề tạo đường dẩn, load menu thì trên cadviet nhiều rồi có thể hơi tản mạn khó theo dõi. ôm trước có bạn cũng đã nói tham khảo bài về tạo bộ lisp di động của ình nhưng hình như bạn ko xem chứ nếu có thì số câu hỏi của bạn hổm rày giảm bớt hơn phân nửa.

  • Vote tăng 1

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

Mình có vài thắc mắc sau:

1 - Làm sao để trích ra được từng đường dẫn riêng biệt sau khi ta dùng hàm (getenv "ACAD") và khi được trích ra, giá trị của nó có phải là chuỗi không, dấu ( ; và " " ) có được loại bỏ không?

Minh định lập 1 câu điều kiện như sau, thì câu lệnh của mình sẽ phải viết như thế nào.

 

2 - Câu lệnh (setenv "ACAD" #path) có tác dụng gì mà khi mình thử chạy thì tất cả các đường dẫn trong Support Files của mình mất hết và thay vào đó là đường dẫn tên #path. Làm ách nào để khôi phục lại các đường dẫn bị mất.

1./ Bạn nghiên cứu hàm vl-string-search

Đó là 1 string. Cứ gặp dấu ; là lấy ra đường dẫn.

Bạn làm thử xem sao

 

2./ (setenv "ACAD" #path) -> set toàn bộ đường dẫn ngăn cách bởi dấu ; vào support

#path chỉ có 1 đường dẫn thì nó set 1 đường dẫn là đúng rồi

  • Vote tăng 1

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

Hỏi gì một lúc mà lắm câu thế. Trả lời câu 1 trước:

(defun C:HA()

(reverse (cdr (reverse (LM:str->lst (getenv "ACAD") ";")))))
(defun LM:str->lst ( str del / pos ) (if (setq pos (vl-string-search del str)) (cons (substr str 1 pos) (LM:str->lst (substr str (+ pos 1 (strlen del))) del)) (list str)))

  • Vote tăng 1

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


×