Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
5 replies to this topic

#1 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 02 August 2013 - 08:50 AM

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 !


  • 0

#2 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 02 August 2013 - 09:07 AM

(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


  • 0

#3 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 02 August 2013 - 09:13 AM

(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


  • 0

#4 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 02 August 2013 - 10:04 AM

;;;;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.


  • 1

#5 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 02 August 2013 - 02:54 PM

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!


  • 2

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#6 Skywings

Skywings

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 02 August 2013 - 09:39 PM

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


  • 0