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

[Nhờ sửa lisp]Convert các đối tượng trong block về layer chính

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

;; Convert Layer cua cac doi tuong ben trong block (co the long nhau) ve cung Layer cua Block chinh. De Undo tat ca: dung lenh "U" + "Regen"
;; Doan Van Ha - CadViet.com - ngay 21/7/2013
(defun C:zz ( / doc blkname lay)
 (princ "\nChon cac Blocks...")
 (if (ssget '((0 . "INSERT")))
  (progn
   (vlax-for obj (vla-get-ActiveSelectionSet (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))))
    (setq blkname (vla-get-Name obj)
          lay (vla-get-Layer obj))
    (mapcar '(lambda(o) (vla-put-Layer o lay)) (Get_lst_Obj doc blkname)))
   (vla-Regen doc acActiveViewport))))
(defun Get_lst_Obj (doc blkname / lst)
 (vlax-for blk (vla-Item (vla-get-Blocks doc) blkname)
  (if (/= (vla-get-ObjectName blk) "AcDbBlockReference")
   (if (not (vl-position blk lst))
    (setq lst (cons blk lst)))
   (setq lst (append (Get_lst_Obj doc (vla-get-Name blk)) lst)))))

Tôi đang dùng lisp của bác @Doan Van Hamấy năm rất hiệu quả, nhưng hiện giờ gặp một vấn đề là nếu như đối tượng trong layer không để bylayer, mà để màu tự chọn, thì lisp này không đổi được màu của nó, chỉ đổi layer.

 

Nhờ các bác chỉnh sửa hộ lisp này để gõ lệnh thì các đối tượng trong layer chuyển được về hết bylayer hộ. 

 

Cám ơn rất nhiề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
10 giờ trước, nhimret đã nói:

;; Convert Layer cua cac doi tuong ben trong block (co the long nhau) ve cung Layer cua Block chinh. De Undo tat ca: dung lenh "U" + "Regen"
; Doan Van Ha - CadViet.com - ngay 21/7/2013
(defun C:zz ( / doc blkname lay)
 (princ "\nChon cac Blocks...")
 (if (ssget '((0 . "INSERT")))
  (progn
   (vlax-for obj (vla-get-ActiveSelectionSet (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))))
    (setq blkname (vla-get-Name obj)
          lay (vla-get-Layer obj))
    (mapcar '(lambda(o) (vla-put-Layer o lay)) (Get_lst_Obj doc blkname)))
   (vla-Regen doc acActiveViewport))))
(defun Get_lst_Obj (doc blkname / lst)
 (vlax-for blk (vla-Item (vla-get-Blocks doc) blkname)
  (if (/= (vla-get-ObjectName blk) "AcDbBlockReference")
   (if (not (vl-position blk lst))
    (setq lst (cons blk lst)))
   (setq lst (append (Get_lst_Obj doc (vla-get-Name blk)) lst)))))

Tôi đang dùng lisp của bác @Doan Van Hamấy năm rất hiệu quả, nhưng hiện giờ gặp một vấn đề là nếu như đối tượng trong layer không để bylayer, mà để màu tự chọn, thì lisp này không đổi được màu của nó, chỉ đổi layer.

 

Nhờ các bác chỉnh sửa hộ lisp này để gõ lệnh thì các đối tượng trong layer chuyển được về hết bylayer hộ. 

 

Cám ơn rất nhiều

Thử thay xem thế nào ^_^:

(mapcar '(lambda(o) (vla-put-Layer o lay)) (Get_lst_Obj doc blkname)))

thành:

(mapcar '(lambda(o) (vla-put-Layer o lay) (vla-put-color o 256)) (Get_lst_Obj doc blkname))

  • 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

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  

×