Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
35 replies to this topic

#21 bkhn_2011

bkhn_2011

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 04 March 2014 - 04:41 PM

Mình làm bình thường, không biết có phải do file của bạn ko, nếu được thì up file lên mình thử trực tiếp!

 

Bạn chỉ cho mình cách để sau khi thêm tiền tố vào tất cả mà muốn lại bỏ tiền tố đó thì làm thế nào với ạ. 


  • 0

#22 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 04 March 2014 - 07:15 PM

Mình nói rồi mà ?

Old : A-*

New : *

 

Không nói là Old : A-Wall >"<

 

Ký tự * trong cả Old và New có nghĩa là ở đấy là thằng gì cũng được


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#23 bkhn_2011

bkhn_2011

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 04 March 2014 - 11:39 PM

Mình nói rồi mà ?

Old : A-*

New : *

 

Không nói là Old : A-Wall >"<

 

Ký tự * trong cả Old và New có nghĩa là ở đấy là thằng gì cũng được

Em đã làm được rồi cảm ơn anh. Tuy nhiên cái cách rename chỉ đổi tên được những layer có thể sử dụng. Còn các layer không thể dùng (cái layer mà nó bị mờ mờ của xref thì không thể đổi tên được). 

Cái lisp của bạn Conghoa trên thì đổi tên được cả những layer mờ mờ đó. Bạn conghoa cho mình cách để xóa bớt những kí tự sau khi ta đã thêm vào tên của Layer nhé. 

Cảm ơn tất cả các anh và các bạn đã giải đáp thắc mắc của mình. 


  • 0

#24 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 05 March 2014 - 08:32 AM

Mình chỉ sưu tầm được thôi chứ không biết viết lisp :)


  • 0

#25 bkhn_2011

bkhn_2011

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 05 March 2014 - 08:59 AM

Mình chỉ sưu tầm được thôi chứ không biết viết lisp :)

Hì hì. Thế bạn có hay dùng lisp này không? mà không thấy thắc mắc về nó à. 


  • 0

#26 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 05 March 2014 - 09:57 AM

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

  • 0

#27 bkhn_2011

bkhn_2011

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 05 March 2014 - 04:10 PM

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ì


  • 0

#28 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 05 March 2014 - 05:43 PM

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)


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#29 sumi

sumi

    biết lệnh array

  • Members
  • PipPipPip
  • 185 Bài viết
Điểm đánh giá: 55 (tàm tạm)

Đã gửi 05 March 2014 - 10:32 PM

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!


  • 0
"Xin chào bạn. Đây là tổng đài tin nhắn. Ấn phím 1 để có 1 lời khen. Phím 2 cho một lời chúc tốt đẹp. Phím 3 cho 1 nụ hôn. Phím 4 cho 1 cuộc hẹn. Nếu muốn tất cả hãy bấm số của tôi"

#30 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 06 March 2014 - 09:34 AM

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 ^^


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#31 bkhn_2011

bkhn_2011

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 06 March 2014 - 01:36 PM

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.


  • 0

#32 bkhn_2011

bkhn_2011

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 11 March 2014 - 09:29 AM

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.c...90_e0101031.dwg


  • 0

#33 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 March 2014 - 10:06 AM

@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.


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#34 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 March 2014 - 10:14 AM

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.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#35 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 March 2014 - 11:03 PM

@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.c...tselection1.lsp


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#36 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 13 March 2014 - 08:45 AM

Dùng ngon rồi Phamthanhbinh :D, thanks so much!


  • 0