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

[Yêu cầu] Lisp chọn nhanh block cùng nội dung ATT

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

Các bác viết dùm mình lisp chọn nhanh block cùng tên và có cùng nội dung attribute với

Lisp như sau:

select_block_attribute.lsp: Lệnh sba

+Chọn block với att mẫu.

+Chọn vùng chứa các block cần chọn.

-> Kết quả chọn được các block chứa att cùng nội dung mong muốn ạ.

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ác bác viết dùm mình lisp chọn nhanh block cùng tên và có cùng nội dung attribute với

Lisp như sau:

select_block_attribute.lsp: Lệnh sba

+Chọn block với att mẫu.

+Chọn vùng chứa các block cần chọn.

-> Kết quả chọn được các block chứa att cùng nội dung mong muốn ạ.

Hề hề hề,

Bạn hỏi không rõ ràng minh bạch gì cả. Một block có thể chứa nhiều thuộc tính (attribute) chứ không phải chỉ có một thuộc tính. Vậy bạn muốn chọn các block có tất cả các thuộc tình giống nhau và các giá trị của các thuộc tính này cũng giống nhau hay chỉ cần có một thuộc tính có giá trị giống nhau là Ok??? Bản thân một thuộc tính cũng có nhiều đặc tính riêng tỷ như mầu săc, kích thước chẳng hạn.... vậy bạn chỉ muốn tìm những thuộc tính giống nhau về giá trị hay là giống cả các đặc tính khác nữa???

Rất mong bạn có thể nói rõ hơn yêu cầu của mình và hãy gửi bản vẽ kèm theo nếu bạn muốn có lisp đúng với yêu cầu.

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

Chắc bạn cần cái giống như thế này, Mình post hình để mọi người giúp bạn chứ mình không share tiện ích này.

Bạn có thể xem chi tiết hơn ở http://cadonline.duy...lication&lid=48

xtt.gif

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

Hề hề hề,

Bạn hỏi không rõ ràng minh bạch gì cả. Một block có thể chứa nhiều thuộc tính (attribute) chứ không phải chỉ có một thuộc tính. Vậy bạn muốn chọn các block có tất cả các thuộc tình giống nhau và các giá trị của các thuộc tính này cũng giống nhau hay chỉ cần có một thuộc tính có giá trị giống nhau là Ok??? Bản thân một thuộc tính cũng có nhiều đặc tính riêng tỷ như mầu săc, kích thước chẳng hạn.... vậy bạn chỉ muốn tìm những thuộc tính giống nhau về giá trị hay là giống cả các đặc tính khác nữa???

Rất mong bạn có thể nói rõ hơn yêu cầu của mình và hãy gửi bản vẽ kèm theo nếu bạn muốn có lisp đúng với yêu cầu.

 

Mình chỉ cần giống nhau về thuộc tính giá trị nội dung của attribute thôi. Các thuộc tính khác trùng nhau hay khác nhau ko quan tâ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

Mình chỉ cần giống nhau về thuộc tính giá trị nội dung của attribute thôi. Các thuộc tính khác trùng nhau hay khác nhau ko quan tâm.

Cùng Tag; hay cùng Value; hay cả cùng Tag và Value?

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

value ấ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

value ấy.

Có lẽ bạn không mặn mà với câu trả lời hay sao ấy?

Value giống nhau nhưng Tag khác nhau thì có chọn không? Nếu Block_Att có nhiều Tag thì khi lấy mẫu nó sẽ chọn Tag nào?...

Tốt nhất là gởi bản vẽ lên và diễn đạt luôn trên đó bạn ạ.

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 ketxu thì :

- Nentsel để lấy nội dung Att và tên Block

- Chọn vùng Insert và mã dxf 66 = 1

- Kiểm tra toàn bộ Att trong mỗi Insert, nếu có nội dung trùng thì SSadd

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 xin lỗi các bác, nãy vội đi có việc quá nên trả lời hơi gấp. Đúng là cần cả chung value và tag. vì có thể có nhiều att trong block mà khi vô tình trùng nhau sẽ loạn. điều kiện lựa chọn của mình sẽ chặt chẽ hơn.

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

Lisp chọn các Block theo: NameBlock + TagAtt + ValueAtt

;Doan Van Ha - CADViet.com - Ngay 04/7/2012
;Muc dich: Chon cac Blocks theo NameBlock, TagAtt, ValueAtt.
(defun C:HA( / ent ass blk entlst)
(vl-load-com)
(if
 (and
  (setq ent (car (nentsel "\nPick chon Att trong Block mau: ")))
  (= "ATTRIB" (cdr (assoc 0 (entget ent)))))
 (progn
  (setq ass (cons (cdr (assoc 2 (entget ent))) (cdr (assoc 1 (entget ent)))))
  (setq blk (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent)))))))
  (setq ss (ssadd))
  (princ "\nChon cac Block_Att...")
  (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 blk)))))))
  (foreach ent entlst
(if (member ass (GetAtt (vlax-ename->vla-object ent)))
(setq ss (ssadd ent ss))))
  (sssetfirst nil ss))))
(defun GetAtt (obj)
(mapcar '(lambda (att) (cons (vla-get-TagString att) (vla-get-TextString att))) (vlax-invoke obj 'GetAttributes)))

P/S: đã hiệu chỉnh để tránh chọn nhầm đối tượng

  • Vote tăng 4

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, lỗi bác ạ. Không biết có phải do mình add quá nhiều lisp nữa không.

 

 

 

Pick chon Att cua Block mau:

Chon cac Block_Att...

Select objects: Specify opposite corner: 71 found

 

Select objects:

(nil <Selection set: 22b2f>)

 

Bác xem có giúp được với lỗi của em không. Nếu ko được thì thôi vậy. Dùng find của cad cũng tạm được 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

Đã ok rồi bác ạ, Cảm ơn bác Doan Van Ha nhiều nhé. Tiếc là chưa dùng được với dynamic block. :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

 

Lisp chọn các Block theo: NameBlock + TagAtt + ValueAtt

;Doan Van Ha - CADViet.com - Ngay 04/7/2012
;Muc dich: Chon cac Blocks theo NameBlock, TagAtt, ValueAtt.
(defun C:HA( / ent ass blk entlst)
(vl-load-com)
(if
  (and
   (setq ent (car (nentsel "\nPick chon Att trong Block mau: ")))
   (= "ATTRIB" (cdr (assoc 0 (entget ent)))))
  (progn
   (setq ass (cons (cdr (assoc 2 (entget ent))) (cdr (assoc 1 (entget ent)))))
   (setq blk (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent)))))))
   (setq ss (ssadd))
   (princ "\nChon cac Block_Att...")
   (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 blk)))))))
   (foreach ent entlst
	(if (member ass (GetAtt (vlax-ename->vla-object ent)))
	(setq ss (ssadd ent ss))))
   (sssetfirst nil ss))))
(defun GetAtt (obj)
(mapcar '(lambda (att) (cons (vla-get-TagString att) (vla-get-TextString att))) (vlax-invoke obj 'GetAttributes)))
P/S: đã hiệu chỉnh để tránh chọn nhầm đối tượng

Bác Hà thêm giùm sau khi chọn các block có valua cần chọn thì nó ẩn các đối tượng khác đi,chỉ hiện các block này thôi!Cảm ơn bác nhiều.

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ác Hà thêm giùm sau khi chọn các block có valua cần chọn thì nó ẩn các đối tượng khác đi,chỉ hiện các block này thôi!Cảm ơn bác nhiều.

Ẩn rồi sau đó bạn phải cho hiện lại chứ nhỉ? Trên CV tôi có lisp ẩn/hiện đối tượng rồi. Bạn search 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

Ẩn rồi sau đó bạn phải cho hiện lại chứ nhỉ? Trên CV tôi có lisp ẩn/hiện đối tượng rồi. Bạn search nhé!

Đó là lisp ẩn hiện đối tượng theo layer bác ah.Bác có lisp nào ẩn hiện đối tượng đã chọn không?Thanks.

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ôi quên link rồi. Cái này nhớ ra là của ai đó, tôi chỉ biên tập lại thôi  :lol:  Tôi post lên lại vậy.


;---------- AN & HIEN. free lisp from cadviet.com
;---------- AN DOI TUONG DUOC CHON, HIEN PHAN CON LAI
(defun C:AN (/ sset count elem)
 (defun DXF (id obj)
  (cdr (assoc id (entget obj))))
 (prompt "\nChon cac doi tuong de an: ")
 (cond
  ((setq sset (ssget))
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (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 "\nDoi tuong nay thuoc lop bi khoa. Khong the an no.")))))
 (princ))
;---------- HIEN DOI TUONG DUOC CHON, AN PHAN CON LAI
(defun C:HIEN (/ sset0 sset count elem)
 (setq sset (cadr (ssgetfirst)))
 (prompt "\nChon cac doi tuong de hien: ")
 (if (null sset)
  (setq sset (ssget)))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
;---------- HIEN TAT CA DOI TUONG
(defun C:HIENTC (/ WhatNextsset count elem)
 (defun DXF (Id Obj)
  (cdr (assoc Id (entget Obj))))
 (cond
  ((setq sset (ssget "_X" '((60 . 1))))
   (initget "Yes No")
   (setq WhatNext
    (cond
     ((getkword "\nTat ca doi tuong dang an se duoc hien? N/<Yes>: "))
     (T "Yes")))
  (cond
   ((= WhatNext "Yes")
    (prompt "\nVui long doi...")
     (repeat (setq count (sslength sset))
      (setq count (1- count) elem (ssname sset count))
      (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
       (entmod (subst '(60 . 0) '(60 . 1) (entget elem)))
       (prompt "\nDoi tuong nay thuoc lop bi khoa. Khong the hien no.")))
    (prompt "\nKet thuc..."))))
  (T (prompt "\nKhong co doi tuong nao duoc an."))))
;---------- DOI TUONG AN VA HIEN DOI CHO CHO NHAU
(defun C:CHUYEN (/ sset0 sset count elem)
 (setq sset (ssget "_X" '((60 . 1))))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
(princ "\nAn cac doi tuong duoc chon, dung lenh: AN")
(princ "\nHien cac doi tuong duoc chon, dung lenh: HIEN")
(princ "\nHien tat ca doi tuong tren ban ve, dung lenh: HIENTC")
(princ "\nChuyen doi giua doi tuong an va hien, dung lenh: CHUYEN")
(princ)
;----------
 

  • 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

Tôi quên link rồi. Cái này nhớ ra là của ai đó, tôi chỉ biên tập lại thôi  :lol:  Tôi post lên lại vậy.


;---------- AN & HIEN. free lisp from cadviet.com
;---------- AN DOI TUONG DUOC CHON, HIEN PHAN CON LAI
(defun C:AN (/ sset count elem)
 (defun DXF (id obj)
  (cdr (assoc id (entget obj))))
 (prompt "\nChon cac doi tuong de an: ")
 (cond
  ((setq sset (ssget))
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (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 "\nDoi tuong nay thuoc lop bi khoa. Khong the an no.")))))
 (princ))
;---------- HIEN DOI TUONG DUOC CHON, AN PHAN CON LAI
(defun C:HIEN (/ sset0 sset count elem)
 (setq sset (cadr (ssgetfirst)))
 (prompt "\nChon cac doi tuong de hien: ")
 (if (null sset)
  (setq sset (ssget)))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
;---------- HIEN TAT CA DOI TUONG
(defun C:HIENTC (/ WhatNextsset count elem)
 (defun DXF (Id Obj)
  (cdr (assoc Id (entget Obj))))
 (cond
  ((setq sset (ssget "_X" '((60 . 1))))
   (initget "Yes No")
   (setq WhatNext
    (cond
     ((getkword "\nTat ca doi tuong dang an se duoc hien? N/<Yes>: "))
     (T "Yes")))
  (cond
   ((= WhatNext "Yes")
    (prompt "\nVui long doi...")
     (repeat (setq count (sslength sset))
      (setq count (1- count) elem (ssname sset count))
      (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
       (entmod (subst '(60 . 0) '(60 . 1) (entget elem)))
       (prompt "\nDoi tuong nay thuoc lop bi khoa. Khong the hien no.")))
    (prompt "\nKet thuc..."))))
  (T (prompt "\nKhong co doi tuong nao duoc an."))))
;---------- DOI TUONG AN VA HIEN DOI CHO CHO NHAU
(defun C:CHUYEN (/ sset0 sset count elem)
 (setq sset (ssget "_X" '((60 . 1))))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
(princ "\nAn cac doi tuong duoc chon, dung lenh: AN")
(princ "\nHien cac doi tuong duoc chon, dung lenh: HIEN")
(princ "\nHien tat ca doi tuong tren ban ve, dung lenh: HIENTC")
(princ "\nChuyen doi giua doi tuong an va hien, dung lenh: CHUYEN")
(princ)
;----------
 

Lisp báo lỗi:

; error: no function definition: DXF

Bác xem sửa giúp e với.Thanks.

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ó chút sơ ý.


(defun DXF (id obj)
 (cdr (assoc id (entget obj))))
;---------- AN & HIEN. free lisp from cadviet.com
;---------- AN DOI TUONG DUOC CHON, HIEN PHAN CON LAI
(defun C:AN (/ sset count elem)
 (prompt "\nChon cac doi tuong de an: ")
 (cond
  ((setq sset (ssget))
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (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 "\nDoi tuong nay thuoc lop bi khoa. Khong the an no.")))))
 (princ))
;---------- HIEN DOI TUONG DUOC CHON, AN PHAN CON LAI
(defun C:HIEN (/ sset0 sset count elem)
 (setq sset (cadr (ssgetfirst)))
 (prompt "\nChon cac doi tuong de hien: ")
 (if (null sset)
  (setq sset (ssget)))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
;---------- HIEN TAT CA DOI TUONG
(defun C:HIENTC (/ WhatNextsset count elem)
 (cond
  ((setq sset (ssget "_X" '((60 . 1))))
   (initget "Yes No")
   (setq WhatNext
    (cond
     ((getkword "\nTat ca doi tuong dang an se duoc hien? N/<Yes>: "))
     (T "Yes")))
  (cond
   ((= WhatNext "Yes")
    (prompt "\nVui long doi...")
     (repeat (setq count (sslength sset))
      (setq count (1- count) elem (ssname sset count))
      (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
       (entmod (subst '(60 . 0) '(60 . 1) (entget elem)))
       (prompt "\nDoi tuong nay thuoc lop bi khoa. Khong the hien no.")))
    (prompt "\nKet thuc..."))))
  (T (prompt "\nKhong co doi tuong nao duoc an."))))
;---------- DOI TUONG AN VA HIEN DOI CHO CHO NHAU
(defun C:CHUYEN (/ sset0 sset count elem)
 (setq sset (ssget "_X" '((60 . 1))))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
(princ "\nAn cac doi tuong duoc chon, dung lenh: AN")
(princ "\nHien cac doi tuong duoc chon, dung lenh: HIEN")
(princ "\nHien tat ca doi tuong tren ban ve, dung lenh: HIENTC")
(princ "\nChuyen doi giua doi tuong an va hien, dung lenh: CHUYEN")
(princ)
;----------
 

  • 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ó chút sơ ý.


(defun DXF (id obj)
 (cdr (assoc id (entget obj))))
;---------- AN & HIEN. free lisp from cadviet.com
;---------- AN DOI TUONG DUOC CHON, HIEN PHAN CON LAI
(defun C:AN (/ sset count elem)
 (prompt "\nChon cac doi tuong de an: ")
 (cond
  ((setq sset (ssget))
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (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 "\nDoi tuong nay thuoc lop bi khoa. Khong the an no.")))))
 (princ))
;---------- HIEN DOI TUONG DUOC CHON, AN PHAN CON LAI
(defun C:HIEN (/ sset0 sset count elem)
 (setq sset (cadr (ssgetfirst)))
 (prompt "\nChon cac doi tuong de hien: ")
 (if (null sset)
  (setq sset (ssget)))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
;---------- HIEN TAT CA DOI TUONG
(defun C:HIENTC (/ WhatNextsset count elem)
 (cond
  ((setq sset (ssget "_X" '((60 . 1))))
   (initget "Yes No")
   (setq WhatNext
    (cond
     ((getkword "\nTat ca doi tuong dang an se duoc hien? N/<Yes>: "))
     (T "Yes")))
  (cond
   ((= WhatNext "Yes")
    (prompt "\nVui long doi...")
     (repeat (setq count (sslength sset))
      (setq count (1- count) elem (ssname sset count))
      (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
       (entmod (subst '(60 . 0) '(60 . 1) (entget elem)))
       (prompt "\nDoi tuong nay thuoc lop bi khoa. Khong the hien no.")))
    (prompt "\nKet thuc..."))))
  (T (prompt "\nKhong co doi tuong nao duoc an."))))
;---------- DOI TUONG AN VA HIEN DOI CHO CHO NHAU
(defun C:CHUYEN (/ sset0 sset count elem)
 (setq sset (ssget "_X" '((60 . 1))))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (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)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
(princ "\nAn cac doi tuong duoc chon, dung lenh: AN")
(princ "\nHien cac doi tuong duoc chon, dung lenh: HIEN")
(princ "\nHien tat ca doi tuong tren ban ve, dung lenh: HIENTC")
(princ "\nChuyen doi giua doi tuong an va hien, dung lenh: CHUYEN")
(princ)
;----------
 

Cảm ơn bác nhiều,cái này bác có thể sửa cho nó giống lệnh layiso,ý là các đối tượng được chọn sẽ hiện và các đối tượng khác sẽ mờ đi nhưng vẫn thấy trên bản vẽ.Layiso cad từ 2010 đến 2014 nó vậy đó bác.Thanks.

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ác HA có thể giúp em nâng cấp lệnh chọn nhanh đối tượng block cùng nội dung att áp dụng được với block  Visibility State luôn được 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

mình đã thử lisp này của bác DOAN VAN HA mình thấy dòng cuối hiện lên báo Select objects:  (nil <Selection set: e9>), ko hiện lên bao nhiêu đối tượng dc chọn mà thấy các đối tượng được chọn ở trong BV, nếu hiện lên dc số lượng dc chọn (sau khi ấn F2 thì tốt quá nhỉ)?

 

  • Vote giảm 3

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

×