Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

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

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

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.com/upfiles/2/qhsd_dat.dwg

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
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.com/upfiles/2/drawing1_22.dwg

Bạn dùng lệnh SL :

(defun C:SL ()
(sssetfirst nil (ssadd (entlast) (ssadd)))
)

  • 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

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!

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
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  : "))i 0)
(if (not tle) (setq tle *tle*) (setq *tle* tle))
(while ((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?

  • 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

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!

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
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:

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
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:

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

  • 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
@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.com/upfiles/2/dstt_1.lsp

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
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.com/upfiles/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 : 1

gia so : : 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)
)

  • 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

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

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
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 : 1

gia so : : 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!

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

  • 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

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 !

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

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

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

  • Like 1
  • Vote tăng 3

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
để 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 !

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

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

Bác Tue_NV ơi , bác xem lại dùm em nó báo lỗi :

; error: bad argument type: lselsetp nil

Khi nhập vào số chênh ! Cám ơn bác nhiều

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ác Tue_NV ơi , bác xem lại dùm em nó báo lỗi :

; error: bad argument type: lselsetp nil

Khi nhập vào số chênh ! Cám ơn bác nhiều

Như Tue_NV đã nói, bạn cần reply bài viết của Tue_NV để lấy code mới không bị lỗi.

 

Hoặc bạn có thể lấy đoạn code cải tiến nà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))
   )
   (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)
)

 

@Tue_NV: có thể gộp lệnh or trong trường hợp filter bằng dấu phẩy. Autolisp sẽ kiểm tra tất cả các phần cách nhau bằng dấu phẩy.

  • Vote tăng 4

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
Như Tue_NV đã nói, bạn cần reply bài viết của Tue_NV để lấy code mới không bị lỗi.

 

Hoặc bạn có thể lấy đoạn code cải tiến nà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))
   )
   (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)
)

 

@Tue_NV: có thể gộp lệnh or trong trường hợp filter bằng dấu phẩy. Autolisp sẽ kiểm tra tất cả các phần cách nhau bằng dấu phẩy.

Sau khi xem lại em thấy lisp của các bác có 2 vấn đề : 1 là hay quá 2 là quá hay :cheers: Cảm ơn 2 bá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

Chào anh Nguyễn Hoanh!

Em đã tải và dùng Lisp sắp dim(SD) của anh nhưng khi chọn xong đường Dim gốc thì CAD báo lỗi như sau:

 

Command: sd

Sap xep dim © CADViet.com

Chon duong dim goc: Unknown command "SD". Press F1 for help.

,Anh cho em hỏi dòng lệnh này đã được sử lại rồi phải không a:

 

(* (* D (sin (- A B ))) (phia p1 (polar p1 goc 1.0) p2))

 

Mong anh chỉ giúp.

PS/Cảm ơn anh vì sự giúp đỡ nhiệt tình với mọi người!!!

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

Ai có thể viết gíúp đoạn lisp này dược không? Mình có một đoạn mương dài 100m mình muốn rãi hố ga cho đoạn mương này với khoảng cách 21m một hố ga, và tại mỗi vị trí hố ga đấy có cốt Đỉnh và Đáy mương với lại có thể đặt tên hố ga tại vị trí mỗi hố ga đó. :cheers:

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×