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

Nhờ viết Lisp đổi màu nhiều đối tượng khác nhau

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

Em có ý tưởng về 1 lisp như thế này mong các cao thủ giúp với:

- Layer1 màu mặc định là 1
- Layer2 màu mặc định là 2
- Có 6 đối tượng:
- ĐT 1 thuộc Layer1 màu by layer
- ĐT 2 thuộc Layer1 màu tuỳ ý
- ĐT 3 thuộc Layer1 màu 2
- ĐT 4 thuộc Layer2 màu by layer
- ĐT 5 thuộc Layer2 màu tuỳ ý
- ĐT 6 thuộc Layer2 màu 1

* Việc muốn làm là chọn toàn bộ 6 đối tượng và dùng lệnh để cho đối tượng thuộc layer nào thì về đúng màu mặc định đã chọn của layer đấy nhưng không phải là by layer
Ví dụ: 
- ĐT 2, ĐT 3 thuộc Layer1 màu khác màu 1 thì đổi màu về 1
- ĐT 1 thuộc Layer1 màu by layer thì đổi màu về màu 1 chứ không đổi về màu by layer
- ĐT thuộc Layer2 cũng tương tự

Lưu ý: chọn tất cả các đối tượng cùng 1 lúc chứ không chọn riêng từng đối tượng thuộc từng layer

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

Theo nội dung của bạn, tôi tóm lược lại một chút.

Giả sử việc của bạn là chọn 1 mớ các đối tượng cùng Layer1, việc còn lại là bạn đổi nó sang màu 1.

Nếu bạn chỉ đơn lẻ thao tác < 10 Layer thì tôi nghĩ bạn học cách sử dụng Filter cũng khá hiệu quả.

Còn nếu bạn thao tác với số lượng lớn layer thì sẽ dùng Lisp. :)) Tất nhiên có thể bạn sẽ cần ủng hộ vài ly cà phê cho người viết, thời tiết nóng quá mà.

Video sử dụng Filter nếu bạn cần học :

 

 

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

Em có ý tưởng về 1 lisp như thế này mong các cao thủ giúp với:

- Layer1 màu mặc định là 1
- Layer2 màu mặc định là 2
- Có 6 đối tượng:
- ĐT 1 thuộc Layer1 màu by layer
- ĐT 2 thuộc Layer1 màu tuỳ ý
- ĐT 3 thuộc Layer1 màu 2
- ĐT 4 thuộc Layer2 màu by layer
- ĐT 5 thuộc Layer2 màu tuỳ ý
- ĐT 6 thuộc Layer2 màu 1

* Việc muốn làm là chọn toàn bộ 6 đối tượng và dùng lệnh để cho đối tượng thuộc layer nào thì về đúng màu mặc định đã chọn của layer đấy nhưng không phải là by layer
Ví dụ: 
- ĐT 2, ĐT 3 thuộc Layer1 màu khác màu 1 thì đổi màu về 1
- ĐT 1 thuộc Layer1 màu by layer thì đổi màu về màu 1 chứ không đổi về màu by layer
- ĐT thuộc Layer2 cũng tương tự

Lưu ý: chọn tất cả các đối tượng cùng 1 lúc chứ không chọn riêng từng đối tượng thuộc từng layer

Rãnh rỗi viết tổng quát cho các layer tùy ý và màu tùy ý:

(defun C:cbc (/ ent layermau lstdt)
(or (and mau (= (type mau) 'int)) (setq mau 3))
(setq mau (cond ((getint (strcat "\nNhap mau can chuyen (0...256) <" (itoa mau) ">:"))) (mau)))
(setq ent (car (LM:SelectIf "\nChon doi tuong lay layer mau." (lambda (x) (/= " " (cdr (assoc 0 (entget (car x)))))) entsel nil)))
(setq layermau (vla-get-layer (vlax-ename->vla-object ent)))
(prompt "\nChon vung:")
(setq lstdt (acet-ss-to-list (ssget (list (cons 8 layermau)))))
(foreach dt lstdt
(vla-put-color (vlax-ename->vla-object dt) mau)
)
(princ)
);
(defun LM:SelectIf ( msg pred func keyw / sel )
(setq pred (eval pred))
(while
(progn
(setvar 'ERRNO 0)
(if keyw (apply 'initget keyw))
(setq sel (func msg))
(cond
((= 7 (getvar 'ERRNO)) (princ "\nMissed, Try again."))
((eq 'STR (type sel)) nil)
((vl-consp sel) (if (and pred (not (pred sel))) (princ "\nInvalid Object Selected."))))))
sel)

 

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

Theo mình thấy thì hình như không đúng ý chủ thớt.

Mình hiểu ý chủ thớt như sau (Không biết có đúng không?):

Chỉ là lấy màu của layer gán cho các đối tượng nằm trong layer đó, sau khi gán màu cho các đối tượng thì các đối tượng được gán màu không  phụ thuộc vào layer nữa.

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

Theo mình thấy thì hình như không đúng ý chủ thớt.

Mình hiểu ý chủ thớt như sau (Không biết có đúng không?):

Chỉ là lấy màu của layer gán cho các đối tượng nằm trong layer đó, sau khi gán màu cho các đối tượng thì các đối tượng được gán màu không  phụ thuộc vào layer nữa.

Sửa lại theo như bạn hiểu luôn

DDC: chuyển tất cả các đối tượng về màu của lớp (không phải by layer)

DDL: chuyển tất cả các đối tượng về màu của lớp By layer

(defun C:DDC (/ ent layermau lstdt)
(setq lstlayer (ax:layer-list))
(foreach layer lstlayer
(setq lstdt (acet-ss-to-list (ssget "X" (list (cons 8 (car layer))))))
(foreach dt lstdt

(vla-put-color (vlax-ename->vla-object dt) (cadr layer))
)
)
(princ)
);
(defun C:DDL (/ ent layermau lstdt)
(setq lstlayer (ax:layer-list))
(foreach layer lstlayer
(setq lstdt (acet-ss-to-list (ssget "X" (list (cons 8 (car layer))))))
(foreach dt lstdt

(vla-put-color (vlax-ename->vla-object dt) 256)
)
)
(princ)
)
(vl-load-com)
;;; Layer list
;;;
;;; By Jimmy Bergmark
;;; Copyright (C) 1997-2006 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: info@jtbworld.com
;;; 2000-03-15
;;;
(defun ax:layer-list (/ lst layer colors color lw)
  (setq colors '("Red" "Yellow" "Green" "Cyan" "Blue" "Magenta" "White"))
  (vlax-for layer (vla-get-Layers
                    (vla-get-ActiveDocument
                      (vlax-get-acad-object)
                    )
                  )
    (setq color (vla-get-color layer))
    (setq lst (cons
                (list
                  (vla-get-name layer)
                  color
                ) lst))
  )
  (vl-sort lst
           (function (lambda (e1 e2)
                       (< (strcase (car e1)) (strcase (car e2)))
                     )
           )
  ) 
)

 

  • Vote tăng 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

×