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

Diễn giải các lệnh trong 1 file Autolisp

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

Mình có một đoạn Lisp, mìnhđọc mãi không hiểu lắm nhờ các bạn giải thích giúp mình. Một số lệnh trong Lisp mình đã đọc ở phần Help của Lisp nhưng mình vẫn không hiểu. Vì mình vừa mới nhập môn Lisp. Có bạn nào có tài liệu về giải thích các lệnh trong Lisp không, nếu có gửi cho mình với. Cám ơn các bạn nhiều. Sau đây là đoạn Lisp mình nhờ các bạn giải thích dùm:

(defun c:noi (/)
(command "_.undo" "be")
(setvar "cmdecho" 0)
(setq ss (ssget (list (cons 8 "TEXTCAODOMIA"))))
(setq ss1 (ssadd))
(setq ss2 (ssadd))
(setq cnt 0)
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(if (= (cdr (assoc 72 ent)) 0)
(setq ss2 (ssadd (ssname ss cnt) ss2))
(progn
(if (= (cdr (assoc 72 ent)) 2)
(setq ss1 (ssadd (ssname ss cnt) ss1))
)
)
)
(setq cnt (+ cnt 1))

)
(setq ro (cdr (assoc 50 (entget (ssname ss1 0)))))
(setq cnt 0)
(repeat (min (sslength ss1) (sslength ss2))
(setq ent (entget (ssname ss1 cnt)))
(setq pt (cdr (assoc 11 ent)))
(setq pt (polar pt ro 0.8))
(setq dk 1)
(setq cnt1 0)
(while (and dk (< cnt1 (max (sslength ss1) (sslength ss2))))
(setq ent1 (entget (ssname ss2 cnt1)))
(setq pt1 (cdr (assoc 10 ent1)))
(if (and (equal (car pt) (car pt1) 0.001)
(equal (cadr pt) (cadr pt1) 0.001)
)
(progn
(setq
txt (strcat (cdr (assoc 1 ent)) "." (cdr (assoc 1 ent1)))
)
(setq ent (subst (cons 1 txt) (assoc 1 ent) ent))
(setq ent (subst (cons 72 1) (assoc 72 ent) ent))
(entmod ent)
(command ".ERASE" (ssname ss2 cnt1) "")
(setq ss2 (ssdel (ssname ss2 cnt1) ss2))
(setq dk nil)
)
)
(setq cnt1 (+ cnt1 1))
)
(setq cnt (+ cnt 1))
)
(setq ss nil)
(setq ss1 nil)
(setq ss2 nil)
(command "_.undo" "e")
(princ)
)

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

Bạn hãy bắt đầu học với những file lisp thật ngắn thôi.

 

Với file lisp dài như thế này người giải thích cho bạn sẽ tốn quá nhiều công sức, trong khi kiến thức bạn thu được từ một mớ lisp hỗn độn đó sẽ không là bao nhiêu.

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ó một đoạn Lisp, mìnhđọc mãi không hiểu lắm nhờ các bạn giải thích giúp mình. Một số lệnh trong Lisp mình đã đọc ở phần Help của Lisp nhưng mình vẫn không hiểu. Vì mình vừa mới nhập môn Lisp. Có bạn nào có tài liệu về giải thích các lệnh trong Lisp không, nếu có gửi cho mình với. Cám ơn các bạn nhiều. Sau đây là đoạn Lisp mình nhờ các bạn giải thích dùm:

(defun c:noi (/)
(command "_.undo" "be")
(setvar "cmdecho" 0)
(setq ss (ssget (list (cons 8 "TEXTCAODOMIA"))))
(setq ss1 (ssadd))
(setq ss2 (ssadd))
(setq cnt 0)
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(if (= (cdr (assoc 72 ent)) 0)
(setq ss2 (ssadd (ssname ss cnt) ss2))
(progn
(if (= (cdr (assoc 72 ent)) 2)
(setq ss1 (ssadd (ssname ss cnt) ss1))
)
)
)
(setq cnt (+ cnt 1))

)
(setq ro (cdr (assoc 50 (entget (ssname ss1 0)))))
(setq cnt 0)
(repeat (min (sslength ss1) (sslength ss2))
(setq ent (entget (ssname ss1 cnt)))
(setq pt (cdr (assoc 11 ent)))
(setq pt (polar pt ro 0.8))
(setq dk 1)
(setq cnt1 0)
(while (and dk (< cnt1 (max (sslength ss1) (sslength ss2))))
(setq ent1 (entget (ssname ss2 cnt1)))
(setq pt1 (cdr (assoc 10 ent1)))
(if (and (equal (car pt) (car pt1) 0.001)
(equal (cadr pt) (cadr pt1) 0.001)
)
(progn
(setq
txt (strcat (cdr (assoc 1 ent)) "." (cdr (assoc 1 ent1)))
)
(setq ent (subst (cons 1 txt) (assoc 1 ent) ent))
(setq ent (subst (cons 72 1) (assoc 72 ent) ent))
(entmod ent)
(command ".ERASE" (ssname ss2 cnt1) "")
(setq ss2 (ssdel (ssname ss2 cnt1) ss2))
(setq dk nil)
)
)
(setq cnt1 (+ cnt1 1))
)
(setq cnt (+ cnt 1))
)
(setq ss nil)
(setq ss1 nil)
(setq ss2 nil)
(command "_.undo" "e")
(princ)
)

Bạn mới học lisp cũng như mình thì nên học tưtừ lấy một đoạn lisp ngắn ngắn có sẵn rùi đọc và tự bổ sung thêm các tính năng cho lisp đó. như vậy mình vừa thực hành

mà vừa nhớ lâu. đọc đến chỗ nào ko hỉu thì copy cho đó ra hỏi thui. bạn copy ra thế kia mà trả lời hết cho bạn chắc là phải viết thành sách.

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

×