Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
oneclicklogin

[Yêu Cầu] Thay thế text hàng loạt

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

Chào tất cả các anh các anh chị trong diễn đàn .

Em có tham gia diễn đàn thời gian khá dài nhưng chỉ vào học hỏi mọi người . Nay xin anh chị chỉ dùm em hay viết dùm em lisp thay thế text hàng loạt như trong fire em gửi kèm ạ. Dạ quy luật thay thế của em là Text ở cột A thay cho text ở B. em có minh họa trong bản vẽ đính kèm

Em cảm ơn anh chị nhiều.

http://www.mediafire...g5t12xmf1q1jowg

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 tất cả các anh các anh chị trong diễn đàn .

Em có tham gia diễn đàn thời gian khá dài nhưng chỉ vào học hỏi mọi người . Nay xin anh chị chỉ dùm em hay viết dùm em lisp thay thế text hàng loạt như trong fire em gửi kèm ạ. Dạ quy luật thay thế của em là Text ở cột A thay cho text ở B. em có minh họa trong bản vẽ đính kèm

Em cảm ơn anh chị nhiều.

http://www.mediafire...g5t12xmf1q1jowg

 

Cái này giải quyết được 60% ý đồ của bạn, còn thao tác chỉ 1 lần quyếtt chuột thì chắc nhờ người khác giúp giùm.

(defun c:tnn(/ os #sset #ssname #str #sset1 #ssname1)
 (setvar "CMDECHO" 0)
 (command ".undo" "BE")
 (command ".UCS" "W" ^C^C)
 (Prompt "\n- Ch\U+1ECDn Text góc:")
 (setq #sset (ssget ":s" '((0 . "*TEXT,DIMENSION"))))
 (setq #ssname (ssname #sset 0))
 (setq #str (cdr (assoc 1 (entget #ssname))))  
 (Prompt "\n- Ch\U+1ECDn Text \U+0111ích:")
 (setq #sset1 (ssget ":s" '((0 . "*TEXT,DIMENSION"))))
 (setq #ssname1 (ssname #sset1 0))
 (entmod (subst (cons 1 #str) (assoc 1 (entget #ssname1)) (entget #ssname1)))
 (command ".undo" "E")
 (princ)
 (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

Cái này giải quyết được 60% ý đồ của bạn, còn thao tác chỉ 1 lần quyếtt chuột thì chắc nhờ người khác giúp giùm.

(defun c:tnn(/ os #sset #ssname #str #sset1 #ssname1)
 (setvar "CMDECHO" 0)
 (command ".undo" "BE")
 (command ".UCS" "W" ^C^C)
 (Prompt "\n- Ch\U+1ECDn Text góc:")
 (setq #sset (ssget ":s" '((0 . "*TEXT,DIMENSION"))))
 (setq #ssname (ssname #sset 0))
 (setq #str (cdr (assoc 1 (entget #ssname))))  
 (Prompt "\n- Ch\U+1ECDn Text \U+0111ích:")
 (setq #sset1 (ssget ":s" '((0 . "*TEXT,DIMENSION"))))
 (setq #ssname1 (ssname #sset1 0))
 (entmod (subst (cons 1 #str) (assoc 1 (entget #ssname1)) (entget #ssname1)))
 (command ".undo" "E")
 (princ)
 (princ)  
)

Cảm ơn bạn đã quan tâm nhé . Lisp rất tuyệt nhưng tiếc là không 1 lần quét và thay thế nhiều text được rất mong các anh chỉ giúp vấn đề 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

Cảm ơn bạn đã quan tâm nhé . Lisp rất tuyệt nhưng tiếc là không 1 lần quét và thay thế nhiều text được rất mong các anh chỉ giúp vấn đề này ạ.

Lisp này mình đã viết từ lâu rồi.

Link : http://www.cadviet.com/forum/index.php?showtopic=13203&st=700

Sửa theo ý bạn đây :


(defun c:cs(/ ss sx lis1 lis2 n i nn mm li li1)
;;write by Tue_NV
(vl-load-com)
(princ "\n Chon chuoi 1 :")
(setq ss (ssget '((0 . "TEXT"))))
(princ "\n Chon chuoi 2 :")
(setq sx (ssget '((0 . "TEXT"))))
(setq lis1 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq lis2 (vl-remove-if 'listp (mapcar 'cadr (ssnamex sx))))
(setq lis1 (vl-sort lis1 '(lambda (x y) 
(< (caddr (assoc 10 (entget x)))
 (caddr (assoc 10 (entget y)))
)
   )
  )
)
(setq lis2 (vl-sort lis2 '(lambda (x y) 
(< (caddr (assoc 10 (entget x)))
 (caddr (assoc 10 (entget y)))
)
   )
  )
) 
(setq n (sslength ss) i 0)

(if (= (length lis1) (length lis2))
(progn
  (while (< i (length lis1))

(setq nn (entget (nth i lis1)))
(setq mm (entget (nth i lis2)))

(setq li (cdr (assoc 1 nn)))

(setq li1 (cdr (assoc 1 mm)))


;(setq nn (subst (cons 1 li1) (assoc 1 nn) nn))
(setq mm (subst (cons 1 li) (assoc 1 mm) mm))

(entmod mm)
;(entmod nn)
(setq i (+ i 1))

)
)
(alert "\n Hai chuoi khong bang nhau. Lisp khong thuc hien duoc")
)

(princ)

)

  • Vote tăng 5

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 này mình đã viết từ lâu rồi.

Link : http://www.cadviet.c...ic=13203&st=700

Sửa theo ý bạn đây :


(defun c:cs(/ ss sx lis1 lis2 n i nn mm li li1)
;;write by Tue_NV
(vl-load-com)
(princ "\n Chon chuoi 1 :")
(setq ss (ssget '((0 . "TEXT"))))
(princ "\n Chon chuoi 2 :")
(setq sx (ssget '((0 . "TEXT"))))
(setq lis1 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq lis2 (vl-remove-if 'listp (mapcar 'cadr (ssnamex sx))))
(setq lis1 (vl-sort lis1 '(lambda (x y)
(< (caddr (assoc 10 (entget x)))
 (caddr (assoc 10 (entget y)))
)
   )
  )
)
(setq lis2 (vl-sort lis2 '(lambda (x y)
(< (caddr (assoc 10 (entget x)))
 (caddr (assoc 10 (entget y)))
)
   )
  )
)
(setq n (sslength ss) i 0)

(if (= (length lis1) (length lis2))
(progn
  (while (< i (length lis1))

(setq nn (entget (nth i lis1)))
(setq mm (entget (nth i lis2)))

(setq li (cdr (assoc 1 nn)))

(setq li1 (cdr (assoc 1 mm)))


;(setq nn (subst (cons 1 li1) (assoc 1 nn) nn))
(setq mm (subst (cons 1 li) (assoc 1 mm) mm))

(entmod mm)
;(entmod nn)
(setq i (+ i 1))

)
)
(alert "\n Hai chuoi khong bang nhau. Lisp khong thuc hien duoc")
)

(princ)

)

Lisp của anh thật là tuyệt . Cảm ơn anh Tue_NV nhiều lắm .

  • 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

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

×