Thứ Ba, 18 tháng 5, 2010

Hướng dẩn viết lisp bài 28:

Bạn nên theo dỏi theo tên bài viết tăng từ nhỏ tới lớn thì mới đúng trình tự!

*Trong khi viết lisp đôi khi có các dữ liệu nhập vào lặp lại cứ mỗi lần lisp hỏi lại phải nhập vào. Cách hay hơn là dữ liệu nào nhập vào rồi thì ghi nhớ lại cho lần sau nếu cần giá trị khác thì nhập vào còn nếu vẫn dùng giá trị cũ thì chỉ cần enter là có giá trị cũ để dùng.
-Sau đây là đoạn lisp giúp cho bạn có thêm 2 hàm có tác dụng lưu giữ giá trị nhập vào. Mình tìm thấy nó trong 1 đĩa cd ko biết rỏ tác giả và cũng không tìm hiểu cách làm việc của nó cứ biết tác dụng và ứng dụng vào công việc thôi. Bạn cũng vậy nhé cứ lưu đoạn này lại sau đó dùng theo cách mình hướng dẩn.

;---------------------------------------
(defun nstr (stri def)
(princ stri)
(princ "<")
(princ " ")
(princ def)
(princ ">")
(princ ":")
(princ " ")
);defun nstr
;--------------------
(defun nstr1 (stri)
(princ stri)
(princ "<")
(princ "Nhap vao")
(princ ">")
(princ ":")
(princ " ")
);defun nstr1
;---------------------
(defun nint (prompt def / temp)
(if def
(setq temp (getint (nstr prompt def)))
(setq def (getint (nstr1 prompt)))
);if def
(if temp
(setq def temp)
def
);if temp
);defun nint
;---------------------
(defun dnint (prompt def / temp)
(if def
(setq temp (getreal (nstr prompt def)))
(setq def (getreal (nstr1 prompt)))
);if def
(if temp
(setq def temp)
def
);if temp
);defun nint
;--------------------
(defun ndist (po prompt def / temp) ;nhan kh/cach va luu gia tri mac dinh
(if def
(setq temp (getdist po (nstr prompt def)))
(setq def (getdist po (nstr1 prompt)))
)if def
(if temp
(setq def temp)
def
);if temp
);defun ndist
;-----------------------------------


Cách dùng:
-Hàm ndint: lưu giữ giá trị số. Giá trị số này được nhập từ bàn phím.


(setq giatri (dnint "\nTi le chinh "giatri1))
(setq giatri1 giatri)

Ví dụ đoạn lisp scale với tỉ lệ scale được lưu lại.

(Defun c:sclt (a)
(command "undo" "be")
(Prompt "\nChon doi tuong muon chinh ti le")
(setq dtthu (ssget))
(setq a (getpoint "\nChon tam phong: "))
(setq tilechinh (dnint "\nTi le chinh "tiledchinh1))
(setq tiledchinh1 tilechinh)
(command "scale" dtthu "" (list (car a)(cadr a)) tilechinh)
(command "undo" "end")
(Prin I)
)

*Cách dùng:
-Hàm ndist: lưu giữ giá trị khoảng cách. Giá trị này được chuyễn thành số, giá trị này có thể được nhập từ bàn phím.

(setq giatri (ndist a "\nDo cao khoi muon ve "giatri1))
(setq giatri1 giatri)
Trong đó a là điểm đã được xác định.
Ví dụ đoạn lisp vẽ box với cao độ khối được lưu lại.

(Defun c:khoi (a)
(command "undo" "be")
(setq a (getpoint "\nDiem thu nhat:"))
(setq b (getcorner a"\nDiem thu hai: "))
(setq dckhoive (ndist a "\nDo cao khoi muon ve "cckhoive1))
(setq cckhoive1 dckhoive)
(command "box" (list (car a) (cadr a) (caddr a)) (list (car b) (cadr b) (caddr b)) dckhoive)
(command "undo" "end")
(Prin I)
)


Bạn lưu ý đoạn định nghĩa hai hàm này chỉ cần load lên 1 lần trong 1 phiên làm việc thì các lisp có dùng 2 hàm này điều chạy được cả nhé.

1 nhận xét:

  1. các bài viết của a rất hữu ích..cảm ơn a rất nhiều!

    Trả lờiXóa

Khi viết nhận xét mong bạn không đứng vai trò nặc danh! Bạn có thể chọn Name/Url trong đó Url là http://duy782006.blogspot.com/ như vậy hay hơn nặc danh bạn nhé.