Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
2 replies to this topic

#1 Truongson2006corp

Truongson2006corp

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 02 September 2007 - 04:17 PM

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)
)

  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 02 September 2007 - 09:07 PM

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.
  • 0

#3 hungpx2008

hungpx2008

    biết vẽ line

  • Members
  • PipPip
  • 28 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 04 September 2007 - 12:59 PM

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.
  • 0