Đến nội dung


Hình ảnh
- - - - -

Cần gấp lisp tăng giá trị khi chọn


  • Please log in to reply
8 replies to this topic

#1 leemindjan

leemindjan

    biết pan

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

Đã gửi 27 June 2008 - 09:51 PM

Các bác giúp mình với,mình đang cần lisp này gấp lắm,mình lỡ đánh số cọc gần cả ngàn cọc nhưng phát hiện đánh thiếu 1 cọc,nên bi giờ đánh số cọc đó thì các cọc sau phải đánh số tăng thêm 1,mà cả ngàn số như vậy thì edit đến bao giờ,các bác có biết lisp nào mà khi bấm chọn vào số đó thì sẽ tăng lên 1,nếu chọn vào cả nhóm và cả nhóm tăng lên 1 thì càng hay,nếu mà cho phép chọn giá trị để tăng thì càng hay nữa ( :mellow: ) ví dụ mình đánh thiếu 2 cọc thì muốn nó tăng lên 1 lúc 2 giá trị luôn.Giúp giùm mình nhé,cần gấp lắm.
  • 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 27 June 2008 - 10:26 PM

Các bác giúp mình với,mình đang cần lisp này gấp lắm,mình lỡ đánh số cọc gần cả ngàn cọc nhưng phát hiện đánh thiếu 1 cọc,nên bi giờ đánh số cọc đó thì các cọc sau phải đánh số tăng thêm 1,mà cả ngàn số như vậy thì edit đến bao giờ,các bác có biết lisp nào mà khi bấm chọn vào số đó thì sẽ tăng lên 1,nếu chọn vào cả nhóm và cả nhóm tăng lên 1 thì càng hay,nếu mà cho phép chọn giá trị để tăng thì càng hay nữa ( :mellow: ) ví dụ mình đánh thiếu 2 cọc thì muốn nó tăng lên 1 lúc 2 giá trị luôn.Giúp giùm mình nhé,cần gấp lắm.

Bạn xem lisp dồn số hiệu bản vẽ ở đây: http://www.cadviet.c...ent/view/22/34/
  • 1

#3 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 27 June 2008 - 10:27 PM

(defun myerror (s)
(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD) ; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(princ)
)
(defun intro ()
(princ "\nCopyright by Nguyen Gia Dat (Datnggia@gmail.com - 0915169886)")
)
(defun bocchu (ss1 c)
(setq ob (entget (ssname ss1 c)))
(setq ts (assoc 1 ob))
(setq a (cdr ts))
)
(defun sothanhchu (num) (rtos num 2 2))
(defun connumint (num) (rtos num 2 0))
(defun thaychu (Ob newstr)
(setq txtstr (assoc 1 Ob))
(setq newstr (cons 1 newstr))
(entmod (subst newstr txtstr Ob))

)
(defun chonchu (dongnhac)
(prompt dongnhac)
(ssget
'((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))
)
)
(defun chon (str) (ssget '((cons (0 str)))))
(defun bamchon (st) (entget (car (entsel st))))
(defun bocdt (ss1 c) (entget (ssname ss1 c)))


;;; Sua nhieu text (cong tru gia tri thuc)
(defun c:3 ()
(command "undo" "mark")
(intro)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
(if (= Ostr nil)
(setq Ostr "\nNhap gia tri tang them <>...: ")
)

(while (= ss1 nil)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
)

(setq i 0
num2 (getreal Ostr)
sslen (sslength ss1)
)
(if (/= num2 nil)
(setq
numadd num2
)
)
(if (/= numadd nil)
(setq Ostr (strcat "\nNhap gia tri tang them <"
(rtos numadd 2 2)
"> : "
)
)
)

(while (<= i (1- sslen))
(setq num1 (atof (bocchu ss1 i))

)
(setq num (+ num1 numadd))
(setq ob (bocdt ss1 i))
;(if (< num 10)
; (setq st (strcat "0" (connumint num)))
(setq st (sothanhchu num))
; )

(thaychu ob st)
(princ)

(setq i (1+ i))
)
)

;;; Sua nhieu text (cong tru gia tri nguyen)
(defun c:4 ()
(intro)
(command "undo" "mark")
(setq ss1 (chonchu "\nChon text can cong them ...")
)
(if (= Ostr nil)
(setq Ostr "\nNhap gia tri tang them <>...: ")
)

(while (= ss1 nil)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
)

(setq i 0
num2 (getint Ostr)
sslen (sslength ss1)
)
(if (/= num2 nil)
(setq
numadd num2
)
)
(if (/= numadd nil)
(setq Ostr (strcat "\nNhap gia tri tang them <"
(rtos numadd 2 0)
"> : "
)
)
)

(while (<= i (1- sslen))
(setq num1 (atof (bocchu ss1 i))

)
(setq num (+ num1 numadd))
(setq ob (bocdt ss1 i))
(if (< num 10)
(setq st (strcat "0" (connumint num)))
(setq st (connumint num))
)

(thaychu ob st)
(princ)

(setq i (1+ i))
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:5 ()
(intro)
(command "undo" "mark")
(setq ss1 (chonchu "\nChon text can cong them ...")
)
(if (= Ostr nil)
(setq Ostr "\nNhap gia tri tang them <>...: ")
)

(while (= ss1 nil)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
)

(setq i 0
num2 (getreal Ostr)
sslen (sslength ss1)
)
(if (/= num2 nil)
(setq
numadd num2
)
)
(if (/= numadd nil)
(setq Ostr (strcat "\nNhap gia tri tang them <"
(rtos numadd 2 2)
"> : "
)
)
)

(while (<= i (1- sslen))
(setq num1 (atof (bocchu ss1 i))

)
(setq num (+ num1 numadd))
(setq ob (bocdt ss1 i))
(if (> num 0)
(setq st (strcat "+" (sothanhchu num)))
(setq st (sothanhchu num))
)

(thaychu ob st)
(princ)

(setq i (1+ i))
)
)



Lệnh "3": tăng giảm nhiều số dưới dạng số thực
Lệnh "4": tăng giảm các số nguyên (dạng số thứ tự)
Lện "5": tăng giảm các số nguyên có chứa dấu (dạng cao độ)
Hy vọng giúp ích cho bạn
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#4 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 27 June 2008 - 10:32 PM

Chết thật! trong lúc em post bài thì bác Hoanh đã kịp trả lời trước rồi. Lisp của mình có thể kết hợp với các biện pháp chọn lọc đối tượng text - sẽ đem lại hiệu quả nhanh hơn (Tất nhiên ko thể so sánh với bộ công cụ trên của bác Hoành :mellow:
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#5 leemindjan

leemindjan

    biết pan

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

Đã gửi 27 June 2008 - 11:24 PM

Bạn xem lisp dồn số hiệu bản vẽ ở đây: http://www.cadviet.com/cadnews/content/view/22/34/



(defun myerror (s)
(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD) ; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(princ)
)
(defun intro ()
(princ "\nCopyright by Nguyen Gia Dat (Datnggia@gmail.com - 0915169886)")
)
(defun bocchu (ss1 c)
(setq ob (entget (ssname ss1 c)))
(setq ts (assoc 1 ob))
(setq a (cdr ts))
)
(defun sothanhchu (num) (rtos num 2 2))
(defun connumint (num) (rtos num 2 0))
(defun thaychu (Ob newstr)
(setq txtstr (assoc 1 Ob))
(setq newstr (cons 1 newstr))
(entmod (subst newstr txtstr Ob))

)
(defun chonchu (dongnhac)
(prompt dongnhac)
(ssget
'((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))
)
)
(defun chon (str) (ssget '((cons (0 str)))))
(defun bamchon (st) (entget (car (entsel st))))
(defun bocdt (ss1 c) (entget (ssname ss1 c)))


;;; Sua nhieu text (cong tru gia tri thuc)
(defun c:3 ()
(command "undo" "mark")
(intro)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
(if (= Ostr nil)
(setq Ostr "\nNhap gia tri tang them <>...: ")
)

(while (= ss1 nil)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
)

(setq i 0
num2 (getreal Ostr)
sslen (sslength ss1)
)
(if (/= num2 nil)
(setq
numadd num2
)
)
(if (/= numadd nil)
(setq Ostr (strcat "\nNhap gia tri tang them <"
(rtos numadd 2 2)
"> : "
)
)
)

(while (<= i (1- sslen))
(setq num1 (atof (bocchu ss1 i))

)
(setq num (+ num1 numadd))
(setq ob (bocdt ss1 i))
;(if (< num 10)
; (setq st (strcat "0" (connumint num)))
(setq st (sothanhchu num))
; )

(thaychu ob st)
(princ)

(setq i (1+ i))
)
)

;;; Sua nhieu text (cong tru gia tri nguyen)
(defun c:4 ()
(intro)
(command "undo" "mark")
(setq ss1 (chonchu "\nChon text can cong them ...")
)
(if (= Ostr nil)
(setq Ostr "\nNhap gia tri tang them <>...: ")
)

(while (= ss1 nil)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
)

(setq i 0
num2 (getint Ostr)
sslen (sslength ss1)
)
(if (/= num2 nil)
(setq
numadd num2
)
)
(if (/= numadd nil)
(setq Ostr (strcat "\nNhap gia tri tang them <"
(rtos numadd 2 0)
"> : "
)
)
)

(while (<= i (1- sslen))
(setq num1 (atof (bocchu ss1 i))

)
(setq num (+ num1 numadd))
(setq ob (bocdt ss1 i))
(if (< num 10)
(setq st (strcat "0" (connumint num)))
(setq st (connumint num))
)

(thaychu ob st)
(princ)

(setq i (1+ i))
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:5 ()
(intro)
(command "undo" "mark")
(setq ss1 (chonchu "\nChon text can cong them ...")
)
(if (= Ostr nil)
(setq Ostr "\nNhap gia tri tang them <>...: ")
)

(while (= ss1 nil)
(setq ss1 (chonchu "\nChon text can cong them ...")
)
)

(setq i 0
num2 (getreal Ostr)
sslen (sslength ss1)
)
(if (/= num2 nil)
(setq
numadd num2
)
)
(if (/= numadd nil)
(setq Ostr (strcat "\nNhap gia tri tang them <"
(rtos numadd 2 2)
"> : "
)
)
)

(while (<= i (1- sslen))
(setq num1 (atof (bocchu ss1 i))

)
(setq num (+ num1 numadd))
(setq ob (bocdt ss1 i))
(if (> num 0)
(setq st (strcat "+" (sothanhchu num)))
(setq st (sothanhchu num))
)

(thaychu ob st)
(princ)

(setq i (1+ i))
)
)



Lệnh "3": tăng giảm nhiều số dưới dạng số thực
Lệnh "4": tăng giảm các số nguyên (dạng số thứ tự)
Lện "5": tăng giảm các số nguyên có chứa dấu (dạng cao độ)
Hy vọng giúp ích cho bạn



Chết thật! trong lúc em post bài thì bác Hoanh đã kịp trả lời trước rồi. Lisp của mình có thể kết hợp với các biện pháp chọn lọc đối tượng text - sẽ đem lại hiệu quả nhanh hơn (Tất nhiên ko thể so sánh với bộ công cụ trên của bác Hoành :mellow:



Thanks các bác nhiều lắm.Mình đã làm được rồi.
  • 0

#6 hocvecad

hocvecad

    biết vẽ arc

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

Đã gửi 28 June 2008 - 12:02 AM

List trên của Snowman mới chỉ áp dụng được cho những text chứa toàn số. List sau đây sẽ giúp bạn tăng các text bao gồm cả số và chữ .
(defun C:tgt(/ stra so so1 listso listso1 strs strs1  oldstr1 oldstr2 newstr newlist  elist oldlist oldstr kt tt tt1 tt2 dem len pt tt0 i )
(prompt "\nTang gia tri so cua text hocvecad.cadviet.com")
(setq stra (ssget ''((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))))
(if (= ostr nil)
(setq ostr "\nNhap gia tri tang them <>:")
)
(setq i (getint ostr))
(if (/= i nil)
(setq i2 i)
)
(if (/= i2 nil)
(setq ostr (strcat "\nNhap gia tri tang them <" (itoa i2) ">: "))
)
(setq sslen (sslength stra))
(setq l 0)
(while (<= l (1- sslen))
(setq ss1 (ssname stra l))
(setq str (entget ss1))
(setq elist str)
(setq oldlist (assoc 1 elist))
(setq oldstr (cdr oldlist))
(setq len (strlen oldstr))
(setq kt 0)
(setq tt1 0)
(setq oldstr (vl-string->list oldstr))
(setq oldstr (append (list 37) oldstr (list 37)))
(setq len (length oldstr))
(while (<= kt len)
(setq pt (nth kt oldstr))
(if (and (>= pt 48) (<= pt 57))
(progn
(setq tt1 kt)
(setq kt (+ len 1))
)

(setq kt (+ kt 1))
)
)
(setq tt2 tt1)
(setq tt0 tt1)
(while (<= tt0 len)
(setq pt (nth tt0 oldstr))
(if (or (< pt 48) (> pt 57))
(progn
(setq tt2 tt0 )
(setq tt0 (+ 1 len))
)
)
(setq tt0 (+ tt0 1))
)
(setq tt (+ 1 tt1))
(setq listso (nth tt1 oldstr))
(setq listso (list listso))
(if (< tt tt2)
(progn
(while (and (>= tt tt1) (<= tt tt2))
(setq listso1 (nth tt oldstr))
(setq listso (append listso (list listso1)))
(setq tt (+ tt 1))
)
)
)


(setq strs (vl-list->string listso))
(setq strs1 (atoi strs))
(setq so strs1)
(setq so1 (+ so i2))
(setq so1 (itoa so1))
(setq dem1 (- tt1 1) )
(setq dem2 tt2 )
(setq oldstr (cdr oldstr))
(Setq oldstr (reverse oldstr))
(setq oldstr (cdr oldstr))
(setq oldstr (reverse oldstr))
(setq oldstr(vl-list->string oldstr))
(setq oldstr1 (substr oldstr 1 dem1))
(setq oldstr2 (substr oldstr dem2 ))
(setq newstr (strcat oldstr1 so1 oldstr2))
(setq newlist (cons '1 newstr))
(setq elist (subst newlist oldlist elist))
(entmod elist)
(princ)
(setq l (1+ l))
)
)







  • 0

#7 tranchan

tranchan

    biết lệnh break

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

Đã gửi 28 June 2008 - 10:30 AM

Lisp này là một mớ chắp vá và ko biêt tác giả đã test chưa mà post lên cho AE vậy.

Sai ngay từ khi chọn đối tuợng

(setq stra (ssget ''((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))))


Dù sửa xong lỗi đó vẫn dính lỗi khác
  • 0

#8 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 28 June 2008 - 06:31 PM

Lisp này là một mớ chắp vá và ko biêt tác giả đã test chưa mà post lên cho AE vậy.

Sai ngay từ khi chọn đối tuợng

Trích dẫn
(setq stra (ssget ''((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))))


Dù sửa xong lỗi đó vẫn dính lỗi khác

:angry: Các bác viết thế này làm em ...tự ái quá :mellow: Đoạn mã của em dùng ..cực tốt đấy nhé! không có lỗi j đâu. Lần sau các bác phản đối ai thì nêu đích danh ra nhé, em hay có tật ...giật mình :ph34r:
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#9 hocvecad

hocvecad

    biết vẽ arc

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

Đã gửi 28 June 2008 - 10:21 PM

Lisp này là một mớ chắp vá và ko biêt tác giả đã test chưa mà post lên cho AE vậy.

Sai ngay từ khi chọn đối tuợng


Dù sửa xong lỗi đó vẫn dính lỗi khác

Chỉ sai ở mỗi lỗi đó thôi . Sau khi sửa lại chạy tôi thấy không có lỗi gì nữa . Trước khi post lên đây tôi luôn luôn phải test đi test lại nhiều lần . Lỗi trên là do tôi bất cẩn khi copy qua code box . Lisp tôi viết là dựa trên thuật toán của tôi nghĩ ra và những code mà tôi học được . . Không biết dựa vào đâu mà bạn lại nói đây là một mớ chắp vá. Vả lại nếu chắp vá mà đúng thuật toán , chương trình vẫn chạy đúng cũng tốt chứ sao .
(defun C:tgt(/ stra so so1 listso listso1 strs strs1  oldstr1 oldstr2 newstr newlist  elist oldlist oldstr kt tt tt1 tt2 dem len pt tt0 i )
(prompt "\nTang gia tri so cua text hocvecad.cadviet.com")
(setq stra (ssget '((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))))
(if (= ostr nil)
(setq ostr "\nNhap gia tri tang them <>:")
)
(setq i (getint ostr))
(if (/= i nil)
(setq i2 i)
)
(if (/= i2 nil)
(setq ostr (strcat "\nNhap gia tri tang them <" (itoa i2) ">: "))
)
(setq sslen (sslength stra))
(setq l 0)
(while (<= l (1- sslen))
(setq ss1 (ssname stra l))
(setq str (entget ss1))
(setq elist str)
(setq oldlist (assoc 1 elist))
(setq oldstr (cdr oldlist))
(setq len (strlen oldstr))
(setq kt 0)
(setq tt1 0)
(setq oldstr (vl-string->list oldstr))
(setq oldstr (append (list 37) oldstr (list 37)))
(setq len (length oldstr))
(while (<= kt len)
(setq pt (nth kt oldstr))
(if (and (>= pt 48) (<= pt 57))
(progn
(setq tt1 kt)
(setq kt (+ len 1))
)

(setq kt (+ kt 1))
)
)
(setq tt2 tt1)
(setq tt0 tt1)
(while (<= tt0 len)
(setq pt (nth tt0 oldstr))
(if (or (< pt 48) (> pt 57))
(progn
(setq tt2 tt0 )
(setq tt0 (+ 1 len))
)
)
(setq tt0 (+ tt0 1))
)
(setq tt (+ 1 tt1))
(setq listso (nth tt1 oldstr))
(setq listso (list listso))
(if (< tt tt2)
(progn
(while (and (>= tt tt1) (<= tt tt2))
(setq listso1 (nth tt oldstr))
(setq listso (append listso (list listso1)))
(setq tt (+ tt 1))
)
)
)


(setq strs (vl-list->string listso))
(setq strs1 (atoi strs))
(setq so strs1)
(setq so1 (+ so i2))
(setq so1 (itoa so1))
(setq dem1 (- tt1 1) )
(setq dem2 tt2 )
(setq oldstr (cdr oldstr))
(Setq oldstr (reverse oldstr))
(setq oldstr (cdr oldstr))
(setq oldstr (reverse oldstr))
(setq oldstr(vl-list->string oldstr))
(setq oldstr1 (substr oldstr 1 dem1))
(setq oldstr2 (substr oldstr dem2 ))
(setq newstr (strcat oldstr1 so1 oldstr2))
(setq newlist (cons '1 newstr))
(setq elist (subst newlist oldlist elist))
(entmod elist)
(princ)
(setq l (1+ l))
)
)





  • 1