Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#801 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 26 February 2010 - 09:34 AM

Chào các thành viên của Diễn đàn Cadviet! Hôm nay em post bài trong topic "Viết lisp theo yêu cầu" với lời đề nghị các thành viên của Diễn đàn viết giùm một lisp như sau:
Bản vẽ của em có rất nhiều khu đất có hình dạng khác nhau tam giác, tứ giác, ngũ giác... hay hình dạng bất kỳ. Nhiệm vụ của em là chia phân giác tại góc cho các khu đất rồi nối chúng lại với nhau (như mô tả trong hình vẽ).
Em có thể dùng lệnh xline, lựa chọn bisect để thực hiện công việc này, nhưng như vậy thì hơi lâu. Nhờ các anh chị giúp đỡ em.
File mô tả:
http://www.cadviet.c.../2/qhsd_dat.dwg
  • 0
http://khuyen.space

#802 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 26 February 2010 - 09:51 AM

Help me!!!
Mình có một vấn đề về lisp mong các bạn trên diễn đàn giúp đỡ, các bạn viết giùm mình một lisp chọn đối tượng mới được tạo ra sau lệnh copy và paste.
Mình mô tả yêu cầu này như trong bản vẽ đính kèm.

http://www.cadviet.c...drawing1_22.dwg

Bạn dùng lệnh SL :
(defun C:SL ()
(sssetfirst nil (ssadd (entlast) (ssadd)))
)

  • 1

#803 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 26 February 2010 - 11:03 AM

Nhờ các bạn viết dùm mình lisp scale diện tích hình với!
Ví Dụ: Mình có 1 pline kín với diện tích là 2
Load lisp lên sẽ hỏi select object
Tâm scale là tâm CENTROID của hình đó
Sau đó nhập tỷ lệ scale:
Ví dụ em nhập 2 nó sẽ scale hình đó lên với diện tích là 4
Xin chân thành cảm ơn các bạn!
  • 0

#804 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 26 February 2010 - 11:20 AM

Nhờ các bạn viết dùm mình lisp scale diện tích hình với!
Ví Dụ: Mình có 1 pline kín với diện tích là 2
Load lisp lên sẽ hỏi select object
Tâm scale là tâm CENTROID của hình đó
Sau đó nhập tỷ lệ scale:
Ví dụ em nhập 2 nó sẽ scale hình đó lên với diện tích là 4
Xin chân thành cảm ơn các bạn!

Lisp này Tue_NV đã từng viết cho truongthanh rồi. Chỉ cần sửa lại 1 chút là được.
Thử nhé :

(defun c:scd(/ doc MS ss tle i ss obj region_obj centpoint)
(vl-load-com)
(setq doc (vla-get-activeDocument (vlax-get-acad-object))
MS (vla-get-ModelSpace doc))
(if (setq ss (ssget '((0 . "*POLYLINE") (70 . 1))))
(progn
(or *tle* (setq *tle* 1.0))
(setq tle (getreal (strcat "\n Nhap he so ti le < " (rtos *tle* 2 2) " > : "))i 0)
(if (not tle) (setq tle *tle*) (setq *tle* tle))
(while (< i (sslength ss))
(setq regionobj (car(vlax-invoke MS 'addregion
(list (setq obj (vlax-ename->vla-object(ssname ss i))) )
)
)
)
(setq centPoint (vlax-get regionobj 'Centroid))
(vla-erase regionobj)
(vla-ScaleEntity obj (vlax-3d-point centPoint) (sqrt tle))
(setq i (1+ i))
);while
)
(alert "\khong co doi tuong nao duoc chon")
)
(princ)
)


@svba : Dữ liệu input mình định nhập theo cách nào?
Nhìn vào file .dwg mà svba đã upload có thể hiểu được ý định của em. Nhưng nhìn hình thứ 3 bên phải thì mấy cái hình phức tạp được vẽ như thế nào?
Svba có thể nói rõ hơn về cái dữ liệu Input được không?
  • 2

#805 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 26 February 2010 - 11:29 AM

cảm ơn TUE_NV rất nhiều!đúng là trước đây TUE_NV có viết cho mình 1 LISP tương tự như vậy!nhưng nó Scale Chu Vi chứ ko phải Diện tích!
Thanks bạn rất nhiều!
  • 0

#806 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 26 February 2010 - 11:38 AM

cảm ơn TUE_NV rất nhiều!đúng là trước đây TUE_NV có viết cho mình 1 LISP tương tự như vậy!nhưng nó Scale Chu Vi chứ ko phải Diện tích!
Thanks bạn rất nhiều!

Mình lại cứ nghĩ là lệnh Scale bản thân nó đã là scale theo diện tích rồi cơ. Hoá ra không phải :cheers:
  • 0

#807 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 26 February 2010 - 11:47 AM

Mình lại cứ nghĩ là lệnh Scale bản thân nó đã là scale theo diện tích rồi cơ. Hoá ra không phải :cheers:

trc giờ mình cũng tưởng vậy!ai dè là chu vi! :cheers:
  • 0

#808 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 26 February 2010 - 11:54 AM

trc giờ mình cũng tưởng vậy!ai dè là chu vi! :cheers:

Lệnh Scale thì scale theo chiều dài. Ví dụ vẽ 1 đoạn thẳng -> Scale nó lên theo tỉ lệ K thì chiều dài mới của nó bằng chiều dài cũ nhân với hệ số K

Thứ nguyên của chu vi là : [chiều dài] còn thứ nguyên của diện tích là [chiều dài bình phương]

Nên để diện tích tăng hay giảm với hệ số tỉ lệ k thì khi dùng lệnh scale thì hệ số tỉ lệ phải là căn bậc hai của k
  • 1

#809 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 26 February 2010 - 09:16 PM

@svba : Dữ liệu input mình định nhập theo cách nào?
Nhìn vào file .dwg mà svba đã upload có thể hiểu được ý định của em. Nhưng nhìn hình thứ 3 bên phải thì mấy cái hình phức tạp được vẽ như thế nào?
Svba có thể nói rõ hơn về cái dữ liệu Input được không?


Cảm ơn anh Tue_NV!
Dữ liệu input của em chỉ đơn giản là một đa giác (vẽ bằng polyline), có vát góc.

Em muốn nhờ anh phát triển thêm lisp đánh số thứ tự mà lần trước anh viết giúp em! Em muốn thêm chức năng thêm cả ký tự bằng chữ, ví dụ em muốn đánh số N1, N2, N3... Em muốn có một lisp như sau:
+ chọn ký tự cần thêm. Ví dụ: N.
+ Chọn số bắt đầu. Ví dụ: 1.
+ Chọn số gia. Ví dụ: 1
+ Chọn text cần thay đổi.
+ Enter để kết thúc lệnh.
Em xin up lại file lisp lần trước, nhờ anh giúp. Em cảm ơn anh!
http://www.cadviet.c...es/2/dstt_1.lsp
  • 0
http://khuyen.space

#810 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 26 February 2010 - 09:53 PM

Cảm ơn anh Tue_NV!
Dữ liệu input của em chỉ đơn giản là một đa giác (vẽ bằng polyline), có vát góc.

Em muốn nhờ anh phát triển thêm lisp đánh số thứ tự mà lần trước anh viết giúp em! Em muốn thêm chức năng thêm cả ký tự bằng chữ, ví dụ em muốn đánh số N1, N2, N3... Em muốn có một lisp như sau:
+ chọn ký tự cần thêm. Ví dụ: N.
+ Chọn số bắt đầu. Ví dụ: 1.
+ Chọn số gia. Ví dụ: 1
+ Chọn text cần thay đổi.
+ Enter để kết thúc lệnh.
Em xin up lại file lisp lần trước, nhờ anh giúp. Em cảm ơn anh!
http://www.cadviet.c...es/2/dstt_1.lsp

Chào svba1608
Anh thấy Polyline đó bo góc chứ không phải vát góc. Hai khái niệm vát gócbo góc đó khác nhau.

Lisp sửa lại cho em đây :
Command: dstt
Chon ky tu can them phia truoc : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Chon ky tu can them phia sau : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Nhap so bat dau < 2.00 > : 1
gia so < + / - > : < 1.00 > : 2

So chu so thap phan : 2

Chon so can thay doi :
Chon so can thay doi :

(defun c:dstt(/ so oldim delta dt ent str ssau)
;copyright by Tue_NV
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0)
(setq str (getstring "\n Chon ky tu can them phia truoc : "))
(setq ssau (getstring "\n Chon ky tu can them phia sau : "))
(if (not *so*) (setq *so* 1))
(setq so (getreal (strcat "\n Nhap so bat dau < "
(rtos *so* 2 2) " > : ")
))
(if (not so) (setq so *so*) (setq *so* so))
;
(if (not *delta*) (setq *delta* 1))
(setq delta (getreal (strcat "\gia so < + / - > : < "
(rtos *delta* 2 2) " > : ")
))
(if (not delta) (setq delta *delta*) (setq *delta* delta))
;;
(initget 5)
(setq tp (getint "\n So chu so thap phan : "))

(while (setq dt (entsel "\n Chon so can thay doi : "))
(setq ent (entget(car dt)))
(setq ent (entmod (subst (cons 1 (strcat str (rtos so 2 tp) ssau))
(assoc 1 ent) ent)))
(setq so (+ so delta))
)
(setvar "Dimzin" oldim)
(princ)
)

  • 2

#811 thonghoang1

thonghoang1

    biết vẽ polygon

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

Đã gửi 26 February 2010 - 10:24 PM

mình nhờ các bạn trên diển đàn viết dùm mình với mục đích sau:mình muốn tổng hợp khối lượng thép cho một bảng tính do mình lập trong acad: cột thứ nhất là đường kín, cột thứ 2 la chiều dài 1 thanh thep(cm), cột thứ 3 là số thanh.bảng mình lập có rất nhiều loại thép.khi mình thực hiện lệnh(lệnh thứ nhất là chùm tất cả 3 cột kia và cho ra kết quả cột 4 là chiều dài tổng,cột 5 là kl thép)(lệnh thứ 2 là liên kết cùng với lệnh 1 để tạo ra thêm một bảng tổng hợp khối lượng cho từng loại đường kính)hết.mong mọi người giúp
  • 0

#812 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 27 February 2010 - 08:37 AM

Chào svba1608
Anh thấy Polyline đó bo góc chứ không phải vát góc. Hai khái niệm vát gócbo góc đó khác nhau.

Lisp sửa lại cho em đây :
Command: dstt
Chon ky tu can them phia truoc : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Chon ky tu can them phia sau : -> Nếu có nhập thì nhập vào, nếu không nhập thì enter

Nhap so bat dau < 2.00 > : 1
gia so < + / - > : < 1.00 > : 2

So chu so thap phan : 2

Chon so can thay doi :
Chon so can thay doi :


Cảm ơn anh Tuệ rất nhiều! Lisp dstt này quả thật đã như ý muốn của em và đã giúp em rất nhiều. Nhưng anh có thể giúp em thêm chức năng "nhớ" trong lisp được không. Như lần trước anh Thaistreetz đã làm em thấy rất hay, để đỡ phải mất công nhập nhiều lần những ký tự giống nhau.
Ví dụ: dstt (enter)
Chon ky tu can them phia truoc: A (enter)
Chon ky tu can them phia sau: (enter)
Nhap so bat dau: 1
Gia so: 1
So chu so thap phan: 0
Chon so can thay doi.....

Sau khi chọn xong các số cần thay đổi, em enter để kết thúc lệnh. Rồi lại enter để gọi lại lệnh một lần nữa, lần này các dữ liệu input cũng giống lần trước, ví dụ: ký tự cần thêm phía sau không có, số bắt đầu vẫn là 1, gia số vẫn là 1, số chữ số thập phân vẫn là 0, chỉ có ký tự cần thêm phía trước thay đổi thành B. Vậy anh có thể giúp em làm cho lisp có chức năng "nhớ" những giá trị đã nhập lần trước cho lần sau. Như vậy em chỉ cần đổi A thành B, còn lại cứ enter đến hết là được.
Nhờ anh thêm cho lisp giá trị mặc định ban đầu, ví dụ như giá trị mặc định của:
Ký tự cần thêm phía trước là A
Ký tự cần thêm phía sau là không có gì
Số bắt đầu là 1
Gia số là 1
Số chữ số thập phân là 0

Về đề nghị của em về lisp vẽ phân giác, như em và anh hôm qua trao đổi trên Yahoo, em nhờ anh hoàn thiện lisp đó, nhưng vì đằng nào em cũng phải tự trim đường phân giác, nên có lẽ anh không cần viết lisp cho một đa giác mà chỉ cần viết lisp cho một góc là đủ.
Em xin chân thành cảm ơn anh!
  • 0
http://khuyen.space

#813 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 27 February 2010 - 09:42 AM

Cảm ơn anh Tuệ rất nhiều! Lisp dstt này quả thật đã như ý muốn của em và đã giúp em rất nhiều. Nhưng anh có thể giúp em thêm chức năng "nhớ" trong lisp được không. Như lần trước anh Thaistreetz đã làm em thấy rất hay, để đỡ phải mất công nhập nhiều lần những ký tự giống nhau.
Ví dụ: dstt (enter)
Chon ky tu can them phia truoc: A (enter)
Chon ky tu can them phia sau: (enter)
Nhap so bat dau: 1
Gia so: 1
So chu so thap phan: 0
Chon so can thay doi.....

Sau khi chọn xong các số cần thay đổi, em enter để kết thúc lệnh. Rồi lại enter để gọi lại lệnh một lần nữa, lần này các dữ liệu input cũng giống lần trước, ví dụ: ký tự cần thêm phía sau không có, số bắt đầu vẫn là 1, gia số vẫn là 1, số chữ số thập phân vẫn là 0, chỉ có ký tự cần thêm phía trước thay đổi thành B. Vậy anh có thể giúp em làm cho lisp có chức năng "nhớ" những giá trị đã nhập lần trước cho lần sau. Như vậy em chỉ cần đổi A thành B, còn lại cứ enter đến hết là được.
Nhờ anh thêm cho lisp giá trị mặc định ban đầu, ví dụ như giá trị mặc định của:
Ký tự cần thêm phía trước là A
Ký tự cần thêm phía sau là không có gì
Số bắt đầu là 1
Gia số là 1
Số chữ số thập phân là 0
....

Số bắt đầu và Gia số đã được "nhớ" trong Lisp. Chỉ còn có ký tự cần thêm phía trước và số thập phân là chưa "nhớ" thôi
Gửi svba code đã chỉnh lại :

(defun c:dstt(/ so oldim delta dt ent str ssau tp)
;copyright by Tue_NV
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0)
(if (not *str*) (setq *str* "A"))
(setq str (getstring (strcat "\n Chon ky tu can them phia truoc < "
*str* " > : ") ))
(if (not str) (setq str *str*) (setq *str* str))
;
(setq ssau (getstring "\n Chon ky tu can them phia sau : "))
(if (not *so*) (setq *so* 1))
(setq so (getreal (strcat "\n Nhap so bat dau < "
(rtos *so* 2 2) " > : ")
))
(if (not so) (setq so *so*) (setq *so* so))
;
(if (not *delta*) (setq *delta* 1))
(setq delta (getreal (strcat "\gia so < + / - > : < "
(rtos *delta* 2 2) " > : ")
))
(if (not delta) (setq delta *delta*) (setq *delta* delta))
;;
(if (not *tp*) (setq *tp* 0))
(setq tp (getint (strcat "\n So chu so thap phan < "
(itoa *tp*) " > : ")
))
(if (not tp) (setq tp *tp*) (setq *tp* tp))

(while (setq dt (entsel "\n Chon so can thay doi : "))
(setq ent (entget(car dt)))
(setq ent (entmod (subst (cons 1 (strcat str (rtos so 2 tp) ssau))
(assoc 1 ent) ent)))
(setq so (+ so delta))
)
(setvar "Dimzin" oldim)
(princ)
)


Về đề nghị của em về lisp vẽ phân giác, như em và anh hôm qua trao đổi trên Yahoo, em nhờ anh hoàn thiện lisp đó, nhưng vì đằng nào em cũng phải tự trim đường phân giác, nên có lẽ anh không cần viết lisp cho một đa giác mà chỉ cần viết lisp cho một góc là đủ.
Em xin chân thành cảm ơn anh!

Không phải vì lý do này mà vì bài toán của em không theo quy luật nào cả. Lúc thì tam giác, lúc thì tứ giác, ngũ giác, .....
Ngay trong khi ta nghĩ Pline đó là tứ giác thì số phân đoạn (segments) trong các Pline tứ giác này cũng khác nhau
  • 1

#814 HoangVuTuan

HoangVuTuan

    biết zoom

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

Đã gửi 27 February 2010 - 02:32 PM

Mình có 1 file bản vẽ trong đó có các cọc mốc có đánh các kí hiệu T1,T2...Tn và P1,P2...Pn
Mình muốn nhờ mọi người viết hộ mình lisp cộng đều hoặc trừ đều các giá trị số ví dụ T1,T2 thành T101,T102...
Chân thành cảm ơn !
  • 0

#815 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 28 February 2010 - 12:30 AM

Mình có 1 file bản vẽ trong đó có các cọc mốc có đánh các kí hiệu T1,T2...Tn và P1,P2...Pn
Mình muốn nhờ mọi người viết hộ mình lisp cộng đều hoặc trừ đều các giá trị số ví dụ T1,T2 thành T101,T102...
Chân thành cảm ơn !


Bạn dùng lisp CONG dưới đây:

(defun C:cong()
(setq ss (ssget '((0 . "TEXT")(1 . "@#*")))
sochenh (getint "\nHay vao so chenh: ")
)
(while (setq ent (ssname ss 0))
(setq
tt (entget ent)
gt (cdr (assoc 1 tt))
gt (strcat (substr gt 1 1) (itoa (+ sochenh (atoi (substr gt 2)))))
)
(entmod (subst (cons 1 gt) (assoc 1 tt) tt))
(setq ss (ssdel ent ss))
)
(princ)
)

  • 1

#816 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 28 February 2010 - 04:28 PM

Bạn dùng lisp CONG dưới đây:

(defun C:cong()
(setq ss (ssget '((0 . "TEXT")(1 . "@#*")))
sochenh (getint "\nHay vao so chenh: ")
)
(while (setq ent (ssname ss 0))
(setq
tt (entget ent)
gt (cdr (assoc 1 tt))
gt (strcat (substr gt 1 1) (itoa (+ sochenh (atoi (substr gt 2)))))
)
(entmod (subst (cons 1 gt) (assoc 1 tt) tt))
(setq ss (ssdel ent ss))
)
(princ)
)

Xin bác Hoành cho Tue_NV hỏi chuỗi "@#*" trong đoạn code này :
(setq ss (ssget '((0 . "TEXT")(1 . "@#*")))
có nghĩa là gì?
Cảm ơn bác.
  • 0

#817 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 28 February 2010 - 05:06 PM

Xin bác Hoành cho Tue_NV hỏi chuỗi "@#*" trong đoạn code này :
(setq ss (ssget '((0 . "TEXT")(1 . "@#*")))
có nghĩa là gì?
Cảm ơn bác.

để chỉ chọn các text có dạng chữ cái đầu tiên, tiếp đó là đến số. Ví dụ: T1,T2... P1,P2...

Chữ @ đầu tiên là để chọn các text có khởi đầu là chữ cái alphabet, chữ # tiếp theo là chọn các text có ký tự thứ 2 là số digit, dấu * cuối báo cho lisp biết là không chỉ chọn các chuối có 2 ký tự mà có thể có nhiều ký tự hơn. Với cách filter trên thì lệnh ssget sẽ bỏ qua các text thông thường đi để tập trung chọn các text có dạng đang xét (theo đầu bài của bạn HoangVuTuan).

Để biết rõ chi tiết hơn, Tue_NV mở help của autolisp ra, xem phần wcmatch hoăc wild-card pattern.
  • 3

#818 xuanvi80

xuanvi80

    biết pan

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

Đã gửi 02 March 2010 - 10:16 PM

Cám ơn bạn Nataca rất nhiều!
  • 0

#819 HoangVuTuan

HoangVuTuan

    biết zoom

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

Đã gửi 03 March 2010 - 12:29 PM

để chỉ chọn các text có dạng chữ cái đầu tiên, tiếp đó là đến số. Ví dụ: T1,T2... P1,P2...

Chữ @ đầu tiên là để chọn các text có khởi đầu là chữ cái alphabet, chữ # tiếp theo là chọn các text có ký tự thứ 2 là số digit, dấu * cuối báo cho lisp biết là không chỉ chọn các chuối có 2 ký tự mà có thể có nhiều ký tự hơn. Với cách filter trên thì lệnh ssget sẽ bỏ qua các text thông thường đi để tập trung chọn các text có dạng đang xét (theo đầu bài của bạn HoangVuTuan).

Để biết rõ chi tiết hơn, Tue_NV mở help của autolisp ra, xem phần wcmatch hoăc wild-card pattern.

Cảm ơn bác Hoành nhiều ! Em lại phải nhờ thêm bác sửa giùm em lisp trên cho trường hợp 1T,2T... hoặc 1P,2P được không ạ ?Em cảm ơn bác !
  • 0

#820 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 03 March 2010 - 04:55 PM

Cảm ơn bác Hoành nhiều ! Em lại phải nhờ thêm bác sửa giùm em lisp trên cho trường hợp 1T,2T... hoặc 1P,2P được không ạ ?Em cảm ơn bác !

Cảm ơn bác Hoành. Cho phép Tue_NV học được điều này giúp cho bạn HoangVuTuan
Bạn HoangVuTuan sử dụng thử code sau :

(defun C:cong()
(setq ss (ssget '((0 . "TEXT")(-4 . ""OR>")))

    sochenh (getint "\nHay vao so chenh: ")
  )
  (while (setq ent (ssname ss 0))
    (setq
      tt (entget ent)
      gt (cdr (assoc 1 tt)))
(if (wcmatch gt "@#*")
     (setq gt (strcat (substr gt 1 1) (itoa (+ sochenh (atoi (substr gt 2)))) ))
 (setq gt (strcat (itoa (+ sochenh (atoi (substr gt 1 (1- (strlen gt)) ) ) ) )
(substr gt (strlen gt) 1) ))
    )
    (entmod (subst (cons 1 gt) (assoc 1 tt) tt))
    (setq ss (ssdel ent ss))
  )
  (princ)
)

Chức năng Download Lisp file bị lỗi bác Hoành ạ. Nhờ bác sửa giúp.
Bạn HoangVuTuan nhấn nút Reply bài viết này -> Chép hết code về chạy nhé.
  • 1