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

Trùng Tên Block Khi Copy Từ Bản Vẽ Này Sang Bản Vẽ Khác

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

Dear mọi người

 

Như tên chủ đề, khi copy từ bản vẽ này sang bản vẽ khác có chứa block. Thì những block trùng tên sẽ đè lên nhau rất khó quản lý.

 

Mong các cao thủ có cách nào chỉ giúp hoặc có lisp nào giải quyết được vấn đề này ko chỉ giúp mình với.

 

Thanks gia đình cadviet

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 nên nghĩ đến việc đơn giản hoá công việc thì các Lisped sẽ giúp bạn dễ hơn, Ví dụ yêu cầu: Lisp tự động đổi tên block có sẵn trong bản vẽ theo dạng "tên Block"+"tiền tố hoặc hậu tố".

Sau khi đổi tên rồi thì bạn copy sang bản vẽ khác và ko phải lo lắng bị trùng block.

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 lệnh xref để chèn file này vào file kia.

 

Sau đó dùng bind để biến file kia thành block.

 

Dùng explode để phá block.

 

Với cách này thì bạn sẽ giữ được block layer, text style,... của file góc ban đầ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ạn nên nghĩ đến việc đơn giản hoá công việc thì các Lisped sẽ giúp bạn dễ hơn, Ví dụ yêu cầu: Lisp tự động đổi tên block có sẵn trong bản vẽ theo dạng "tên Block"+"tiền tố hoặc hậu tố".

Sau khi đổi tên rồi thì bạn copy sang bản vẽ khác và ko phải lo lắng bị trùng block.

Chào bạn Conghoa

 

Vậy mình ra yêu cầu thế này bạn đóng góp xem sao nghe.

 

Yêu cầu: khi copy các đối tượng từ bản vẽ A sang bản vẽ B, nếu có những block trùng tên thì LISP sẽ đưa ra các tùy chọn như sau:

+ Đổi tên các block trùng tên của A bằng cách là thêm hậu tố

+ Thay thế các block của B bằng các block của A

+ Loại trừ các block trùng tên.

 

Mong các cao thủ lisp có thể giúp mình phần này

  • Vote giảm 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
23 giờ trước, DNcouples đã nói:

Em cũng có nhu cầu như bác chủ thớt ạ, mà sao chủ đề này dừng từ 2016 rồi :((

Dừng vì vấn đề đã được giải quyết rồi mà bạn:

 

Bạn dùng lệnh xref để chèn file này vào file kia.

Sau đó dùng bind để biến file kia thành block.

Dùng explode để phá block.

Với cách này thì bạn sẽ giữ được block layer, text style,... của file góc ban đầu

  • Like 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 thử lisp đổi tên hàng loạt Block này xem sao.

Nó sẽ thêm tiền tố vào tên block mà mình chọn hoặc tất cả block trong bản vẽ.

(defun c:DTB (/ Blocks *error* cm r ss int sn sfx kw bks nam)
  (vl-load-com)
;;; 		Tharwat 31. Oct. 2012 			;;;
;;;   Rename selected or All Blocks as User's inputs    ;;;
  (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq Blocks (vla-get-blocks acdoc))
  (setq cm (getvar 'cmdecho))
  (defun *error* (x)
    (if cm
      (setvar 'cmdecho cm)
    )
    (vla-EndUndoMark acdoc)
    (princ "\n")
    (princ "\n *Cancel*:")
  )
  (if (and (not (eq (setq sfx (getstring t "\n Specify Suffix :")) ""))
           (setq r (snvalid sfx))
           (progn (initget "Selected All")
                  (setq kw (cond ((getkword "\n Rename [Selected . All] Blocks < Selected > :"))
                                 ("Selected")
                           )
                  )
           )
      )
    (if (eq kw "All")
      (progn (vla-StartUndoMark acdoc)
             (vlax-for x Blocks (vl-catch-all-apply 'vla-put-name (list x (strcat sfx (vla-get-name x)))))
             (vla-EndUndoMark acdoc)
      )
      (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
        (progn (vla-StartUndoMark acdoc)
               (setvar 'cmdecho 0)
               (repeat (setq int (sslength ss))
                 (setq sn (ssname ss (setq int (1- int))))
                 (setq nam (cdr (assoc 2 (entget sn))))
                 (if (not (member nam bks))
                   (progn (vl-cmdf "_.-rename" "B" nam (setq nam (strcat sfx nam))) (setq bks (cons nam bks)))
                 )
               )
               (vla-EndUndoMark acdoc)
               (setvar 'cmdecho cm)
        )
      )
    )
    (cond ((not sfx) (princ "\n Cancelled by user "))
          ((not r) (princ "\n Not Valid Block name "))
          (t (princ "\n Cancelled by user "))
    )
  )
  (princ "\n Written by Tharwat Al Shoufi")
  (princ)
)

 

RENB_dtb.LSP

  • Like 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
9 phút trước, vietduc147258 đã nói:

Bạn dùng thử lisp đổi tên hàng loạt Block này xem sao.

Nó sẽ thêm tiền tố vào tên block mà mình chọn hoặc tất cả block trong bản vẽ.


(defun c:DTB (/ Blocks *error* cm r ss int sn sfx kw bks nam)
  (vl-load-com)
;;; 		Tharwat 31. Oct. 2012 			;;;
;;   Rename selected or All Blocks as User's inputs    ;;;
  (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq Blocks (vla-get-blocks acdoc))
  (setq cm (getvar 'cmdecho))
  (defun *error* (x)
    (if cm
      (setvar 'cmdecho cm)
    )
    (vla-EndUndoMark acdoc)
    (princ "\n")
    (princ "\n *Cancel*:")
  )
  (if (and (not (eq (setq sfx (getstring t "\n Specify Suffix :")) ""))
           (setq r (snvalid sfx))
           (progn (initget "Selected All")
                  (setq kw (cond ((getkword "\n Rename [Selected . All] Blocks < Selected > :"))
                                 ("Selected")
                           )
                  )
           )
      )
    (if (eq kw "All")
      (progn (vla-StartUndoMark acdoc)
             (vlax-for x Blocks (vl-catch-all-apply 'vla-put-name (list x (strcat sfx (vla-get-name x)))))
             (vla-EndUndoMark acdoc)
      )
      (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
        (progn (vla-StartUndoMark acdoc)
               (setvar 'cmdecho 0)
               (repeat (setq int (sslength ss))
                 (setq sn (ssname ss (setq int (1- int))))
                 (setq nam (cdr (assoc 2 (entget sn))))
                 (if (not (member nam bks))
                   (progn (vl-cmdf "_.-rename" "B" nam (setq nam (strcat sfx nam))) (setq bks (cons nam bks)))
                 )
               )
               (vla-EndUndoMark acdoc)
               (setvar 'cmdecho cm)
        )
      )
    )
    (cond ((not sfx) (princ "\n Cancelled by user "))
          ((not r) (princ "\n Not Valid Block name "))
          (t (princ "\n Cancelled by user "))
    )
  )
  (princ "\n Written by Tharwat Al Shoufi")
  (princ)
)

 

RENB_dtb.LSP

Lisp này không đổi tên được Tên Block tiếng Trung đâu nha bạn.

Đánh lệnh "Ren" để đổi tên thủ công nha

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
Vào lúc 2/7/2020 tại 13:05, vietduc147258 đã nói:

Bạn dùng thử lisp đổi tên hàng loạt Block này xem sao.

Nó sẽ thêm tiền tố vào tên block mà mình chọn hoặc tất cả block trong bản vẽ.


(defun c:DTB (/ Blocks *error* cm r ss int sn sfx kw bks nam)
  (vl-load-com)
;;; 		Tharwat 31. Oct. 2012 			;;;
;;;   Rename selected or All Blocks as User's inputs    ;;;
  (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq Blocks (vla-get-blocks acdoc))
  (setq cm (getvar 'cmdecho))
  (defun *error* (x)
    (if cm
      (setvar 'cmdecho cm)
    )
    (vla-EndUndoMark acdoc)
    (princ "\n")
    (princ "\n *Cancel*:")
  )
  (if (and (not (eq (setq sfx (getstring t "\n Specify Suffix :")) ""))
           (setq r (snvalid sfx))
           (progn (initget "Selected All")
                  (setq kw (cond ((getkword "\n Rename [Selected . All] Blocks < Selected > :"))
                                 ("Selected")
                           )
                  )
           )
      )
    (if (eq kw "All")
      (progn (vla-StartUndoMark acdoc)
             (vlax-for x Blocks (vl-catch-all-apply 'vla-put-name (list x (strcat sfx (vla-get-name x)))))
             (vla-EndUndoMark acdoc)
      )
      (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
        (progn (vla-StartUndoMark acdoc)
               (setvar 'cmdecho 0)
               (repeat (setq int (sslength ss))
                 (setq sn (ssname ss (setq int (1- int))))
                 (setq nam (cdr (assoc 2 (entget sn))))
                 (if (not (member nam bks))
                   (progn (vl-cmdf "_.-rename" "B" nam (setq nam (strcat sfx nam))) (setq bks (cons nam bks)))
                 )
               )
               (vla-EndUndoMark acdoc)
               (setvar 'cmdecho cm)
        )
      )
    )
    (cond ((not sfx) (princ "\n Cancelled by user "))
          ((not r) (princ "\n Not Valid Block name "))
          (t (princ "\n Cancelled by user "))
    )
  )
  (princ "\n Written by Tharwat Al Shoufi")
  (princ)
)

 

RENB_dtb.LSP

không đổi được block trong block ạ

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
53 phút trước, ntdat93 đã nói:

không đổi được block trong block ạ

ALl mà. Đổi tên tất cả được luôn nha.

Bữa nay ít dùng lisp này rồi. vì muốn đổi tên tất cả thì chỉ cần rùng lệnh "REN" thôi.

đổi theo kiểu tên cũ "*",  Tên mới "New_*" là ok

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

×