Đến nội dung


Hình ảnh

Hiệu Chỉnh File Lisp


  • Please log in to reply
41 replies to this topic

#1 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 14 September 2015 - 07:59 PM

Mình có sưu tầm được 1 lsp dùng để đánh số thứ tự tăng dần trên diễn đàn cadviet nhưng không biết của tác giả nào(lâu quá rồi). Mình nhờ ai biết giúp mình sửa lsp có thêm tính năng này: 

1/ ví dụ mình có dãy số:

08200

08200

08200

08200

Mình gõ lệnh TD sau đó chọn các dãy số trên và nhập số đầu tiên là : 08200 thì dãy số sẽ tăng dần lên(có thêm số 0 ở đầu)

08201

08202

08203

08204

2/ ví dụ mình có dãy số:

08E00

08E00

08E00

08E00

Mình gõ lệnh TD sau đó chọn các dãy số trên và nhập số đầu tiên là : 08E00 thì dãy số sẽ tăng dần lên(có thêm số 0 ở đầu)

08E01

08E02

08E03

08E04

Đây là file lsp cũ, mong mọi người giúp đỡ.

http://www.cadviet.c...5/145520_td.lsp


  • -2

#2 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 15 September 2015 - 08:02 PM

Ai biết giúp mình với. Thanks! 


  • -1

#3 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 16 September 2015 - 06:55 PM

Không ai giúp mình hết vậy? 


  • -1

#4 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 17 September 2015 - 08:14 AM

Mình có sưu tầm được 1 lsp dùng để đánh số thứ tự tăng dần trên diễn đàn cadviet nhưng không biết của tác giả nào(lâu quá rồi). Mình nhờ ai biết giúp mình sửa lsp có thêm tính năng này: 

1/ ví dụ mình có dãy số:

08200

08200

08200

08200

Mình gõ lệnh TD sau đó chọn các dãy số trên và nhập số đầu tiên là : 08200 thì dãy số sẽ tăng dần lên(có thêm số 0 ở đầu)

08201

08202

08203

08204

2/ ví dụ mình có dãy số:

08E00

08E00

08E00

08E00

Mình gõ lệnh TD sau đó chọn các dãy số trên và nhập số đầu tiên là : 08E00 thì dãy số sẽ tăng dần lên(có thêm số 0 ở đầu)

08E01

08E02

08E03

08E04

Đây là file lsp cũ, mong mọi người giúp đỡ.

http://www.cadviet.c...5/145520_td.lsp

Dùng Lisp làm gì cho mất công đi xin xỏ?

Cứ lệnh TCOUNT có sẳn của CAD mà dùng.

tham khảo bài viết : Đánh số thứ tự bằng lệnh Tcount


  • 1

#5 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 17 September 2015 - 06:58 PM

Dùng Lisp làm gì cho mất công đi xin xỏ?

Cứ lệnh TCOUNT có sẳn của CAD mà dùng.

tham khảo bài viết : Đánh số thứ tự bằng lệnh Tcount

Thật là xin xỏ mà không ai chịu giúp hết, thanks bạn gia bach nhưng tham khảo bài viết của bạn không giải quyết được mong muốn của mình(không thêm được số 0 ở vị trí ở đầu và có chữ lẫn số). 


  • -1

#6 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 17 September 2015 - 11:58 PM

Thấy bạn "kêu gào" thảm thiết quá!!! :D.
Thử cái này xem:
(defun c:td (/ tdt csht sdt index tt entdt chuoi)
(defun thay (tt key moi / cu) (setq cu (assoc key tt)) (subst (cons key moi) cu tt))
(princ "\nCADViet.com (c) 2007")
(setq tdt (ssget '((0 . "TEXT")))
sdt (sslength tdt)
csht 1
index 0)
(setq chuoi (getstring "\nNhap chuoi: "))
(repeat sdt
(setq entdt (ssname tdt index)
index (1+ index)
tt (entget entdt))
(if (eq (cdr (assoc 1 tt)) chuoi)
(progn (setq tt (thay tt 1 (strcat (substr chuoi 1 (- (strlen chuoi) 1)) (itoa csht)))
csht (1+ csht))
(entmod tt)
(entupd entdt))))
(princ))

  • 1

#7 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 18 September 2015 - 06:27 AM

Thấy bạn "kêu gào" thảm thiết quá!!! :D.
Thử cái này xem:

(defun c:td (/ tdt csht sdt index tt entdt chuoi)
(defun thay (tt key moi / cu) (setq cu (assoc key tt)) (subst (cons key moi) cu tt))
(princ "\nCADViet.com (c) 2007")
(setq tdt (ssget '((0 . "TEXT")))
sdt (sslength tdt)
csht 1
index 0)
(setq chuoi (getstring "\nNhap chuoi: "))
(repeat sdt
(setq entdt (ssname tdt index)
index (1+ index)
tt (entget entdt))
(if (eq (cdr (assoc 1 tt)) chuoi)
(progn (setq tt (thay tt 1 (strcat (substr chuoi 1 (- (strlen chuoi) 1)) (itoa csht)))
csht (1+ csht))
(entmod tt)
(entupd entdt))))
(princ))

Thanks bạn nhưng lsp không chạy được bạn ơi!(lsp yêu cầu nhập chuỗi nhưng không chạy được)


  • 0

#8 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 18 September 2015 - 10:14 AM

Sao lại không chạy được???

Theo yêu cầu của bạn:

1/ ví dụ mình có dãy số:

08200

08200

08200

08200

2/ ví dụ mình có dãy số:

08E00

08E00

08E00

08E00

​Có nghĩa trên bản vẽ của bạn đã có sẵn các text như trên (theo mình hiểu như vậy). => Khi nhập chuỗi bạn phải nhập đúng chuỗi mà đã chọn ở bước 1. Các Text có nội dung trùng với nội dung chuỗi bạn nhập mới được thay đổi.

*** Không biết text có sẵn trên bản vẽ của bạn như nào???


  • 1

#9 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 18 September 2015 - 06:21 PM

Sao lại không chạy được???

Theo yêu cầu của bạn:

1/ ví dụ mình có dãy số:

08200

08200

08200

08200

2/ ví dụ mình có dãy số:

08E00

08E00

08E00

08E00

​Có nghĩa trên bản vẽ của bạn đã có sẵn các text như trên (theo mình hiểu như vậy). => Khi nhập chuỗi bạn phải nhập đúng chuỗi mà đã chọn ở bước 1. Các Text có nội dung trùng với nội dung chuỗi bạn nhập mới được thay đổi.

*** Không biết text có sẵn trên bản vẽ của bạn như nào???

Không được là do: mình có text có nội dung bất kì thì nó không chạy được

1/ ví dụ mình có dãy số:

08200

08300

08222

123

... chẳng hạn 

Bây giờ mình muốn nó về

08200

08201

08202

08203

Hoặc muốn nó về

08E00

08E00

08E00

08E00


  • 0

#10 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 18 September 2015 - 09:08 PM

Không được là do: mình có text có nội dung bất kì thì nó không chạy được
1/ ví dụ mình có dãy số:
08200
08300
08222
123
... chẳng hạn 
Bây giờ mình muốn nó về
08200
08201
08202
08203
Hoặc muốn nó về
08E00
08E00
08E00
08E00

 
Bạn xem lại yêu cầu của bạn ở bài đầu !
Đây là lý do tại sao phần dưới của bạn đỏ lừ, bạn yêu cầu không rõ ràng.
Nếu là text bất kỳ thì Lisp phải viết khác.
Lisp này cắt bỏ ký tự cuối cùng (của chuỗi nhập vào) và thêm 1, 2, 3 ....
(defun c:td (/ tdt csht sdt index tt entdt txt)
(defun thay (tt key moi / cu) (setq cu (assoc key tt)) (subst (cons key moi) cu tt))
(princ "\nCADViet.com (c) 2007")
(if (setq tdt (ssget '((0 . "*TEXT"))))
(progn (setq txt (getstring "\nNhap chuoi: ")
sdt (sslength tdt)
csht 1
index 0)
(repeat sdt
(setq entdt (ssname tdt index)
index (1+ index)
tt (entget entdt))
(setq tt (thay tt 1 (strcat (substr txt 1 (- (strlen txt) 1)) (itoa csht)))
csht (1+ csht))
(entmod tt)
(entupd entdt))))
(princ))

  • 1

#11 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 18 September 2015 - 09:28 PM

 
Bạn xem lại yêu cầu của bạn ở bài đầu !
Đây là lý do tại sao phần dưới của bạn đỏ lừ, bạn yêu cầu không rõ ràng.
Nếu là text bất kỳ thì Lisp phải viết khác.
Lisp này cắt bỏ ký tự cuối cùng (của chuỗi nhập vào) và thêm 1, 2, 3 ....

(defun c:td (/ tdt csht sdt index tt entdt txt)
(defun thay (tt key moi / cu) (setq cu (assoc key tt)) (subst (cons key moi) cu tt))
(princ "\nCADViet.com (c) 2007")
(if (setq tdt (ssget '((0 . "*TEXT"))))
(progn (setq txt (getstring "\nNhap chuoi: ")
sdt (sslength tdt)
csht 1
index 0)
(repeat sdt
(setq entdt (ssname tdt index)
index (1+ index)
tt (entget entdt))
(setq tt (thay tt 1 (strcat (substr txt 1 (- (strlen txt) 1)) (itoa csht)))
csht (1+ csht))
(entmod tt)
(entupd entdt))))
(princ))

Ok bạn quocmanh04tt! Chắc là do mình viết thiếu từ "bất kì" nên bạn đã hiểu nhầm. Lsp này thì ok rồi, đúng với ý của mình rồi. Thanks bạn 1 lần nữa. 


  • 0

#12 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 18 September 2015 - 09:44 PM

Bạn Kieu Tan nhớ bấm like (mũi tên màu xanh) cho mấy người đã giúp bạn nhé!


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


#13 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 18 September 2015 - 10:21 PM

Bạn Kieu Tan nhớ bấm like (mũi tên màu xanh) cho mấy người đã giúp bạn nhé!

Ok bạn, do sơ xuất nên mình đã quên, mình vừa làm xong. Hehe


  • 0

#14 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 19 September 2015 - 01:26 PM

 
Bạn xem lại yêu cầu của bạn ở bài đầu !
Đây là lý do tại sao phần dưới của bạn đỏ lừ, bạn yêu cầu không rõ ràng.
Nếu là text bất kỳ thì Lisp phải viết khác.
Lisp này cắt bỏ ký tự cuối cùng (của chuỗi nhập vào) và thêm 1, 2, 3 ....

(defun c:td (/ tdt csht sdt index tt entdt txt)
(defun thay (tt key moi / cu) (setq cu (assoc key tt)) (subst (cons key moi) cu tt))
(princ "\nCADViet.com (c) 2007")
(if (setq tdt (ssget '((0 . "*TEXT"))))
(progn (setq txt (getstring "\nNhap chuoi: ")
sdt (sslength tdt)
csht 1
index 0)
(repeat sdt
(setq entdt (ssname tdt index)
index (1+ index)
tt (entget entdt))
(setq tt (thay tt 1 (strcat (substr txt 1 (- (strlen txt) 1)) (itoa csht)))
csht (1+ csht))
(entmod tt)
(entupd entdt))))
(princ))

Hôm nay mình đã áp dụng file td.lsp vào công việc mà bạn quocmanh04tt đã viết hỗ trợ mình, tuy nhiên nó xuất hiện 1 lỗ hổng:

1/ Lsp chỉ chạy được theo chiều tăng dần từ dưới lên mà thôi(ta quét chuột hàng loạt các text)->không chạy được các  text theo chiều từ trên xuống(có lúc do nhu cầu công việc mà  text có thể tăng dần từ dưới lên hoặc từ trên xuống)

2/ Nếu ta chọn lần lượt từng  text một thì  text được chọn đầu tiên sẽ mang giá trị nhỏ(giá trị đầu tiên) và sẽ tăng dần lên->ok, nhưng rất tốn thời gian(vd: chọn 10  text thì tốn 10 bước thời gian)

3/ Mình nhờ bạn sửa lại lsp này hộ mình với:

Nếu ta quét chuột hàng loạt các text từ trên xuống thì text tăng dần theo chiều từ trên xuống.

Nếu ta quét chuột hàng loạt các text từ dưới lên thì text tăng dần theo chiều từ dưới lên.

Mình thanks bạn trước nha! 


  • -2

#15 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 19 September 2015 - 08:50 PM

@Kieu Tan: lisp viết không có lỗ hỗng, chỉ là do yêu cầu không ro ràng cụ thể

còn đây là lisp cho Bạn, Bạn phải khai báo hướng sắp xếp cho lisp

(defun c:td (/ kw ss str n)
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len [T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi: "))
      (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
      (setq n 1)
      (foreach e  (mapcar 'vlax-ename->vla-object ss)
	(vla-put-textstring e (strcat (substr str 1 (- (strlen str) 1)) (itoa n)))
	(setq n (1+ n))
	)
    )
  )
  (princ)
  )

  • 1

#16 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 20 September 2015 - 08:08 PM

 

@Kieu Tan: lisp viết không có lỗ hỗng, chỉ là do yêu cầu không ro ràng cụ thể

còn đây là lisp cho Bạn, Bạn phải khai báo hướng sắp xếp cho lisp

(defun c:td (/ kw ss str n)
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len [T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi: "))
      (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
      (setq n 1)
      (foreach e  (mapcar 'vlax-ename->vla-object ss)
	(vla-put-textstring e (strcat (substr str 1 (- (strlen str) 1)) (itoa n)))
	(setq n (1+ n))
	)
    )
  )
  (princ)
  )

Thanks bạn! 

Nhưng sao lsp không chạy được số 0 ở cuối chuỗi.

1/ ví dụ mình có dãy số:
08200
08300
08222
123
... chẳng hạn 
Bây giờ mình muốn nó về
08200
08201
08202
08203
Hoặc muốn nó về
08E00
08E01
08E02
08E03

Lsp chỉ bắt đầu từ 08201->08203 mà thôi(khi đầu tiên mình vẫn nhập chuỗi 08200)

Mình nhờ bạn hỗ trợ dùm sao cho lsp chạy được với số mình nhập đúng với số đầu tiên khi mình nhập 1 số bất kì rồi tăng dần.

vd: khi mình nhập 08200 chẳng hạn thì lsp phải bắt đầu là 08200->08203(chứ không phải là 08201->08203)


  • -1

#17 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 20 September 2015 - 08:40 PM

Bạn thử thay (setq n 1)  thành (setq n 0)  xem sao!


  • 1

#18 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 21 September 2015 - 09:34 AM

Thanks ban quocmanh04tt nhiều mình lam được rồi. 

Với Lisp này cộng thêm yêu cầu rất củ chuối của bạn thì chắc còn sửa dài hơi :D .

Khi (setq n 0) thì bạn nhập chuỗi và chỉ được phép quét 10 Text có sẵn thôi. Bởi vì Lisp chỉ

thay đổi kí tự cuối cùng của chuỗi nhập và lúc nào cũng cho kết quả Text sắp xếp đầu tiên có kí tự cuối cùng là 0.

Lúc đó bạn lại la toán lên sao em nhập 08201 mà lúc nào cũng ra KQ là 08200 trong khi mong muốn là nó tăng bắt đầu từ 1 !?

Vậy là bạn lại yêu cầu sửa tiếp sao :wacko: :lol:. Quả là củ chuối đó nha :D !!!


  • 2

#19 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 21 September 2015 - 04:43 PM

Kieu Tan: Mình có ý sau, tuy hơi nhiều bước nhưng xử lý được yêu cầu của a:

- A dùng lệnh TCOUNT có sẵn trong bộ Express của CAD, chọn Overwrite, sẽ được số thứ tự tăng hoặc giảm dần theo chiều X hoặc Y.

- Dùng lisp TT_Them text mình đính kèm (Của bác nào trên diễn đàn mình không nhớ ^^), chèn chuỗi phía trước theo ý muốn là OK.

Thân!

http://www.cadviet.c...t_them_text.lsp


  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#20 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 21 September 2015 - 06:38 PM

 

@Kieu Tan: lisp viết không có lỗ hỗng, chỉ là do yêu cầu không ro ràng cụ thể

còn đây là lisp cho Bạn, Bạn phải khai báo hướng sắp xếp cho lisp

(defun c:td (/ kw ss str n)
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len [T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi: "))
      (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
      (setq n 1)
      (foreach e  (mapcar 'vlax-ename->vla-object ss)
	(vla-put-textstring e (strcat (substr str 1 (- (strlen str) 1)) (itoa n)))
	(setq n (1+ n))
	)
    )
  )
  (princ)
  )

Bạn pphung193 dự đoán như thần, quả là khi áp dụng td.lsp nhiều mới phát hiện ra, lsp có 1 số bất cập rồi.

vd: mình có dãy số

08200

32153

12345

1/ Bây giờ mình muốn nó tăng dần từ S08->S10(text đầu nhập vào là S08) nhưng lsp chỉ chạy từ S01->S03(không chạy được với text bắt đầu là S08)-> bất cập 1(mình muốn nó tăng dần đúng với text đầu tiên mình nhập vào và tăng lên 1 đơn vị)

2/ Khi chạy từ S09 thì phải chuyển sang S10(S08->S10), nhưng lsp lại chuyển từ S09 sang S010(S08->S010-> bất cập 2(mình muốn nó phải chuyển từ S08->S10). 

Mong bạn quocmanh04tt, tien2005, pphung193 và mọi người ai biết giúp mình với. Thanks! 


  • -2