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

[Đã xong] Edit lần lượt nhiều *Text

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

Kính gửi anh em chuyên gia autolisp.

Trước đây mình có làm thiết kế cho nước ngoài, họ có dùng lisp để thay đổi lệnh, trong đó có lệnh chỉnh sửa chữ hàng loạt ví dụ, cần phải sửa hàng loạt text, ta chọn 1 lúc tất cả các text riêng lẻ, rồi sau đó chỉ việc gõ thông số mới, khi hết text này nó sẽ tự động hiển thị text cần sửa tiếp theo mà không cần phải lặp lại câu lệnh, rât tiện cho người chuyên update list bản vẽ.

Bạn dùng lisp này nhé

download

cmd:MET

Thứ hai là lệnh trim hàng loạt đối tượng đồng thời, hiện nay cad cho phép xén từng line lần lượt, nhưng trước đây, mình chỉ cần chọn đường xén, rồi chọn tất cả đối tượng cần xén bằng cách bấm 2 điểm để chọn tất cả đối tượng bị xén là nó cắt một phát hết luôn.

Thứ 3 là lệnh extent hàng loạt, cũng làm giống như lệnh trim.

Hiện nay mình bị mất 3 cái file lisp này nên làm với cad khá bất tiện, mong anh em giỏi lisp viết hộ cho mình và cho mọi người với ạ.

Cảm ơn anh em rất nhiều, chúc mọi ngưòi mạnh khoẻ.

Cái này thì từ phiên bản cad2006 đã hỗ trợ rồi bạn ạ! :s_dead:

  • 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

Hôm trước có bạn quay video edit lần lượt các Text (mà hỏi viết bằng ngôn ngữ gì không nói :wacko: ), cũng có bạn yêu cầu, ketxu post cái đơn giản viết bằng Lisp mà ketxu vẫn dùng, bác nào thiếu thì lấy về xài chơi.

Text sẽ được edit theo thứ tự từ trái sang phải, từ trên xuống dưới

 

(defun c:1 (/ selset ST:Text-Base)
(grtext -1 "Free from Cadviet.com @ketxu")
 (defun ST:Text-Base (ent)
   (if (/= (cdr (assoc 72 (entget ent))) 0)
     (cdr (assoc 11 (entget ent)))
     (cdr (assoc 10 (entget ent)))
     );_ end of if
   );_ end of defun
 (if (setq selset (ssget "_:L" '((0 . "*TEXT"))))
   (foreach txt             
              (vl-sort
                (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                '(lambda (a B)
                   (< (car (ST:Text-Base a))(car (ST:Text-Base B)))                    
                   (> (cadr (ST:Text-Base a)) (cadr (ST:Text-Base B)))
                 );_ end of lambda
              );_ end of vl-sort
     (command "_.ddedit" txt "")
     );_ end of foreach
   );_ end of if
 )

Không áp dụng với Rtext ^^

 

Srr : ket vừa tìm thấy topic trùng chức năng, xin phép gộp lại. Lisp của bác bemove post có chức năng tương tự nhưng rộng hơn, áp dụng cả với ATT, TOL, DIM nhưng theo thứ tự chọn (hoặc thứ tự text được tạo)

  • 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

Hôm trước có bạn quay video edit lần lượt các Text (mà hỏi viết bằng ngôn ngữ gì không nói :wacko: ), cũng có bạn yêu cầu, ketxu post cái đơn giản viết bằng Lisp mà ketxu vẫn dùng, bác nào thiếu thì lấy về xài chơi.

Thank's bác, e cũng cần cái này!

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

Hôm trước có bạn quay video edit lần lượt các Text (mà hỏi viết bằng ngôn ngữ gì không nói :wacko: ), cũng có bạn yêu cầu, ketxu post cái đơn giản viết bằng Lisp mà ketxu vẫn dùng, bác nào thiếu thì lấy về xài chơi.

Text sẽ được edit theo thứ tự từ trái sang phải, từ trên xuống dưới

 

(defun c:1 (/ selset ST:Text-Base)
(grtext -1 "Free from Cadviet.com @ketxu")
 (defun ST:Text-Base (ent)
   (if (/= (cdr (assoc 72 (entget ent))) 0)
     (cdr (assoc 11 (entget ent)))
     (cdr (assoc 10 (entget ent)))
     );_ end of if
   );_ end of defun
 (if (setq selset (ssget "_:L" '((0 . "*TEXT"))))
   (foreach txt             
              (vl-sort
                (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                '(lambda (a B)
                   (< (car (ST:Text-Base a))(car (ST:Text-Base B)))                    
                   (> (cadr (ST:Text-Base a)) (cadr (ST:Text-Base B)))
                 );_ end of lambda
              );_ end of vl-sort
     (command "_.ddedit" txt "")
     );_ end of foreach
   );_ end of if
 )

Không áp dụng với Rtext ^^

 

Srr : ket vừa tìm thấy topic trùng chức năng, xin phép gộp lại. Lisp của bác bemove post có chức năng tương tự nhưng rộng hơn, áp dụng cả với ATT, TOL, DIM nhưng theo thứ tự chọn (hoặc thứ tự text được tạo)

1. Lisp ở bài đầu tiên không phải của bác Bemove...

2. Cả 2 Lisp đều có điểm chưa hay : Là khi chọn 1 số Text nào đó -> Muốn thoát ra khỏi vòng lặp ngay tại Text muốn sửa thì không được. Phải enter cho hết số đối tượng Text thì mói thoát được.

 

Cái chưa hay nữa là : Khi sửa nhầm Text nào đó muốn undo ngay lại vị trí lúc đó để sửa cũng không được. Đành Enter cho hết cái lệnh cái đã rồi mới sửa được

 

Hề, chắc là "Chưa xong" đâu nhỉ?? :lol:

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­ững điều bác Tuệ nói e đã biết, tuy nhiên, Esc nó trùng với lệnh thoát 1 session edit Mtext, cho nên e cũng chưa đổi. Hy vọng bác sửa giúp e ^^

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­ững điều bác Tuệ nói e đã biết, tuy nhiên, Esc nó trùng với lệnh thoát 1 session edit Mtext, cho nên e cũng chưa đổi. Hy vọng bác sửa giúp e ^^

Ketxu có thể giải quyết như thế này :

1. Không sử dụng vòng lặp Foreach hoặc Repeat (vì nó luôn xác định trước số lần lặp)

-> Nên sử dụng vòng lặp While - Vòng lặp này có số lần lặp xác định nhưng nó theo 1 điều kiện cho trước. Khi điều kiện NIL thì nó sẽ thoát khỏi vòng lặp

 

2. Nút ESC trong lệnh ED thì đương nhiên Tue_NV biết tính năng của nó.

Ketxu có thể giải quyết như thế này:

 

a) Xác định 1 chuỗi string nào đó (ví dụ string "un") làm lối thoát. Khi sửa Text mà gõ đúng chữ "un" này thì mình thực hiện undo lại 1 lần để hoàn trả lại kí tự vừa gõ "un", đồng thời viết thêm 1 hàm để trả lại điều kiện của hàm While là NIL để tạo ra 1 "lối thoát"

 

b ) Cách giải quyết tương tự, cho việc undo cái Text trước đó khi bị gõ nhầm. Và mức độ của nó sẽ "khó hơn" câu a) một chút :rolleyes:

 

Hy vọng Ketxu sẽ giải quyết được dựa theo các ý này. :rolleyes:

  • 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 bác Tuệ đã hướng dẫn ^^. Theo em thì thế này :

1. OK ^^

2.a : em biết tìm chuỗi nào để không trùng nội dung người dùng đây ^^

b : .... Khó thì e không kham nổi rồi ^^

 

Với tinh thần tránh xa chỗ khó, em viết tạm 1 đoạn dùng grread để giải quyết các vấn đề bác Tuệ nói , các bác dùng tạm

Chức năng thì vẫn thế , tuy nhiên có thể :

- Enter 2 lần để thoát

- Dùng tab để quay trở lại text trước.

=> thứ tự sửa có thể chạy xuôi, chạy ngược...

(defun c:1 (/ selset ST:Text-Base lstEname i)
(grtext -1 "Free from Cadviet.com @ketxu")
 (defun ST:Text-Base (ent)
   (if (/= (cdr (assoc 72 (entget ent))) 0)
     (cdr (assoc 11 (entget ent)))
     (cdr (assoc 10 (entget ent)))
     );_ end of if
   );_ end of defun
(if (setq selset (ssget "_:L" '((0 . "*TEXT"))))
(progn  
(setq lstEname
              (vl-sort
                (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                '(lambda (a B)
                   (< (car (ST:Text-Base a))(car (ST:Text-Base B)))                    
                   (> (cadr (ST:Text-Base a)) (cadr (ST:Text-Base B)))
                 )
              ) i 0
)
(while (< i (length lstEname))
(progn		
	(setq gr (grread t 15 0) g1 (car gr) g2 (cadr gr))
	(cond ((= g1 5))
		  ((= g1 2)
			(cond
				((= g2 13)(setq i (length lstEname)))
				((= g2 9)(if (> i 0)(command "_.ddedit" (nth (setq i(1- i)) lstEname) "")(command "_.ddedit" (nth 0 lstEname) "")))
				( T (command "_.ddedit" (nth i lstEname) "")
				(setq i (1+ i))
				)
	)
	)
	)
)
)
)
)
)

  • 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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×