Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
tungquach165

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

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

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.com/forum/topic/64399-yeu-cau-lisp-chon-doi-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,

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à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 ?

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à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 à?

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

Ẩ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 ?

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ớ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. 

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

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 ??

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ớ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

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

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.com/upfiles/3/120804_34000_1_2_3.lsp

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í 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)
)
			

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í 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@@!

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 đ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 ^^

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

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)
		)
	)
)
  • 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

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 

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

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

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

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é

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à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 ?

làm sao để mình nhấn vào ô N1 trong exell sẽ chỉ đến N1 trong cad vậy a?

 

 

126626_n%C3%BAt_giao_2.png

 

 

 

 

 

126626_n%C3%BAt_1_2.png

  • Vote giảm 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

Đăng nhập để thực hiện theo  

×