Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
vantuan18nd

[Nhờ chỉnh sửa] Lisp cộng thêm hằng số K

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

Nhờ các member chỉnh sửa cho mình Lisp cộng thêm vào một dãy số đã có một hằng số K, mà khi chạy lệnh, lisp tự động nhớ con số mình vừa nhập, không phải nhập lại sau mỗi lần chạy lệnh.

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/10226-lisp-cong-text-toan-bo-ban-ve-them-1-hang-so/
(defun c:as()

(setq i 0 s1 0)
(setq n (getreal "\nnhap so bi tru hoac so de cong: "))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
(repeat (sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent (entget txt_name))
(setq cont (cdr(assoc 1 txt_ent)))
(setq cont (atof cont))
(setq s (+ cont n))
(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
(entmod txt_ent)
(setq i (+ i 1))
);repeat
);defun
;------------------------------------------------------

 

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

(defun c:as()


(setq i 0 s1 0)

(if (= n nill) (setq n (getreal "\nnhap so bi tru hoac so de cong: ")))
(prompt "\nchon cac so can sua ...")

(setq txt (ssget '((0 . "TEXT"))))

(repeat (sslength txt)

(setq txt_name (ssname txt i))

(setq txt_ent (entget txt_name))

(setq cont (cdr(assoc 1 txt_ent)))

(setq cont (atof cont))

(setq s (+ cont n))

(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))

(entmod txt_ent)

(setq i (+ i 1))

);repeat

);defun

Hàm này làm có thể đúng ý bạn, nhưng chưa khắc phục được việc bạn muốn nhập lại hằng số mới thay vì số đã nhập, vì không biết bạn có muốn yêu cầu này hay 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

(defun c:as()

 

 

(setq i 0 s1 0)

 

(if (= n nill) (setq n (getreal "\nnhap so bi tru hoac so de cong: ")))

(prompt "\nchon cac so can sua ...")

 

(setq txt (ssget '((0 . "TEXT"))))

 

(repeat (sslength txt)

 

(setq txt_name (ssname txt i))

 

(setq txt_ent (entget txt_name))

 

(setq cont (cdr(assoc 1 txt_ent)))

 

(setq cont (atof cont))

 

(setq s (+ cont n))

 

(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))

 

(entmod txt_ent)

 

(setq i (+ i 1))

 

);repeat

 

);defun

Hàm này làm có thể đúng ý bạn, nhưng chưa khắc phục được việc bạn muốn nhập lại hằng số mới thay vì số đã nhập, vì không biết bạn có muốn yêu cầu này hay không

Hì, Thanks bạn cd2k44 , Mình dùng được, đáp ứng được công việc hiện tại.

Bạn có thể cho nó hỏi nhập số cần cộng là K sau mỗi lần chạy lênh mới không ? như thế mới hoàn hảo. vì nó cứ im ỉm nhớ số thế, khi mình muốn nhập số mới vào thì lại không được

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

;;;;Nhap hang so
(defun c:nhso ()
(setq n (getreal "\nnhap so bi tru hoac so de cong: "))
)
;;;;
(defun c:as()

(setq i 0 s1 0)

(if (= n nill) (setq n (getreal "\nnhap so bi tru hoac so de cong: ")))
(prompt "\nchon cac so can sua ...")

(setq txt (ssget '((0 . "TEXT"))))

(repeat (sslength txt)

(setq txt_name (ssname txt i))

(setq txt_ent (entget txt_name))

(setq cont (cdr(assoc 1 txt_ent)))

(setq cont (atof cont))

(setq s (+ cont n))

(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))

(entmod txt_ent)

(setq i (+ i 1))

);repeat

);defun

Khi bạn muốn nhập lại hằng số mới, bạn gõ lệnh "nhso" sau đó sử dụng lệnh của bạn như bình thường.

  • 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

Thay vì phải nhập số gia trước, mình chuyển sang chọn đối tượng trước, ngoài ra, mặc định độ chính xác 0.000 chưa hợp lý lắm, mình thêm độ chính xác nữa (mặc định là nguyên 0). Code của bạn được "gọt" lại như sau:

(defun c:as ( / cont i n0 p s txt txt_ent txt_name)
(if (not n) (setq n 0))
(prompt "\nChon cac so can hieu chinh:")
(setq txt (ssget '((0 . "TEXT,MTEXT,RTEXT"))))
(setq n0 n n (getreal (strcat "\Nnhap so gia <" (rtos n) ">:")))
(if (= n nil) (setq n n0))
(setq p (getint "\nNhap do chinh xac [1;2;3]: <0>\n"))
(if (= p nil) (setq p 0))
(setq i 0) (repeat (sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent  (entget txt_name))
(setq cont (cdr(assoc 1 txt_ent)))
(setq cont (atof cont))
(setq s (+ cont n))
(setq txt_ent (subst (cons 1 (rtos s 2 p)) (assoc 1 txt_ent) txt_ent))
(entmod txt_ent)
(setq i (+ i 1)))
(princ))

 

Chúc các bạn thật nhiều niềm vui nhé! 9weekend!

P/S: mình quên không để ý yêu cầu lưu lại số gia cho lần kế tiếp - đã bổ xung trong code trên rồi!

  • Vote tăng 2

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 lyky lưu ý đoạn code này:

 

(setq cont (cdr(assoc 1 txt_ent))) (setq cont (atof cont))

 

sẽ gây lỗi với MText có định dạng (vd: nghiêng hay đậ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

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

Đăng nhập để thực hiện theo  

×