Đến nội dung


Hình ảnh

ẩn hiện theo tên block


  • Please log in to reply
4 replies to this topic

#1 xdd

xdd

    biết vẽ arc

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

Đã gửi 03 October 2011 - 09:27 AM

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

#2 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 03 October 2011 - 10:07 AM

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.
  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#3 xdd

xdd

    biết vẽ arc

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

Đã gửi 03 October 2011 - 10:23 AM

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

#4 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 03 October 2011 - 09:27 PM

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é.
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#5 vanthangv

vanthangv

    biết pan

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

Đã gửi 04 March 2016 - 01:46 PM

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


  • 0