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

ẩn hiện theo tên block

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

bác nào biết lisp có thể làm ẩn hoặc hiện theo tên của block không vậy. mình tìm trên nhưng không thấy

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 thử dùng cái này thủ. Mình ứng dụng thằng hideshow.lsp của Cadviet.

(defun Dxf (Id Obj) (cdr (assoc Id (entget Obj))))
(defun an (SSet / Count_an Elem)
 (cond
((/= SSet nil)
(repeat (setq Count_an (sslength SSet))
  	(setq Count_an (1- Count_an)
 	Elem (ssname SSet Count_an))
  	(if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))
 (if (Dxf 60 Elem)
(entmod (subst '(60 . 1) (assoc 60 (entget Elem)) (entget Elem)))
(entmod (append (entget Elem) (list '(60 . 1))))
 )
 (prompt "\nEntity on a locked layer. Cannot hide this entity. ")
  	)
)
)  
 )
 (princ)
)
(defun C:3b (/ ena_an ss )
(while
 (and (setq ena_an (car (entsel "\nSelect a block to hidden"))) (= (dxf 0 ena_an) "INSERT"))
 (setq ss (ssget "X" (list (cons 2 (dxf 2 ena_an)))))
 (an ss)
)
(princ)
)
(defun c:2b (/ SSet WhatNext Count_an Elem)
(cond
 ((setq SSet (ssget "_X" '((60 . 1) (0 . "INSERT"))))
  (setq WhatNext "Yes")
  (cond
  ((= WhatNext "Yes")
(prompt "\nPlease wait...")
(repeat (setq Count_an (sslength SSet))
  	(setq Count_an (1- Count_an)
 	Elem (ssname SSet Count_an))
  	(if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))
 (entmod (subst '(60 . 0) '(60 . 1) (entget Elem)))
 (prompt "\nEntity on a locked layer. Cannot make visible this entity. ")
  	)
)
(prompt "\nDone...")
)
  )
 )
 (T (prompt "\nNo block was hidden. "))
)
)
(defun C:1b (/ ss ssa ss_an index)
(while (not (and
(setq ena_an (car (entsel "\nSelect a block to only visible")))
(=(dxf 0 ena_an) "INSERT")
))
 (princ "Must select a BLOCK!")
)
(setq ss (ssget "X" (list (cons 2 (dxf 2 ena_an)))) index 0)
(setq ssa (ssget "X" (list (cons 0 "INSERT"))))
(repeat (sslength ss)
 (setq ssa (ssdel (ssname ss index) ssa))
 (setq index (1+ index))
)
(an ssa)
)

 

Lệnh 1b thì mọi block đều ẩn hết, chỉ có block bạn chọn hiện

Lệnh 2bthì hiện hết tấc cả Block

Lệnh 3b thì ẩn block bạn chọn

Nên kết hơp thêm các lệnh Layon,layiso,layoff nữa thì chắc đúng ý bạn.

  • 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

ok. đúng ý mình, thanks bạn nhé

 

Đúng ý bạn là được rồi. Nhưng lần sau, các yêu cầu viết Lisp như trên bạn nên sang Topic Autolisp thì hợp lý hơn 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

Bạn thử dùng cái này thủ. Mình ứng dụng thằng hideshow.lsp của Cadviet.

(defun Dxf (Id Obj) (cdr (assoc Id (entget Obj))))
(defun an (SSet / Count_an Elem)
  (cond
	((/= SSet nil)
	(repeat (setq Count_an (sslength SSet))
   	(setq Count_an (1- Count_an)
  	Elem (ssname SSet Count_an))
   	(if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))
  (if (Dxf 60 Elem)
	(entmod (subst '(60 . 1) (assoc 60 (entget Elem)) (entget Elem)))
	(entmod (append (entget Elem) (list '(60 . 1))))
  )
  (prompt "\nEntity on a locked layer. Cannot hide this entity. ")
   	)
	)
	)  
  )
  (princ)
)
(defun C:3b (/ ena_an ss )
(while
  (and (setq ena_an (car (entsel "\nSelect a block to hidden"))) (= (dxf 0 ena_an) "INSERT"))
  (setq ss (ssget "X" (list (cons 2 (dxf 2 ena_an)))))
  (an ss)
)
(princ)
)
(defun c:2b (/ SSet WhatNext Count_an Elem)
(cond
  ((setq SSet (ssget "_X" '((60 . 1) (0 . "INSERT"))))
   (setq WhatNext "Yes")
   (cond
   ((= WhatNext "Yes")
	(prompt "\nPlease wait...")
	(repeat (setq Count_an (sslength SSet))
   	(setq Count_an (1- Count_an)
  	Elem (ssname SSet Count_an))
   	(if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))
  (entmod (subst '(60 . 0) '(60 . 1) (entget Elem)))
  (prompt "\nEntity on a locked layer. Cannot make visible this entity. ")
   	)
	)
	(prompt "\nDone...")
	)
   )
  )
  (T (prompt "\nNo block was hidden. "))
)
)
(defun C:1b (/ ss ssa ss_an index)
(while (not (and
	(setq ena_an (car (entsel "\nSelect a block to only visible")))
	(=(dxf 0 ena_an) "INSERT")
	))
  (princ "Must select a BLOCK!")
)
(setq ss (ssget "X" (list (cons 2 (dxf 2 ena_an)))) index 0)
(setq ssa (ssget "X" (list (cons 0 "INSERT"))))
(repeat (sslength ss)
  (setq ssa (ssdel (ssname ss index) ssa))
  (setq index (1+ index))
)
(an ssa)
)
Lệnh 1b thì mọi block đều ẩn hết, chỉ có block bạn chọn hiện

Lệnh 2bthì hiện hết tấc cả Block

Lệnh 3b thì ẩn block bạn chọn

Nên kết hơp thêm các lệnh Layon,layiso,layoff nữa thì chắc đúng ý bạn.

 

Thanks bạn mình lục nát cái diễn đàn này nay mới tìm đượ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

×