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

Lisp thêm tiền tố vào tên của hàng loạt layer

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

Bạn có thể dùng chính cái rename để xóa hàng loạt được mà.

 

Ví dụ mình có các layer sau:

ABC_Layer1

ABC_Layer2

ABC_Layer3

ABC_Layer4

 

Muốn xóa "ABC_" đi thì bạn viết như sau

Old:ABC_*

New:*

 

Thì các layer trên sẽ biến thành

Layer1

Layer2

Layer3

Layer4

      ABC_LAYER_1
      ABC_LAYER_2
      ABC_LAYER_3
      ABC_LAYER_1
      ABC_LAYER_2
 
      ABC_LAYER_1
      ABC_LAYER_2
      ABC_LAYER_3
      ABC_LAYER_1
      ABC_LAYER_2
 
      ABC_LAYER_1
      ABC_LAYER_2
      ABC_LAYER_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

 

Bạn có thể dùng chính cái rename để xóa hàng loạt được mà.

 

Ví dụ mình có các layer sau:

ABC_Layer1

ABC_Layer2

ABC_Layer3

ABC_Layer4

 

Muốn xóa "ABC_" đi thì bạn viết như sau

Old:ABC_*

New:*

 

Thì các layer trên sẽ biến thành

Layer1

Layer2

Layer3

Layer4

      ABC_LAYER_1
      ABC_LAYER_2
      ABC_LAYER_3
      ABC_LAYER_1
      ABC_LAYER_2
 
      ABC_LAYER_1
      ABC_LAYER_2
      ABC_LAYER_3
      ABC_LAYER_1
      ABC_LAYER_2
 
      ABC_LAYER_1
      ABC_LAYER_2
      ABC_LAYER_3

 

Mình biết cách này rồi. Tuy nhiên trong một số bản vẽ còn có các layer của các Xref sẽ không xoá, hay thay tên bằng cách rename được. Nhưng nó lại đổi tên được bằng cái lisp kia của bạn. Tuy nhiên sau khi đổi tên muốn đổi lại thì lại không biết đổi kiểu gì. Vì cái lisp kia chỉ biết thêm kí tự, không biết xoá ký tự kiểu gì

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

Nếu bạn k thích kiểu Old - New thì dùng tạm cái này < search nhanh cho bạn trên mạng - K có copyright - không viết >

 

(defun c:DLP ( / p x n ) (vl-load-com)
  (if (< 1 (setq x (strlen (setq p (strcat (strcase (getstring t "\nSpecify Prefix: ")) "*")))))
    (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq n (vla-get-name l))) p)
        (vl-catch-all-apply 'vla-put-name (list l (substr n x)))
      )
    )
  )
  (princ)
)

(defun c:DLS ( / s x n ) (vl-load-com)
  (if (< 1 (setq x (strlen (setq s (strcat "*" (strcase (getstring t "\nSpecify Suffix: ")))))))
    (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq n (vla-get-name l))) s)
        (vl-catch-all-apply 'vla-put-name (list l (substr n 1 (- (strlen n) x -1))))
      )
    )
  )
  (princ)
)

(defun c:ALP ( / p w n ) (vl-load-com)
  (setq p (getstring t "\nSpecify Prefix: ") w (strcat (strcase p) "*"))
  (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (wcmatch (strcase (setq n (vla-get-name l))) w))
      (vl-catch-all-apply 'vla-put-name (list l (strcat p n)))
    )
  )
  (princ)
)

(defun c:ALS ( / s w n ) (vl-load-com)
  (setq s (getstring t "\nSpecify Suffix: ") w (strcat "*" (strcase s)))
  (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (wcmatch (strcase (setq n (vla-get-name l))) w))
      (vl-catch-all-apply 'vla-put-name (list l (strcat n s)))
    )
  )
  (princ)
)

Có 4 thằng : thêm trước (ALP), thêm sau (ALS), xóa trước (DLP), xóa sau (DLS)

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

Old : *

New : *-Trước_sau_như_nhau

Mình  muốn thêm hậu tố vào tên layer thì lại ko dc:

Old: *

New: *-XY

Mình thêm như vậy thì ko dc. Nếu có sẵn tên như vậy mà muốn xoá thì lại xoá dc.

Bạn hướng dẫn giúp dc ko?

Thanks!

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

Srr

 

Mình  muốn thêm hậu tố vào tên layer thì lại ko dc:
Old: *

New: *-XY

Mình thêm như vậy thì ko dc. Nếu có sẵn tên như vậy mà muốn xoá thì lại xoá dc.

Bạn hướng dẫn giúp dc ko?

Thanks!

Srr bạn, mình vừa test trên CAD2007 tại công ty thì k được thật ^^

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

Nếu bạn k thích kiểu Old - New thì dùng tạm cái này < search nhanh cho bạn trên mạng - K có copyright - không viết >

 

(defun c:DLP ( / p x n ) (vl-load-com)
  (if (< 1 (setq x (strlen (setq p (strcat (strcase (getstring t "\nSpecify Prefix: ")) "*")))))
    (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq n (vla-get-name l))) p)
        (vl-catch-all-apply 'vla-put-name (list l (substr n x)))
      )
    )
  )
  (princ)
)

(defun c:DLS ( / s x n ) (vl-load-com)
  (if (< 1 (setq x (strlen (setq s (strcat "*" (strcase (getstring t "\nSpecify Suffix: ")))))))
    (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq n (vla-get-name l))) s)
        (vl-catch-all-apply 'vla-put-name (list l (substr n 1 (- (strlen n) x -1))))
      )
    )
  )
  (princ)
)

(defun c:ALP ( / p w n ) (vl-load-com)
  (setq p (getstring t "\nSpecify Prefix: ") w (strcat (strcase p) "*"))
  (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (wcmatch (strcase (setq n (vla-get-name l))) w))
      (vl-catch-all-apply 'vla-put-name (list l (strcat p n)))
    )
  )
  (princ)
)

(defun c:ALS ( / s w n ) (vl-load-com)
  (setq s (getstring t "\nSpecify Suffix: ") w (strcat "*" (strcase s)))
  (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (wcmatch (strcase (setq n (vla-get-name l))) w))
      (vl-catch-all-apply 'vla-put-name (list l (strcat n s)))
    )
  )
  (princ)
)

Có 4 thằng : thêm trước (ALP), thêm sau (ALS), xóa trước (DLP), xóa sau (DLS)

 

Đã chuẩn với những gì em cần. Cám ơn anh Ketxu nhé. Chúc anh công tác tốt và nhiệt tình giúp những anh em còn bỡ ngỡ trên diễn đàn nữa.

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

Nếu bạn k thích kiểu Old - New thì dùng tạm cái này < search nhanh cho bạn trên mạng - K có copyright - không viết >

 

(defun c:DLP ( / p x n ) (vl-load-com)
  (if (< 1 (setq x (strlen (setq p (strcat (strcase (getstring t "\nSpecify Prefix: ")) "*")))))
    (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq n (vla-get-name l))) p)
        (vl-catch-all-apply 'vla-put-name (list l (substr n x)))
      )
    )
  )
  (princ)
)

(defun c:DLS ( / s x n ) (vl-load-com)
  (if (< 1 (setq x (strlen (setq s (strcat "*" (strcase (getstring t "\nSpecify Suffix: ")))))))
    (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq n (vla-get-name l))) s)
        (vl-catch-all-apply 'vla-put-name (list l (substr n 1 (- (strlen n) x -1))))
      )
    )
  )
  (princ)
)

(defun c:ALP ( / p w n ) (vl-load-com)
  (setq p (getstring t "\nSpecify Prefix: ") w (strcat (strcase p) "*"))
  (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (wcmatch (strcase (setq n (vla-get-name l))) w))
      (vl-catch-all-apply 'vla-put-name (list l (strcat p n)))
    )
  )
  (princ)
)

(defun c:ALS ( / s w n ) (vl-load-com)
  (setq s (getstring t "\nSpecify Suffix: ") w (strcat "*" (strcase s)))
  (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (if (not (wcmatch (strcase (setq n (vla-get-name l))) w))
      (vl-catch-all-apply 'vla-put-name (list l (strcat n s)))
    )
  )
  (princ)
)

Có 4 thằng : thêm trước (ALP), thêm sau (ALS), xóa trước (DLP), xóa sau (D

Anh Ketxu có gì giúp em với. Cái lisp của anh em dùng đã ngon rồi tuy nhiên không hiểu sao khi load lisp đó vào thì mỗi khi mình regen thì các chân đim nó hiện to tướng lên. http://www.cadviet.com/upfiles/3/103590_e0101031.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

@phamthanhbinh bác có thể chỉnh cái lisp của bác để cho người dùng có thể chọn layer bằng cách chọn 1 vùng đối tượng trong bản vẽ, các layer nào trong vùng chọn sẽ được chỉnh tên được không :D

Hề hề hề,

Cái lisp mình viết chỉ là một ví dụ về cách giải quyết vấn đề. việc lập danh sách các layer cần đổi tên có thể có nhiều cách khác nhau. Do mình chưa hiểu yêu cầu cụ thể của chủ thớt về cách chọn các layer cần đổi tên nên mình chơi kiểu dùng tblseach để lấy qua tên tất cả các layer có trên bản vẽ. Như vậy đúng là sẽ không nhanh được nếu như bản vẽ có vài trăm layer. Tuy nhiên nó sẽ không bỏ sót anh cu nào nếu anh cu ấy muốn khai sinh lại.

Yêu cầu của bác là dùng vùng chọn để lấy layer không phải là không được. Chỉ cần lây tất cả các đối tượng có trong vùng chọn và lặp qua các đối tượng này để lấy ra các layer của chúng, Tuy nhiên cần loại bỏ các layer không thể rename như layer 0 và layer Defpoints, ngoài ra mình cũng chưa rõ các layer ttong xref có thể rename được hay không nên cũng chưa biết cách loại trừ.

Hiện tại mình chưa rảnh lắm nên chưa thể code ngay được, nếu bạn biết về líp thì có thể tự làm theo hương đó xem sao.

  • 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  muốn thêm hậu tố vào tên layer thì lại ko dc:

Old: *

New: *-XY

Mình thêm như vậy thì ko dc. Nếu có sẵn tên như vậy mà muốn xoá thì lại xoá dc.

Bạn hướng dẫn giúp dc ko?

Thanks!

Hề hề hề,

Phải chú ý rằng có các layer không thể đổi tên nên nếu trong tập hợp các layer "*" có các layer này thì lisp sẽ không chạy đâ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

@phamthanhbinh bác có thể chỉnh cái lisp của bác để cho người dùng có thể chọn layer bằng cách chọn 1 vùng đối tượng trong bản vẽ, các layer nào trong vùng chọn sẽ được chỉnh tên được không :D

Hề hề hề,

Bác thử dùng cái này coi có được không nhè.

http://www.cadviet.com/upfiles/3/5194_laplayerlistselection1.lsp

  • Like 1
  • 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  

×