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

[Yêu cầu] lisp lọc tất cả các đối tượng theo màu

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

em đang cần 1 lisp lọc tất cả đối tượng theo mầu (không phân biệt bylayer và mầu), nếu có thể thì trước khi chọn mầu có lựa chọn là có chọn mầu theo lớp hay không, hoặc chọn tất cả đối tượng có cùng 1 mầu không phân biệt có cùng 1 lớp hay không. và giữ lại các đối tượng đó trên bản vẽ các đối tượng không cùng mầu ẩn hết đi. móng các pác giúp đỡ, thankssssssssss :D

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

Bạn xem thử lisp này có đúng ý bạn không?

http://www.cadviet.com/upfiles/3/lisp_loc_layer.lsp

cảm ơn ban đã trả lời . nhưng mình download về không dùng được lips. Mình thấy bạn tổng hợp nhiều lips trong cùng 1 file quá bạn có thể bỏ bớp đi và up lại lips được ko? thanksssss

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 dow về bình thường mà bạn. Còn trong đó là do co nhieu hàm chung thôi. Lệnh chính là: loc, tai, chu_so, chu_coso

1- Loc: dùng để lọc các đối tượng theo đối tượng mẫu ( kiểu , lớp, đường, màu)

2- Tai:thực hiện lệnh cad theo 1 số tiêu chuẩn lọc ( Move, Rotate, Copy, Scale, CHange, Mirror, Erase)

3- Chu_so: tách chữ và số ra các lớp riêng biệt

4- Chu_coso: tách lấy chữ có số bắt đầu.

  • 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

Cần gì phải Lisp hả bạn. bạn gõ lệnh Filter, chọn Color và add to list sau đó apply và bấm P. Thế là bạn chọn được toàn bộ đối tượng có màu mong muốn rồi!

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

 

em đang cần 1 lisp lọc tất cả đối tượng theo mầu (không phân biệt bylayer và mầu), nếu có thể thì trước khi chọn mầu có lựa chọn là có chọn mầu theo lớp hay không, hoặc chọn tất cả đối tượng có cùng 1 mầu không phân biệt có cùng 1 lớp hay không. và giữ lại các đối tượng đó trên bản vẽ các đối tượng không cùng mầu ẩn hết đi. móng các pác giúp đỡ, thankssssssssss biggrin.gif

Theo mình, Quick Select và Filter hoàn toàn không đáp ứng được nhu cầu. Mình xin diễn giải nhu cầu của chủ thớt như sau:

- Tự động tìm kiếm xem trên bản vẽ có bao nhiêu màu (bao gồm cả màu đối tượng và màu của layer). Giả sử có 2 màu là 1 và 2.

- Tạo lớp Color001 và lọc tất cả các đối tượng có màu số 1, bao gồm

     + Tất cả đối tượng có màu 1.

     + Tất cả đối tượng có màu bylayer nằm trên layer có màu 1.

     + Tất cả đối tượng con trong Block đáp ứng 2 điều kiện trên.

        -> sau đó chuyển về tất cả về lớp Color001.

- Tiếp tục cho lớp Color002.

- Kết quả: Sau khi thực hiện xong Lisp, màu của bản vẽ không có gì thay đổi, trong bản vẽ có bao nhiêu màu thì sẽ có bấy nhiêu layer được tạo ra và chứa đúng đối tượng có màu đó. Riêng với đối tượng Dimension mình chưa biết phải làm thế nào, vì nó là đối tượng phức và bản thân nó có thể có nhiều màu khác nhau (cho mũi tên, text và đường gióng nữa).

 

Đây là yêu cầu, còn thực hiện nó không hề đơn giản chỉ một câu lệ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

Ll đào sâu quá ^^ Cái bạn diễn giải mình thấy chả giống ý chủ 2pic tẹo nào :)) Người ta muốn isolate object thôi, tạo với chuyển layer j đâu :) xét các đối tượng đơn thì hiện tại quá đơn giản, xét các đối tượng phức (mline, mtext, dim, leader ...) thì mình k nhầm là chưa làm đc. Theo chiều ngược lại, việc tách đối tượng đơn ra khỏi đối tượng phức cũng k ý nghĩa trong thao tác, vì thao tác select sau đó k thể chọn mỗi nested object được => chủ third chắc chỉ đề cập đối tượng mức một ^^

p/s : lisp đổi layer theo màu ket nhớ k nhầm thì bác giabach mần rồi

  • 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

hihi.. Hơi suy diễn chủ quan một tý! :P

Tại vì mình cũng đang có nhu cầu như vậy nên ... suy đoán mà! Các đối tượng phức (mline, mtext, dim, leader ...) chưa bàn, nhưng với block, giả sử đang xét màu đỏ, mà block nào đó chứa vài đối tượng màu đỏ, mình muốn đưa các đối tượng con đó (nằm bên trong block) vào lớp Color001 liệu có được không 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

hic.. đúng là lực bất tòng tâm, kiến thức mình nông cạn quá, không đủ sức để làm việc này rồi. Các hàm (vla- với mình vẫn còn là điều bí ẩn, thấy thì rất hay và mạnh mẽ nhưng chưa biết làm thế nào để dùng đượ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

Lạ hầy, k có tjan viết n mình nghĩ thế này, Bạn cứ viết một hàm con duyệt list ename và trả về kết quả (( 1 (e1 e2 e3...))(2 (e1 e2 e3 ...))...). Trong đó 1,2 là màu, e1 e2 .. là list ename hoặc vlaobject mang màu đó.

Áp dụng hàm này với các đối tượng trong block (2 vòng vlax-for lồng nhau - tham khảo ở các bài viết chuyển màu đối tượng trong block hoặc lisp c:clear ketxu viết lâu r k nhớ rõ ) và với các đối tượng bên ngoài.

Sau đó là làm 2 phát mapcar lồng nhau với list kết quả (tại layer theo car item và mapcar vla-put-layer cho sub list tương ứng) -> sẽ thấy nhàn vô cùng ^^

Còn với ý định thay đổi layer các thành phần của dimension thì mình thấy chả lợi gì cả, đừng lao vào nó chi cho mệt. có vào thì phải vào table của dimensionstyle cơ :))

  • 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

Theo mình, Quick Select và Filter hoàn toàn không đáp ứng được nhu cầu. Mình xin diễn giải nhu cầu của chủ thớt như sau:

- Tự động tìm kiếm xem trên bản vẽ có bao nhiêu màu (bao gồm cả màu đối tượng và màu của layer). Giả sử có 2 màu là 1 và 2.

- Tạo lớp Color001 và lọc tất cả các đối tượng có màu số 1, bao gồm

     + Tất cả đối tượng có màu 1.

     + Tất cả đối tượng có màu bylayer nằm trên layer có màu 1.

     + Tất cả đối tượng con trong Block đáp ứng 2 điều kiện trên.

        -> sau đó chuyển về tất cả về lớp Color001.

- Tiếp tục cho lớp Color002.

- Kết quả: Sau khi thực hiện xong Lisp, màu của bản vẽ không có gì thay đổi, trong bản vẽ có bao nhiêu màu thì sẽ có bấy nhiêu layer được tạo ra và chứa đúng đối tượng có màu đó. Riêng với đối tượng Dimension mình chưa biết phải làm thế nào, vì nó là đối tượng phức và bản thân nó có thể có nhiều màu khác nhau (cho mũi tên, text và đường gióng nữa).

 

Đây là yêu cầu, còn thực hiện nó không hề đơn giản chỉ một câu lệnh.

 

Lisp đây lisp đây.....

Lisp này chuyển tất tần tật các loại đối tượng trên bản vẽ (Model hay Layout đều chơi tất) có màu giống nhau về layer tương ứng với màu đó. (chả biết có chuyển được hết tất  cả các đối tượng không nhưng mà test thử nhiều loại đối tượng như Text, Qleader, Xline, Mline, Hatch v.v... thì OK rồi, Dimension và các đối tượng con trong block của bác LoveLisp cũng chuyển ngon lành luôn).

Các bác dùng xem có vấn đề gì không rồi cho ý kiến và nhớ đừng quên Like em đấy nhé.

http://www.cadviet.com/upfiles/3/71162_lisp_chuyen_doi_tuong_cung_mau_ve_cung_layer.lsp

;========LISP CHUYEN DOI TUONG CUNG MAU VE CUNG LAYER==========
;=================KANGKUNG 24/03/2013==========================
(defun C:KK()
  (vl-load-com)
  (command "UNDO" "BE")
  (vlax-for for-item (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
    (progn
      (if (= (vla-get-color for-item) 256)
	(setq color(cdr (assoc 62 (entget (TBLOBJNAME "LAYER" (vla-get-layer for-item))))))
	(setq color(vla-get-color for-item))
	)
      (if (= (tblsearch "Layer" (strcat "Color_" (rtos color 2 0))) nil)
	(progn
	  (command "LAYER" "N" (strcat "Color_" (rtos color 2 0)) "C" color (strcat "Color_" (rtos color 2 0)) "")
	  (vla-put-layer for-item (strcat "Color_" (rtos color 2 0)))
	  )
	(vla-put-layer for-item (strcat "Color_" (rtos color 2 0)))
	)
      )
    )
  (vlax-for for-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
    (vlax-for item (vla-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))) (vla-get-name for-item))
      (if (= (vlax-get-property item 'Color) 256)
	(setq color (cdr (assoc 62 (entget (TBLOBJNAME "LAYER" (vlax-get-property item 'Layer))))))
	(setq color (vlax-get-property item 'Color))
	)
      (if (= 0 color) (setq color 7))
      (if (= (tblsearch "Layer" (strcat "Color_" (rtos color 2 0))) nil)
	(progn
	  (command "LAYER" "N" (strcat "Color_" (rtos color 2 0)) "C" color (strcat "Color_" (rtos color 2 0)) "")
	  (vlax-put-property item 'Layer (strcat "Color_" (rtos color 2 0)))
	  )
	(vlax-put-property item 'Layer (strcat "Color_" (rtos color 2 0)))
	)
      )
    )
  (command "UNDO" "END")
  (princ)
  (alert "Well done!")
  )
(princ "\n                Written By KangKung\n")
(princ "\n           Nhap KK de chay chuong trinh\n")
  • 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

Đúng hay sai cứ Like cái đã. Bạn nhiệt tình quá, có nhiều mem thế này bảo sao CV k mạnh ^^

  • 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

Đúng hay sai cứ Like cái đã. Bạn nhiệt tình quá, có nhiều mem thế này bảo sao CV k mạnh ^^

Chuẩn rồi đấy. Két bấm like cho mỏi tay vào nhé.  :D  :D  :D

Đang lúc rỗi rải nên tranh thủ góp vui với anh em CV tí. Tỉ phú thời gian mà.

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ình hình ý của e trùng với bác chủ thớt. công ty em chuyên nội thất. và yêu cầu về bản vẽ toàn thể hiện trên 1 layer 0 , chỉ thay đổi màu bylayer ví dụ cánh tủ màu xanh, thân tủ màu trắng, v..v/. sau đó dựng max , mình muốn 1 lisp  có thể layiso theo màu để tiện . chứ không phải lisp chuyển các layer về cùng 1 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

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  

×