Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Ẩn hiện đối tượng theo màu


  • Please log in to reply
20 replies to this topic

#1 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2013 - 09:55 AM

Em đang cần 1 lisp ẩn hiện các đối tượng theo màu( giống như lisp ẩn hiện theo layer), như là cùng màu thì hiện,hoặc ẩn đấy các bác, các bác giúp đỡ em với!

Em có tham khảo http://www.cadviet.c...tuong-theo-mau/ nhưng lisp này chỉ chọn vào đối tượng sau đó em không thể làm việc tiếp với các đối tượng đã được chọn được( em ấn cách hoặc enter là nó bỏ chọn luôn@@)

Mong các bác giúp đỡ em,


  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 November 2013 - 10:06 AM

Màu đối tượng chia ra làm 2 loại : màu do thuộc tính riêng của đối tượng - màu do layer của đối tượng. Ý bạn nhắc đến cái nào, hay cả 2 ?


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2013 - 10:16 AM

Màu đối tượng chia ra làm 2 loại : màu do thuộc tính riêng của đối tượng - màu do layer của đối tượng. Ý bạn nhắc đến cái nào, hay cả 2 ?

 

màu do layer, mà cả 2 càng tốt bác à?


  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 November 2013 - 10:32 AM

Ẩn trên toàn bản vẽ hay vùng bạn chọn ? Có tính các đối tượng trong block hay không ?


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 November 2013 - 10:38 AM

Với lại ở link cũ bannj gửi bạn nên đọc kỹ đoạn này :)

Trongbộ này của mình có lệnh CHOND sẽ lên bảng rất nhiều kiểu chọn.
-Khi chọn xong kết thúc lệnh thno1o1 báo ra số lượng chọn được. Bạn muốn áp dụng thao tác gì với nhòm đó thì lựa chọn p là được.
-Lồng việc chọn này trong lệnh cad thì khi chọn đối tượng gỏ (chon) Lưu ý có cả hai dấu ngoặc dơn và chử chon nhé. nó sẽ nhảy qua lisp chọn của mình chọn xong thì gỏ chử p phát nó thêm tập chọn này vào lệnh đang thực hiện của cad. 


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2013 - 11:02 AM

Mình muốn trên toàn bộ bản vẽ, mà chọn xong mình muốn làm việc được luôn với những đối tượng mình vừa chọn xong ấy


  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 November 2013 - 11:04 AM

Thế bạn đọc lại bài #5 đi :) Khi chọn các đối tượng được rồi, muốn làm gì thì cứ đánh lệnh, lúc yêu cầu chọn đối tượng thì ấn P :) 

Mà mình thấy lạ quá, bạn phân biệt được chọn đối tượng theo một tiêu chí khác với Isolate nó không ??


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2013 - 11:05 AM

Với lại ở link cũ bannj gửi bạn nên đọc kỹ đoạn này :)

đúng rồi bác, em chưa đọc phần đấy, vì chỉ muốn riêng cái lisp  thôi, chứ em ko muốn down cả bộ về, tại vì nó lắm lựa chọn lắm


  • 0

#9 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2013 - 11:14 AM

Thế bạn đọc lại bài #5 đi :) Khi chọn các đối tượng được rồi, muốn làm gì thì cứ đánh lệnh, lúc yêu cầu chọn đối tượng thì ấn P :)

Mà mình thấy lạ quá, bạn phân biệt được chọn đối tượng theo một tiêu chí khác với Isolate nó không ??

em muốn cái lisp như này này bác, nhưng nó là đối với màu! 

http://www.cadviet.c...34000_1_2_3.lsp


  • 0

#10 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 November 2013 - 01:02 PM

Nếu k ai viết thì 12h đêm mình về viết cho bạn ^^


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#11 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 November 2013 - 02:15 PM

@

 

Nếu k ai viết thì 12h đêm mình về viết cho bạn ^^

em cảm ơn bác nhiều nhiều :D  :D


  • 0

#12 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 November 2013 - 09:28 AM

Tí quên ^^ Của bạn đây. Mình quick code iso 1 màu thôi nhé :)  1 cái CISO và 1 cái CUNISO

(defun get_col(e)(setq e (entget e))(cdr (cond ((assoc 62 e))((assoc 62 (tblsearch "layer"  (cdr (assoc 8 e))))))))
(defun C:ciso(/ e col s o)
	(while (not (setq e (nentsel "\nSelect object :"))))
	(cond
		(
			(and
				(setq col (get_col  (car e)))
				(setq s (ssget "X") i -1)
			)
			(while (setq o (ssname s (setq i (1+ i))))
				(if (/= (get_col o) col)(entmod (append (entget o) (list (cons 60 1)))))
			)
		)
	)
	(princ)
)
(defun c:cuniso(/ s o)
(setq s (ssget "_X" '((60 . 1))))
(or
	(and acet-ss-visible (acet-ss-visible s 0))
	(while (setq o (ssname s (setq i (1+ i))))(entmod (append (entget o) (list (cons 60 0)))))
)

(prompt (strcat "Hi\U+1EC7n l\U+1EA1i c\U+00E1c \U+0111\U+1ED1i t\U+01B0\U+1EE3ng \U+0111\U+00E3 b\U+1ECB \U+1EA9n :" (vl-princ-to-string (sslength s))))
(princ)
)
			

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 28 November 2013 - 02:31 PM

Tí quên ^^ Của bạn đây. Mình quick code iso 1 màu thôi nhé :)  1 cái CISO và 1 cái CUNISO

(defun get_col(e)(setq e (entget e))(cdr (cond ((assoc 62 e))((assoc 62 (tblsearch "layer"  (cdr (assoc 8 e))))))))
(defun C:ciso(/ e col s o)
	(while (not (setq e (nentsel "\nSelect object :"))))
	(cond
		(
			(and
				(setq col (get_col  (car e)))
				(setq s (ssget "X") i -1)
			)
			(while (setq o (ssname s (setq i (1+ i))))
				(if (/= (get_col o) col)(entmod (append (entget o) (list (cons 60 1)))))
			)
		)
	)
	(princ)
)
(defun c:cuniso(/ s o)
(setq s (ssget "_X" '((60 . 1))))
(or
	(and acet-ss-visible (acet-ss-visible s 0))
	(while (setq o (ssname s (setq i (1+ i))))(entmod (append (entget o) (list (cons 60 0)))))
)

(prompt (strcat "Hi\U+1EC7n l\U+1EA1i c\U+00E1c \U+0111\U+1ED1i t\U+01B0\U+1EE3ng \U+0111\U+00E3 b\U+1ECB \U+1EA9n :" (vl-princ-to-string (sslength s))))
(princ)
)
			

em chạy sao nó nặng thế bác, nó thực hiện lệnh lâu lắm bác, đơ 1 lúc rồi đc@@!


  • 0

#14 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 November 2013 - 03:54 PM

Mình đang duyệt qua tất cả các đối tượng của bản vẽ để kiểm tra màu, từ đó mới ẩn các đối tượng k đúng màu đi. Có thể điều này làm quá trình chạy lâu, k mượt như check layer (với bản vẽ nặng). Tạm thời chưa muốn thay đổi ^^


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#15 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 November 2013 - 04:38 PM

Chui vào bên trong xem tốc độ có ổn hơn không. Mình sử dụng VL

 

(defun c:cisov(/ _table _vlacol lays adoc col)
	(vl-load-com) 
	(defun _table (s / d r)
		(while (setq d (tblnext s (null d)))
			(setq r (append  (list (cons (cdr (assoc 2 d)) (cdr (assoc 62 d)))) r))
		)	
	)
	(defun _vlacol(obj lays / col)(if (/= (setq col (vla-get-color obj)) 256) col (cdr (assoc (vla-get-layer obj) lays))))
	(setq lays (_table "LAYER"))
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
	(setq col (_vlacol (vlax-ename->vla-object (car(entsel))) lays)) 
	(vla-startundomark adoc)
	(vlax-for block (vla-get-blocks adoc)     
		  (vlax-for   ent block 
			(if (/= (_vlacol ent lays) col) (vla-put-visible ent 0))
		)
	)
	(vla-endundomark adoc)
)

(defun c:cunisov(/ adoc)
	(vl-load-com) 	
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)))	
	(vlax-for block (vla-get-blocks adoc)     
		  (vlax-for   ent block 
			(vla-put-visible ent 1)
		)
	)
)

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#16 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 28 November 2013 - 10:58 PM

Chui vào bên trong xem tốc độ có ổn hơn không. Mình sử dụng VL

 

(defun c:cisov(/ _table _vlacol lays adoc col)
	(vl-load-com) 
	(defun _table (s / d r)
		(while (setq d (tblnext s (null d)))
			(setq r (append  (list (cons (cdr (assoc 2 d)) (cdr (assoc 62 d)))) r))
		)	
	)
	(defun _vlacol(obj lays / col)(if (/= (setq col (vla-get-color obj)) 256) col (cdr (assoc (vla-get-layer obj) lays))))
	(setq lays (table "LAYER"))
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
	(setq col (get_vlacol (vlax-ename->vla-object (car(entsel))) lays)) 
	(vla-startundomark adoc)
	(vlax-for block (vla-get-blocks adoc)     
		  (vlax-for   ent block 
			(if (/= (get_vlacol ent lays) col) (vla-put-visible ent 0))
		)
	)
	(vla-endundomark adoc)
)

(defun c:cunisov(/ adoc)
	(vl-load-com) 	
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)))	
	(vlax-for block (vla-get-blocks adoc)     
		  (vlax-for   ent block 
			(vla-put-visible ent 1)
		)
	)
)

Bạn xem lại mình chạy thử thấy bị lỗi về hàm định nghĩa  table và hàm get_vlacol và mình đã sửa lại rồi thì chạy được tốc độ nhanh hơn gấp 2 lần so với lisp trước nhưng chạy xong vẫn thấy báo lỗi, và lỗi này mình không biết xử lý. Dòng báo lỗi cả 2 lệnh như nhau:

Select object: ; error: Automation Error. On locked layer 


  • 0

#17 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5679 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 29 November 2013 - 12:17 AM

Do trên code mình không check đối tượng có thuộc layer bị khóa không :) Bạn có thể kiểm tra ent trước khi put visible


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#18 tungquach165

tungquach165

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 29 November 2013 - 09:00 AM

Chui vào bên trong xem tốc độ có ổn hơn không. Mình sử dụng VL

 

(defun c:cisov(/ _table _vlacol lays adoc col)
	(vl-load-com) 
	(defun _table (s / d r)
		(while (setq d (tblnext s (null d)))
			(setq r (append  (list (cons (cdr (assoc 2 d)) (cdr (assoc 62 d)))) r))
		)	
	)
	(defun _vlacol(obj lays / col)(if (/= (setq col (vla-get-color obj)) 256) col (cdr (assoc (vla-get-layer obj) lays))))
	(setq lays (_table "LAYER"))
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
	(setq col (_vlacol (vlax-ename->vla-object (car(entsel))) lays)) 
	(vla-startundomark adoc)
	(vlax-for block (vla-get-blocks adoc)     
		  (vlax-for   ent block 
			(if (/= (_vlacol ent lays) col) (vla-put-visible ent 0))
		)
	)
	(vla-endundomark adoc)
)

(defun c:cunisov(/ adoc)
	(vl-load-com) 	
	(setq adoc (vla-get-activedocument (vlax-get-acad-object)))	
	(vlax-for block (vla-get-blocks adoc)     
		  (vlax-for   ent block 
			(vla-put-visible ent 1)
		)
	)
)

Cái này không chọn được nhiều màu cùng 1 lúc à bác, bác có thể viết thêm lệnh, chọn vào mà nó ẩn đi nữa đc ko?

em chạy thử cái này thấy nhanh hơn rồi:))

cảm ơn bác nhiều nhé


  • 0

#19 vohinhthuc

vohinhthuc

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 05 December 2013 - 04:45 PM

Cho mình hỏi, ẩn các màu kia đi, rồi làm cho nó hiện ra lại như thế nào vây.?


  • 0

#20 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 05 December 2013 - 05:31 PM

Cho mình hỏi, ẩn các màu kia đi, rồi làm cho nó hiện ra lại như thế nào vây.?

xem tên lệnh kìa trung với tên file đó cisov là ẩn và cunisov là hiện


  • 0