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

[Yêu Cầu]Lisp chuyển Layer về thành Bylayer

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

Vấn đề này chắc được nhiều người quan tâm, với tôi khi nhận được bản vẽ người khác quản lý nét theo màu, không phù hợp với cách quản lý nét theo layer của tôi, tôi buộc phải chuyển màu tất cả các đối tượng trong bản vẽ về "BYLAYER" mã màu là 256. Với một đối tượng đồ họa bất kỳ nó đều có thuộc tính màu, và hai thuộc tính cơ bản nữa là kiểu đường và độ dày nét. Nếu các thuộc tính đều đặt là "BYLAYER" thì giá trị của các thuộc tính đó là do Layer quy định, ví dụ màu của đối tượng có thuộc tính màu là "BYLAYER" sẽ chính là màu Layer của đối tượng đó. Khi chúng ta thay đổi màu của layer thì các đối tượng trong layer đó có thuộc tính màu là "BYLAYER" cũng có màu thay đổi theo. Tương tự cho các thuộc tính khác.

Khi vẽ một đối tượng mới, đối tượng đó sẽ mang các thuộc tính màu là màu hiện hành, xem ở thanh Properties, có layer là layer hiện hành. Chúng ta cũng có thể thay đổi bằng cách chọn đối tượng và gán layer chọn trên thanh layer, gán màu, ...

Vấn đề là các đối tượng chứa trong block thì chúng ta không thể chọn block và gán màu được, các đối tượng sẽ không đổi màu trừ những đối tượng trong block đó có màu là "bylayer" và thuộc layer "0", hoặc đối tượng thuộc layer bất kỳ mà có màu là "Byblock" (mã 0). Ví dụ tôi có một đường thẳng có màu là byblock nằm trong block1, block1 lại thuộc layer3 có màu là 3. Nếu đổi màu block1 thành màu 5, thì đường thẳng trên hiển thị màu 5, nếu đổi màu block1 là "Bylayer" thì đường thẳng trên hiển thị màu 3. Các thuộc tính khác cũng tương tự.

Kết luận lại là màu Byblock, Bylayer cũng là một màu nhưng là tham biến, nó lấy màu theo layer hoặc block chứa đối tượng. Hay nói cách khác màu của đối tượng có thuộc tính màu này được quy định bởi layer hay block.

Qua đây có các cao thủ hãy viết 1 lisp mà có thể chuyển hết màu của tất cả các đối tượng, các loại đối tượng về màu bylayer. Lưu ý là trong block lại có thể có 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

Vấn đề bạn đưa ra người ta giải quyết từ lâu lắc rồi mà. Search chữ Bylayer Lisp chắc ra hàng đống

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

 

Sửa lại:


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/52484-yeu-cau-lisp-chuyen-layer-ve-thanh-bylayer/
(defun c:dmla ( / ss)
(command "undo" "begin")
(princ "\nChon cac doi tuong can thay doi...")
(setq ss (ssget))
(command "change" ss "" "p" "c" "bylayer" "LT" "bylayer" "LW" "bylayer" "" "")
(command "undo" "end")
(princ))

 

Mr Ha có thể sửa lsp này chút được không ah?

Hiện tại khi thực hiện lsp thì chọn đối tượng nào thì đối tượng đó được đưa về màu bylayer.

Giờ sửa thành khi chọn đối tượng thuộc một layer nào đó rồi tất cả các đối tượng thuộc layer đó được đưa về màu bylayer.

 

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

 


 

Mr Ha có thể sửa lsp này chút được không ah?

Hiện tại khi thực hiện lsp thì chọn đối tượng nào thì đối tượng đó được đưa về màu bylayer.

Giờ sửa thành khi chọn đối tượng thuộc một layer nào đó rồi tất cả các đối tượng thuộc layer đó được đưa về màu bylayer.

 

Thanks!

Đây bạn!

 

(defun c:dmla1 ( / ss)
(command "undo" "begin") (setq cmd (getvar 'cmdecho)) (setvar 'cmdecho 0)
(while (setq ent (car (entsel "\nChon doi tuong mau...")))
 (setq lay (cdr (assoc 8 (entget ent))))
 (setq ss (ssget "X" (list (cons 8 lay))))
 (command "change" ss "" "p" "c" "bylayer" "LT" "bylayer" "LW" "bylayer" ""))
 (setvar 'cmdecho cmd) (command "undo" "end")
(princ))
  • Vote tăng 2

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

 

Đây bạn!

 

(defun c:dmla1 ( / ss)
(command "undo" "begin") (setq cmd (getvar 'cmdecho)) (setvar 'cmdecho 0)
(while (setq ent (car (entsel "\nChon doi tuong mau...")))
 (setq lay (cdr (assoc 8 (entget ent))))
 (setq ss (ssget "X" (list (cons 8 lay))))
 (command "change" ss "" "p" "c" "bylayer" "LT" "bylayer" "LW" "bylayer" ""))
 (setvar 'cmdecho cmd) (command "undo" "end")
(princ))

 

Tuyệt vời!

Cám ơn bạn 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

 

Mình không rành nhiều về lisp nên chỉ biết viết cho bạn cái lệnh này,bạn dùng thử xem có được không

(defun c:dmla ()
(command "undo" "begin")
(command "change" "all" "" "p" "c" "bylayer" "LT" "bylayer" "LW" "bylayer" "" "")
(command "undo" "end")
(princ)
)

Ai giúp sửa lisp này thành lisp có thể chuyển cả màu của mũi tên (vẽ bằng lệnh qleader)  và màu của đo kích thước  thành bylayer với (cả thân mũi tên và đầu mũi tên đều về bylayer nha, hình bên dưới do mình không biết cách chuyển màu của đầu mũi tên về bylayer nên vẫn giữ màu đỏ).

127110_ketquadim__copy.jpghttp://www.cadviet.com/upfiles/3/127110_dim.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

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  

×