Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] lisp chuyển các đối tượng về 1 layer


  • Please log in to reply
41 replies to this topic

#1 mua_t7

mua_t7

    biết zoom

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

Đã gửi 28 September 2009 - 11:54 AM

Chào cả nhà.
Các bác giúp em viết lisp chuyển các đối tượng vẽ từ nhiều layer về 1 layer nào đó
Cụ thể:
Chuyển các đối tượng là DIM về layer DIM
Chuyển các đối tượng là HATCH về layer HATCH
Chuyển các đối tượng là TEXT về layer TEXT
Chuyển các đối tượng là BLOCK về layer BLOCK
...
Lips này tương tự như chức năng filter các đối tượng rồi chuyển về layer nào đó của Mr.Lâm trong phần mềm TKXD.
Cảm ơn các bác.
  • -1

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 28 September 2009 - 01:14 PM

Chào cả nhà.
Các bác giúp em viết lisp chuyển các đối tượng vẽ từ nhiều layer về 1 layer nào đó
Cụ thể:
Chuyển các đối tượng là DIM về layer DIM
Chuyển các đối tượng là HATCH về layer HATCH
Chuyển các đối tượng là TEXT về layer TEXT
Chuyển các đối tượng là BLOCK về layer BLOCK
...
Lips này tương tự như chức năng filter các đối tượng rồi chuyển về layer nào đó của Mr.Lâm trong phần mềm TKXD.
Cảm ơn các bác.


Lisp O2L (Object to layer) dưới đây sẽ giúp bạn. Nếu bạn muốn chuyển các đối tượng khác, bạn hãy copy rồi thêm dòng lệnh (cons "KIEUDOITUONG" "TENLAYER") vào cụm các lệnh cons phía dưới.

(defun c:o2l ( / ss pp lstoblayer)
(setq
lstoblayer
(list
(cons "DIMENSION" "DIM") ; chuyen doi tuong Dimension ve layer DIM
(cons "HATCH" "HATCH")
(cons "INSERT" "BLOCK") ; BLOCK (la doi tuong insert) ve layer BLOCK
(cons "*TEXT" "TEXT") ; TEXT va MTEXT ve layer text
)
)

(foreach pp lstoblayer
(setq ss (ssget "X" (list (cons 0 (car pp)))))
(if (not (tblsearch "layer" (cdr pp)))
(command ".layer" "m" (cdr pp) "")
)
(command ".chprop" ss "" "la" (cdr pp) "")
)
(princ)
)

  • 4

#3 mua_t7

mua_t7

    biết zoom

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

Đã gửi 28 September 2009 - 02:15 PM

Lisp O2L (Object to layer) dưới đây sẽ giúp bạn. Nếu bạn muốn chuyển các đối tượng khác, bạn hãy copy rồi thêm dòng lệnh (cons "KIEUDOITUONG" "TENLAYER") vào cụm các lệnh cons phía dưới.

(defun c:o2l ( / ss pp lstoblayer)
(setq
lstoblayer
(list
(cons "DIMENSION" "DIM") ; chuyen doi tuong Dimension ve layer DIM
(cons "HATCH" "HATCH")
(cons "INSERT" "BLOCK") ; BLOCK (la doi tuong insert) ve layer BLOCK
(cons "*TEXT" "TEXT") ; TEXT va MTEXT ve layer text
)
)

(foreach pp lstoblayer
(setq ss (ssget "X" (list (cons 0 (car pp)))))
(if (not (tblsearch "layer" (cdr pp)))
(command ".layer" "m" (cdr pp) "")
)
(command ".chprop" ss "" "la" (cdr pp) "")
)
(princ)
)


Cảm ơn bác nhiều lắm, bác giúp nốt e 1 tí nữa, em dốt lisp lắm :cheers:
Như lisp bác viết thì khi ta dùng lệnh o2l nó sẽ chuyển tất cả, trong 1 file lisp em muốn tách riêng biệt từng lệnh có được không?
Ví dụ:
d2d chuyển các dim về layer DIM
h2h: chuyển các hatch về layer HATCH
b2b: chuyển các block về layer BLOCK
t2t: chuyển các text về layer TEXT
(Các lệnh để trong 1 file lisp thôi bác nhé)
  • -1

#4 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 28 September 2009 - 03:14 PM

Xin phép bác NGUYEN HOANH

(defun CHANGE-LAYER (_TYPE LAYER / OBJS)
(setq OBJS (ssget "X" (list (cons 0 _TYPE))))
(if (not (tblsearch "layer" LAYER))
(command ".layer" "m" LAYER "")
);_ end if
(command ".chprop" OBJS "" "la" LAYER "")
(princ)
);_ end defun
(defun C:D2D (/ OBJS) (CHANGE-LAYER "DIMENSION" "DIM"))
(defun C:H2H (/ OBJS) (CHANGE-LAYER "HATCH" "HATCH"))
(defun C:B2B (/ OBJS) (CHANGE-LAYER "INSERT" "BLOCK"))
(defun C:T2T (/ OBJS) (CHANGE-LAYER "*TEXT" "TEXT"))

  • 10

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#5 ngotunghp

ngotunghp

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 13 June 2010 - 08:04 PM

Cái này thật hữu ích đối với tôi. cám ơn bạn nhiều!
  • 0

#6 binarch

binarch

    biết vẽ line

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

Đã gửi 16 June 2010 - 04:46 PM

hay qua, thanks các bạn
  • 0

#7 tuvanthietke.hcm

tuvanthietke.hcm

    biết lệnh array

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

Đã gửi 14 December 2010 - 09:44 AM

Lisp này rất hay, nhưng biến tất cả các đối tượng thành 1 loại, nhưng trên bản vẽ có 2 loại text thì sao???????????

Bạn nào có lisp gọi nhanh layer (chỉ cần click vào chọn layer là tự động gọi tên layer đó )

Thanks
  • -1

#8 victor85

victor85

    biết lệnh stretch

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

Đã gửi 28 June 2011 - 01:34 PM

Mở rộng cho chủ đề này đây
http://www.cadviet.c...showtopic=24994
Mời các bạn theo dõi và tham khảo. Thân!
  • 0

#9 vandungdhv

vandungdhv

    biết pan

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

Đã gửi 11 April 2012 - 01:54 PM

Thật là bổ ích! Cảm ơn các bác nhiều!
  • 0

#10 quickandfine

quickandfine

    biết lệnh copy

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

Đã gửi 17 July 2012 - 11:21 AM

Lisp O2L (Object to layer) dưới đây sẽ giúp bạn. Nếu bạn muốn chuyển các đối tượng khác, bạn hãy copy rồi thêm dòng lệnh (cons "KIEUDOITUONG" "TENLAYER") vào cụm các lệnh cons phía dưới.

(defun c:o2l ( / ss pp lstoblayer)  (setq    lstoblayer 	(list   	(cons "DIMENSION" "DIM")		; chuyen doi tuong Dimension ve layer DIM        (cons "HATCH" "HATCH")   	(cons "INSERT" "BLOCK")		; BLOCK (la doi tuong insert) ve layer BLOCK   	(cons "*TEXT" "TEXT")		; TEXT va MTEXT ve layer text 	)      )  (foreach pp lstoblayer        (setq ss (ssget "X" (list (cons 0 (car pp)))))    (if (not (tblsearch "layer" (cdr pp)))      (command ".layer" "m" (cdr pp) "")    )    (command ".chprop" ss "" "la" (cdr pp) "")      )    (princ))

Em chào bác Hoành ạ.
Em muốn tìm một đoạn lisp chuyển các đối tượng của Block về cùng một Layer mà tìm chưa thấy được, Em thấy đoạn lisp này của bác là gần với mong muốn của em nhất. Ví dụ Em có một Block A, trong A có 2 đối tượng: 1 đối tượng B thuộc layer 1, 1 đối tượng C thuộc Layer 2. Bây giờ em muốn đối tượng B và đối tượng C chuyển về cùng một Layer là Layer Block. Em đã thử đoạn lisp trên của bác thì nó chuyển đối tượng A về layer Block (Còn B và C thì vẫn giữ nguyên layer của nó). Bác có thể giúp em chuyển luôn cả layer của B và C về layer BLock giống như A được không ạ. Em xin cảm ơn ạ
  • -1

#11 quickandfine

quickandfine

    biết lệnh copy

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

Đã gửi 17 July 2012 - 04:27 PM

Không có bác nào giúp em với ạ. Em đã thử search, rồi vào từng trang tìm dần rồi mà vẫn chưa thấy đoạn lisp nào giống như yêu cầu.
P/S: Em vẫn đang tìm tiếp, nhưng bác nào biết nó ở chỗ nào chỉ giúp em đường link thì tốt quá. Em xin cảm ơn trước ạ!
  • -1

#12 quickandfine

quickandfine

    biết lệnh copy

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

Đã gửi 19 July 2012 - 10:59 AM

Em chào bác Hoành ạ.
Em muốn tìm một đoạn lisp chuyển các đối tượng của Block về cùng một Layer mà tìm chưa thấy được, Em thấy đoạn lisp này của bác là gần với mong muốn của em nhất. Ví dụ Em có một Block A, trong A có 2 đối tượng: 1 đối tượng B thuộc layer 1, 1 đối tượng C thuộc Layer 2. Bây giờ em muốn đối tượng B và đối tượng C chuyển về cùng một Layer là Layer Block. Em đã thử đoạn lisp trên của bác thì nó chuyển đối tượng A về layer Block (Còn B và C thì vẫn giữ nguyên layer của nó). Bác có thể giúp em chuyển luôn cả layer của B và C về layer BLock giống như A được không ạ. Em xin cảm ơn ạ

Các bác ơi đoạn lisp như yêu cầu của em có làm được không ạ? Sao không thấy ai ý kiến gì thế? Em tìm trên diễn đàn 3 ngày rồi mà chưa thấy Lisp nào giống như yêu cầu. Các bác giúp em với ạ!
  • 0

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 July 2012 - 10:57 PM

Làm được - lúc nào rảnh mình post
  • 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


#14 quickandfine

quickandfine

    biết lệnh copy

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

Đã gửi 19 July 2012 - 11:17 PM

Làm được - lúc nào rảnh mình post

Cảm ơn anh Ket.
Em mới tìm thấy đoạn lisp của anh bên xaydungit có tác dụng chuyển layer của tất cả các đối tượng trong block về Layer hiện hành. Đoạn lisp đó em copy về và save dưới dạng .LSP như sau ạ.
http://www.cadviet.c...10072_coblk.lsp
Em dự định là sẽ dùng đoạn lisp này để áp dụng cho ý định của mình. Nhưng khi add vào Cad thì nó báo lỗi là
Command: aq
APPLOAD CoBlk.Lsp successfully loaded.
Command: ; error: bad argument type: consp "INSERT".
Anh xem em copy có lỗi gì không. Hoặc anh rảnh thì Post đoạn lisp mà anh nói cho em xin với nhé.
Thanks anh nhiều nhiều ạ!
  • 0

#15 minhphuoc

minhphuoc

    Chưa sử dụng CAD

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

Đã gửi 19 July 2012 - 11:19 PM

Chào cả nhà.
Các bác giúp em viết lisp chuyển các đối tượng vẽ từ nhiều layer về 1 layer nào đó
Cụ thể:
Chuyển các đối tượng là DIM về layer DIM
Chuyển các đối tượng là HATCH về layer HATCH
Chuyển các đối tượng là TEXT về layer TEXT
Chuyển các đối tượng là BLOCK về layer BLOCK
...
Lips này tương tự như chức năng filter các đối tượng rồi chuyển về layer nào đó của Mr.Lâm trong phần mềm TKXD.
Cảm ơn các bác.


  • 0

#16 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 20 July 2012 - 02:05 AM

Cảm ơn anh Ket.
Em mới tìm thấy đoạn lisp của anh bên xaydungit có tác dụng chuyển layer của tất cả các đối tượng trong block về Layer hiện hành. Đoạn lisp đó em copy về và save dưới dạng .LSP như sau ạ.
http://www.cadviet.c...10072_coblk.lsp
Em dự định là sẽ dùng đoạn lisp này để áp dụng cho ý định của mình. Nhưng khi add vào Cad thì nó báo lỗi là
Command: aq
APPLOAD CoBlk.Lsp successfully loaded.
Command: ; error: bad argument type: consp "INSERT".
Anh xem em copy có lỗi gì không. Hoặc anh rảnh thì Post đoạn lisp mà anh nói cho em xin với nhé.
Thanks anh nhiều nhiều ạ!

Hề hề hề,
Dùng thử cái này coi sao nhé


(defun c:clb (/ bls)
(vl-load-com)
(if (not (tblsearch "layer" "BLOCK"))
(command "layer" "m" "Block" "")
)
(alert "\n Chon tap hop cac block muon chuyen layer")
(setq bls (acet-ss-to-list (ssget (list (cons 0 "insert")))))
(foreach b bls
(cblc B)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cblc (bl / els a els1)

(setq els (entget bl)
els (subst (cons 8 "block") (assoc 8 els) els)
a (entnext bl) )
(entmod els)
(while (/= (cdr (assoc 0 (entget a))) "SEQEND")
(if (/= (cdr (assoc 0 (entget a))) "INSERT")
(progn
(setq els1 (entget a)
els1 (subst (cons 8 "block") (assoc 8 els1) els1) )
(entmod els1)
)
(cblc a)
)
(setq a (entnext a))
)
)

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

#17 quickandfine

quickandfine

    biết lệnh copy

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

Đã gửi 20 July 2012 - 08:13 AM

Hề hề hề,
Dùng thử cái này coi sao nhé



(defun c:clb (/ bls)
(vl-load-com)
(if (not (tblsearch "layer" "BLOCK"))
(command "layer" "m" "Block" "")
)
(alert "\n Chon tap hop cac block muon chuyen layer")
(setq bls (acet-ss-to-list (ssget (list (cons 0 "insert")))))
(foreach b bls
(cblc B)
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cblc (bl / els a els1)

(setq els (entget bl)
els (subst (cons 8 "block") (assoc 8 els) els)
a (entnext bl) )
(entmod els)
(while (/= (cdr (assoc 0 (entget a))) "SEQEND")
(if (/= (cdr (assoc 0 (entget a))) "INSERT")
(progn
(setq els1 (entget a)
els1 (subst (cons 8 "block") (assoc 8 els1) els1) )
(entmod els1)
)
(cblc a)
)
(setq a (entnext a))
)
)

Chào bác phamthanhbinh.
Em dùng thử đoạn lisp trên thì cũng thấy báo lỗi là:

Command: clb
Select objects: 1 found
Select objects: ; error: bad argument type: lentityp nil

Bác xem giúp em bị lỗi ở chỗ nào nhé. Với lại em thấy đoạn này cũng đang chỉ chuyển Block về layer "Block" còn các đối tượng trong block đó vẫn là layer "cũ" của nó. Chắc do em diễn đạt chưa được rõ. Em gửi kèm File lên đây bác xem có rõ hơn không và giúp em với nhé!
http://www.cadviet.c...ock_layer_1.dwg
  • 0

#18 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 20 July 2012 - 09:34 AM

Chào bác phamthanhbinh.
Em dùng thử đoạn lisp trên thì cũng thấy báo lỗi là:

Command: clb
Select objects: 1 found
Select objects: ; error: bad argument type: lentityp nil

Bác xem giúp em bị lỗi ở chỗ nào nhé. Với lại em thấy đoạn này cũng đang chỉ chuyển Block về layer "Block" còn các đối tượng trong block đó vẫn là layer "cũ" của nó. Chắc do em diễn đạt chưa được rõ. Em gửi kèm File lên đây bác xem có rõ hơn không và giúp em với nhé!
http://www.cadviet.c...ock_layer_1.dwg

Hề hề hề,
Lỗi là do bạn pick chưa trúng đối tượng mà thôi.
Lisp đã đổi tất cả các đối tượng con trong block,( kể cả là các block con) về layer block rồi bạn ạ..
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 July 2012 - 10:43 AM

Cảm ơn anh Ket.
Em mới tìm thấy đoạn lisp của anh bên xaydungit có tác dụng chuyển layer của tất cả các đối tượng trong block về Layer hiện hành. Đoạn lisp đó em copy về và save dưới dạng .LSP như sau ạ.
http://www.cadviet.c...10072_coblk.lsp
Em dự định là sẽ dùng đoạn lisp này để áp dụng cho ý định của mình. Nhưng khi add vào Cad thì nó báo lỗi là
Command: aq
APPLOAD CoBlk.Lsp successfully loaded.
Command: ; error: bad argument type: consp "INSERT".
Anh xem em copy có lỗi gì không. Hoặc anh rảnh thì Post đoạn lisp mà anh nói cho em xin với nhé.
Thanks anh nhiều nhiều ạ!

Nếu bạn dùng lisp mình post thì vui lòng kèm theo cả link nữa để mình dò ^^
Còn lisp trên thì bị thiếu mất dấu '
Bạn thêm dấu ' vào trước đoạn này : ((0 . "INSERT"))
  • 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


#20 quickandfine

quickandfine

    biết lệnh copy

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

Đã gửi 20 July 2012 - 11:24 AM

Nếu bạn dùng lisp mình post thì vui lòng kèm theo cả link nữa để mình dò ^^
Còn lisp trên thì bị thiếu mất dấu '
Bạn thêm dấu ' vào trước đoạn này : ((0 . "INSERT"))

Chào anh Ket.
Đoạn lisp mà em tìm được nằm ở link này ạ:
http://xaydungit.vn/...Layer-hiện-hành
Em đã thêm dấu ' như anh nói và đoạn lisp đã chạy được. Nhưng em nhờ anh thêm chút nữa ạ.
1- Em chỉ muốn chuyển layer thôi chứ không muốn chuyển màu của các đối tượng (Cả Block và đối tượng trong Block)
2- Thay vì chuyển về layer hiện hành, có thể chuyển về layer tên là "Block". (cái này chỉ là ý chủ quan của em thôi, không thì em sẽ chọn layer Block làm hiện hành cũng được ạ.)
3- Có 2 tùy chọn khi chuyển là: a/- Tất cả Block trong bản vẽ đều được chuyển Layer (ưu tiên cái này) và b/- Chọn một hoặc một số Block cần chuyển layer.
Em xin cảm ơn nhiều ạ!
  • 0