Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
hmt

xin giúp về đổi chỗ 2 text cho nhau

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

chao mọi người trên diễn đàn.Hiện e có 1 trục trặc nhỏ như sau, đó là việc sắp xếp lại thứ tự trên dưới của text . Ví dụ e có 2 text 1 text nằm trên 1 text nằm dưới cùng layer và h e cần đổi chỗ 2 text này cho nhau, text trên xuống dưới và text dưới lên trên :) mọi người giúp e với ạ, vì có rất nhiều text cần phải đổi chỗ cho nhau. Thanks all  

file vi du : http://www.cadviet.com/upfiles/4/48377_new_block.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

chao mọi người trên diễn đàn.Hiện e có 1 trục trặc nhỏ như sau, đó là việc sắp xếp lại thứ tự trên dưới của text . Ví dụ e có 2 text 1 text nằm trên 1 text nằm dưới cùng layer và h e cần đổi chỗ 2 text này cho nhau, text trên xuống dưới và text dưới lên trên :) mọi người giúp e với ạ, vì có rất nhiều text cần phải đổi chỗ cho nhau. Thanks all  

file vi du : http://www.cadviet.com/upfiles/4/48377_new_block.dwg

Lisp hoán đổi giá trị của hai Text cùng layer :

(defun C:doiTxt(/ obj1 obj2 ss tmp)
  (princ "Chon 2 Text cung layer :")
  (if (and
	(setq ss (ssget (list (cons 0 "TEXT")) ))
	(= 2 (sslength ss))
	(setq obj1 (vlax-ename->vla-object (ssname ss 0)))
	(setq obj2 (vlax-ename->vla-object (ssname ss 1)))
	(eq (vla-get-Layer obj1) (vla-get-Layer obj2)	) )
    (progn      
      (setq tmp (vla-get-TextString obj1))
      (vla-put-TextString obj1 (vla-get-TextString obj2))
      (vla-put-TextString obj2 tmp)))
  (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

Lisp hoán đổi giá trị của hai Text cùng layer :

(defun C:doiTxt(/ obj1 obj2 ss tmp)
  (princ "Chon 2 Text cung layer :")
  (if (and
	(setq ss (ssget (list (cons 0 "TEXT")) ))
	(= 2 (sslength ss))
	(setq obj1 (vlax-ename->vla-object (ssname ss 0)))
	(setq obj2 (vlax-ename->vla-object (ssname ss 1)))
	(eq (vla-get-Layer obj1) (vla-get-Layer obj2)	) )
    (progn      
      (setq tmp (vla-get-TextString obj1))
      (vla-put-TextString obj1 (vla-get-TextString obj2))
      (vla-put-TextString obj2 tmp)))
  (princ))

Thank bác gia bạch , thế này vẫn phải pick từng cụm text nhỉ, có cách nào quét 1 phát tất cả các cụm text đó mà chúng đổi chỗ cho nhau dc k ạ

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ổ sung lsp của bác gia_bach 1 chút để có thể chọn nhiều text 1 lúc, với đk là 2 txt nằm trong 1 polyline kín.

 

(defun c:dtxt() 
(defun doiTxt(ss / obj1 obj2 tmp) 
 (if (and  (= 2 (sslength ss))
(setq obj1 (vlax-ename->vla-object (ssname ss 0)))
(setq obj2 (vlax-ename->vla-object (ssname ss 1)))
(eq (vla-get-Layer obj1) (vla-get-Layer obj2)))
   (progn      
     (setq tmp (vla-get-TextString obj1))
     (vla-put-TextString obj1 (vla-get-TextString obj2))
     (vla-put-TextString obj2 tmp)))
)
(princ "Chon cac khung bao Text :")
(foreach pl (vl-remove-if-not '(lambda (x) (= :vlax-true (vla-get-Closed (vlax-ename->vla-object x))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "LWPOLYLINE")))))))
(doiTxt (ssget "CP" (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget pl)))
'((0 . "TEXT") )))
)
)
  • 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ổ sung lsp của bác gia_bach 1 chút để có thể chọn nhiều text 1 lúc, với đk là 2 txt nằm trong 1 polyline kín.

 

(defun c:dtxt() 
(defun doiTxt(ss / obj1 obj2 tmp) 
 (if (and  (= 2 (sslength ss))
(setq obj1 (vlax-ename->vla-object (ssname ss 0)))
(setq obj2 (vlax-ename->vla-object (ssname ss 1)))
(eq (vla-get-Layer obj1) (vla-get-Layer obj2)))
   (progn      
     (setq tmp (vla-get-TextString obj1))
     (vla-put-TextString obj1 (vla-get-TextString obj2))
     (vla-put-TextString obj2 tmp)))
)
(princ "Chon cac khung bao Text :")
(foreach pl (vl-remove-if-not '(lambda (x) (= :vlax-true (vla-get-Closed (vlax-ename->vla-object x))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "LWPOLYLINE")))))))
(doiTxt (ssget "CP" (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget pl)))
'((0 . "TEXT") )))
)
)

thank bac Tot77 nhé lisp dùng rất hiệu quả :D

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

Đăng nhập để thực hiện theo  

×