Đến nội dung


Hình ảnh
- - - - -

Giải thích đạn code của Lisp


  • Please log in to reply
4 replies to this topic

#1 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 25 March 2011 - 01:58 AM

Chào cả nhà! em đang học làm quen với lisp mà thấy hơi khó hỉu xí.em đang sử dụng lisp ví dụ của bác Ssg để tự học : có đoạn chú thích sau em không hiểu ( đoạn tô màu):
;;;----------------------------------------------------------
(defun C:NHA(/ W H1 H2 p1 p2 p3 p4 p5 OldOs)
;;;Nhap so lieu
(setq
W (getreal "\nChieu rong W = ")
H1 (getreal "\nChieu cao H1 = ")
H2 (getreal "\nChieu cao chop H2 = ")
p1 (getpoint "\nDiem chuan: ")
;;;----------------------------------------------------------
;;;Tinh toa do
p2 (polar p1 0.0 W)
p3 (polar p2 (/ pi 2) H1)
p4 (polar p3 pi W)
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))
)


;;;----------------------------------------------------------
;;;Luu bien osmode
(setq OldOs (getvar "osmode"))
;;;----------------------------------------------------------
;;;Set object snap OFF
(setvar "osmode" 0)
;;;----------------------------------------------------------
;;;Goi lenh AutoCAD
(command "line" p1 p2 p3 p4 "c")
(command "line" p3 p5 p4 "")
;;;----------------------------------------------------------
;;;Tai lap osmode
(setvar "osmode" OldOs)
;;;----------------------------------------------------------
;;;Lang le rut lui
(princ)
)

  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 25 March 2011 - 08:25 AM

Bạn có thể qua topic Hướng dẫn lập trình lisp, hoặc CÙng nhau học Lisp... để hỏi vấn đề này.
Về đoạn màu đỏ :
;;;Luu bien osmode -> lấy chế độ bắt điểm hiện hành (getvar "osmode") và gán nó vào biến OldOs
Sở dĩ phải làm vậy vì như bạn biết, các command của CAD bị chi phối bởi chế độ bắt điểm, nếu để, rất dễ bị tình trạng điểm mình chọn nó lại k chọn mà lấy thằng gần nhất theo chế độ bắt điểm, vì vậy, khi thực hiện thao tác command, ta phải tắt nó đi.

(setq OldOs (getvar "osmode"))
;;;----------------------------------------------------------
;;;Set object snap OFF
(setvar "osmode" 0)
;;;----------------------------------------------------------

--> Sau khi tắt đu thì thực hiện lệnh Line, đi qua 4 điểm p1,p2,p3,p4,close và Line p3,p5,p4

;;;Goi lenh AutoCAD
(command "line" p1 p2 p3 p4 "c")
(command "line" p3 p5 p4 "")
;;;----------------------------------------------------------


-> Thực hiện xong 2 command trên rồi thì ta trả lại chế độ bắt điểm như cũ cho người dùng bằng cách lấy lại giá trị từ biến oldOs..

;;;Tai lap osmode
(setvar "osmode" OldOs)
;;;----------------------------------------------------------
;;;Lang le rut lui
(princ)
)


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 25 March 2011 - 08:26 AM

Chào cả nhà! em đang học làm quen với lisp mà thấy hơi khó hỉu xí.em đang sử dụng lisp ví dụ của bác Ssg để tự học : có đoạn chú thích sau em không hiểu ( đoạn tô màu):
;;;----------------------------------------------------------
(defun C:NHA(/ W H1 H2 p1 p2 p3 p4 p5 OldOs)
;;;Nhap so lieu
(setq
W (getreal "\nChieu rong W = ")
H1 (getreal "\nChieu cao H1 = ")
H2 (getreal "\nChieu cao chop H2 = ")
p1 (getpoint "\nDiem chuan: ")
;;;----------------------------------------------------------
;;;Tinh toa do
p2 (polar p1 0.0 W)
p3 (polar p2 (/ pi 2) H1)
p4 (polar p3 pi W)
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))
)


;;;----------------------------------------------------------
;;;Luu bien osmode
(setq OldOs (getvar "osmode"))
;;;----------------------------------------------------------
;;;Set object snap OFF
(setvar "osmode" 0)
;;;----------------------------------------------------------
;;;Goi lenh AutoCAD
(command "line" p1 p2 p3 p4 "c")
(command "line" p3 p5 p4 "")
;;;----------------------------------------------------------
;;;Tai lap osmode
(setvar "osmode" OldOs)
;;;----------------------------------------------------------
;;;Lang le rut lui
(princ)
)

Mạn phép bác Ssg, xin giải thích giùm bạn về đoạn code đó như thế này: đoạn code này nhằm 1 mục đích
là để tránh bắt nhầm điểm khi dùng các hàm (command) nếu chế độ osnap lúc đó đang mở. Đây là 1 kinh nghiệm
"xương máu" của người lập trình. Giải thích chi tiết thì như sau:
;;;----------------------------------------------------------
;;;Luu bien osmode
(setq OldOs (getvar "osmode")) ;đoạn này để lưu lại biến osnap mà bạn đang đặt trước khi dùng hàm (command).
;;;----------------------------------------------------------
;;;Set object snap OFF
(setvar "osmode" 0) ;đoạn này để tắt chế độ bắt điểm osnap mà ta đã đặt trước khi dùng (command).
;nếu không tắt thì 2 đoạn vẽ bằng (command) dưới đây có thể bắt điểm sai.
;;;----------------------------------------------------------
;;;Goi lenh AutoCAD
(command "line" p1 p2 p3 p4 "c") ;dùng để vẽ line qua p1, p2, p3, p4 và đóng lại ở p1.
(command "line" p3 p5 p4 "") ;dùng để vẽ line qua p3, p4, p4 và dừng.
;;;----------------------------------------------------------
;;;Tai lap osmode ;đoạn này để đặt lại chế độ osnap như đã đặt trước khi dùng (command).
(setvar "osmode" OldOs)
;;;----------------------------------------------------------
;;;Lang le rut lui
(princ) ;in một dòng trống
)
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#4 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 March 2011 - 08:34 AM

Chào bạn,
Mình thì ko biết lisp nhiều nhưng cũng xin giúp 1 chút
Đoạn màu đỏ mỗi dòng đều có chú thích rất rõ ràng (dòng có 3 dấu ; là chú thích.

biến OSMODE và OSNAP là 2 biến hệ thống (bạn vào Express > Tôls > System Variable Editor tìm hiểu thêm)

;;;Goi lenh AutoCAD
(command "line" p1 p2 p3 p4 "c") >> vẽ line qua 4 diem p1, p2, p3, p4 rồi quay lại điểm đầu => có 4 line
(command "line" p3 p5 p4 "") >> vẽ line qua 3 diem p3, p4, p5
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#5 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 25 March 2011 - 11:53 AM

em cảm ơn các bác nhiều ge! trong quá trình học mong các bác giúp đỡ nhiều! :rolleyes:
  • 0