Chuyển đến nội dung
Diễn đàn CADViet
emhoccad

Lisp đổi màu đối tượng trong Block

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

E đang có rất nhiều Bloc cần đổi màu đối tượng bên trong nó.

cần lisp đổi các màu như sau:

- màu xanh --> trắng

- màu vàng--> màu xanh nước biển

Sau khi đổi xong Block (Cad ko cho đổi tên giống nhau trong cùng bản vẽ) vẫn giữ được tên như cũ, ảnh minh họa và file bản vẽ tham khảo

 

 

 

E cảm ơn các bác ah.

 

 

ảnh.png

doimaublock.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
7 giờ trước, emhoccad đã nói:

E đang có rất nhiều Bloc cần đổi màu đối tượng bên trong nó.

cần lisp đổi các màu như sau:

- màu xanh --> trắng

- màu vàng--> màu xanh nước biển

Sau khi đổi xong Block (Cad ko cho đổi tên giống nhau trong cùng bản vẽ) vẫn giữ được tên như cũ, ảnh minh họa và file bản vẽ tham khảo

 

 

 

E cảm ơn các bác ah.

 

 

ảnh.png

doimaublock.dwg

Hàng về chủ thớt test nhé. ^_^

(defun c:test  (/ ss e blk doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (if
    (setq ss (ssget ":L" '((0 . "INSERT"))))
     (repeat (setq i (sslength ss))
       (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
       (setq blk (vla-item (vla-get-blocks doc) (vla-get-effectivename e)))
       (vlax-for x  blk
         (cond
           ((= (vlax-get x 'layer) "2")
            (vla-put-layer x "4")
            )
           ((= (vlax-get x 'layer) "3")
            (vla-put-layer x "7")
            )
           
           )         
         )
       )
     )
  (vla-regen doc acallviewports)
  (princ)
  )

 

  • 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
16 giờ trước, Bee đã nói:

Hàng về chủ thớt test nhé. ^_^


(defun c:test  (/ ss e blk doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (if
    (setq ss (ssget ":L" '((0 . "INSERT"))))
     (repeat (setq i (sslength ss))
       (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
       (setq blk (vla-item (vla-get-blocks doc) (vla-get-effectivename e)))
       (vlax-for x  blk
         (cond
           ((= (vlax-get x 'layer) "2")
            (vla-put-layer x "4")
            )
           ((= (vlax-get x 'layer) "3")
            (vla-put-layer x "7")
            )
           
           )         
         )
       )
     )
  (vla-regen doc acallviewports)
  (princ)
  )

 

Tuyệt với ông mắt trời em tặng bác 1 like 

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

Có duy nhất cái Block này viền ngoài màu Green nó có layer "Outline" ko đổi sang được Layer màu trắng bác ah. 

 

Bác giúp e sửa lisp cứ màu xanh là chuyển hết sang layer "0" nhé

 

image.png.e9442684f43627011592652109a2c961.png

Block mau.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
26 phút trước, emhoccad đã nói:

Có duy nhất cái Block này viền ngoài màu Green nó có layer "Outline" ko đổi sang được Layer màu trắng bác ah. 

 

Bác giúp e sửa lisp cứ màu xanh là chuyển hết sang layer "0" nhé

 

image.png.e9442684f43627011592652109a2c961.png

Block mau.dwg

Đổi về Layer 0 thì nó lại theo màu layer 4.

(defun c:test  (/ ss e blk doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (if
    (setq ss (ssget ":L" '((0 . "INSERT"))))
     (repeat (setq i (sslength ss))
       (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
       (setq blk (vla-item (vla-get-blocks doc) (vla-get-effectivename e)))
       (vlax-for x  blk
         (cond
           ((= (vlax-get x 'layer) "2")
            (vla-put-layer x "4")
            )
           ((= (vlax-get x 'layer) "3")
            (vla-put-layer x "7")
            )
           ((= (vlax-get x 'Color) 3)
            (vla-put-color x 256)
            (vla-put-layer x "0")
            )           
           )         
         )
       )
     )
  (vla-regen doc acallviewports)
  (princ)
  )

 

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 phút trước, Bee đã nói:

Đổi về Layer 0 thì nó lại theo màu layer 4.


(defun c:test  (/ ss e blk doc)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (if
    (setq ss (ssget ":L" '((0 . "INSERT"))))
     (repeat (setq i (sslength ss))
       (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
       (setq blk (vla-item (vla-get-blocks doc) (vla-get-effectivename e)))
       (vlax-for x  blk
         (cond
           ((= (vlax-get x 'layer) "2")
            (vla-put-layer x "4")
            )
           ((= (vlax-get x 'layer) "3")
            (vla-put-layer x "7")
            )
           ((= (vlax-get x 'Color) 3)
            (vla-put-color x 256)
            (vla-put-layer x "0")
            )           
           )         
         )
       )
     )
  (vla-regen doc acallviewports)
  (princ)
  )

 

 

Vâng ổn quá rồi thank bác chúc bác vui vẻ hp

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

E làm phiền bác lần cuối,  mong bác trợ giúp

Vẫn là xử lý bock đó giờ em muốn thay đổi thêm phần chiều dài các đoạn có màu xanh đó.

Có 2 điểm là giao nhau và điểm tự do,

bên nào tự do thì kéo dài hoặc ngắn điểm đó để tổng chiều dài cả đoạn là 150mm.

 

image.thumb.png.953b10ec0f34d79f03ba33d893fca66b.png

Block mau+doi chieu dai.dwg

  • Vote giảm 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
3 giờ trước, emhoccad đã nói:

E làm phiền bác lần cuối,  mong bác trợ giúp

Vẫn là xử lý bock đó giờ em muốn thay đổi thêm phần chiều dài các đoạn có màu xanh đó.

Có 2 điểm là giao nhau và điểm tự do,

bên nào tự do thì kéo dài hoặc ngắn điểm đó để tổng chiều dài cả đoạn là 150mm.

 

image.thumb.png.953b10ec0f34d79f03ba33d893fca66b.png

Block mau+doi chieu dai.dwg

Nếu chỉ còn 1 block thì chỉnh tay sẽ nhanh hơn viết lisp. Nếu muốn tổng quát hơn thì gửi bản vẽ cụ thể vì có rất nhiều trường hợp khác xảy ra. Viết xong block này lại phát sinh cái khác thì nó vô cùng lắm. Sẽ phải làm vài cái vòng lặp 1 line màu 4 với các đối tượng còn lại line màu xanh 3 chứ không còn đơn giản như thay màu nữa đâu chủ thớt nhé. Nếu muốn nhiều hơn nữa thì có thể inbox mình.

 

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
31 phút trước, Bee đã nói:

Nếu chỉ còn 1 block thì chỉnh tay sẽ nhanh hơn viết lisp. Nếu muốn tổng quát hơn thì gửi bản vẽ cụ thể vì có rất nhiều trường hợp khác xảy ra. Viết xong block này lại phát sinh cái khác thì nó vô cùng lắm. Sẽ phải làm vài cái vòng lặp 1 line màu 4 với các đối tượng còn lại line màu xanh 3 chứ không còn đơn giản như thay màu nữa đâu chủ thớt nhé. Nếu muốn nhiều hơn nữa thì có thể inbox mình.

 

Vâng làm phiền bác quá.

Cái đổi màu kia đã tốt lắm rồi ạ.

Thanks bác

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

×