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

[Đã xong] Lisp hide & show object

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

Viết thế thì dễ mà a. Nhưng e thử đưa ra 1 2 trường hợp rắc rối nhỏ thế này nhé :

- Hide 1 nhóm đối tượng cùng Layer thì ok. Nhóm đối tượng thuộc nhiều Layer => Sinh ra nhiều Layer rác nữa

- Hide rồi, Unhide thì sao ? Gán Xdata để trả về Layer cũ rồi xóa Layer đã sinh ? Layer cũ không còn thì sao ? Unhide hết hay chỉ unhide các đối tượng chứa layer đã bị ẩn bởi lệnh ẩn trong chính viewport hay unhide tất cả ....

- 3 VPort 1,2,3 đểu có 6 cái ghế. Giả sử đơn giản nhất là chung layer đi cho dễ. Khác thì ...

Ở VP 1 ẩn ghế thứ 1, thứ 2 , thứ 3. Ở VP thứ 2 lại muốn ẩn ghế thứ 2, thứ 3, thứ 4. Vp thứ 3 lại muốn ẩn ghế thứ 2 và thứ 4, hiện ghế thứ 3

Vậy rắc rối sẽ nằm ở những thằng ghế chồng chéo này. Sẽ có trường hợp phát sinh là thỏa được VP này thì mất VP kia.

Muốn thỏa mãn thì mỗi lần chạy lệnh phải rà soát lại toàn bộ bản vẽ và thiết đặt lại hoàn toàn nếu bị lặp. Lại tiếp tục sinh ra vấn đề phát sinh là quản lý đối tượng nào thuộc layer cũ nào thuộc những VP nào đã bị ẩn, có trùng nhau không .....

........

........

Ôi .........

  • 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

16719_untitled.png

 

Bạn tạo mới layer nuoc_mua bằng nút này, nó sẽ frozen trong 50 viewport bạn đã có.

Thanks bác Mũn nhé! Hiii thì ra CAD 2007 ko có, 2010 mới có thêm nút lệnh nhứ bác khoanh tròn. 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

Cái này khi làm việc mình cũng hay gặp nên lập ra cái này. Muốn che cái nào tóm cái đó lệnh là :cc khi cần hiện lại đánh :hh

Các bạn dùng thử xem sao:

https://drive.google.com/open?id=0B_InH2S3lT_vTS1zTEsxZUNVdkU

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

 

;======================Bemove====================================
; Hide & Show

(defun c:InVis (/ SSet Count Elem)

(defun Dxf (Id Obj)
(cdr (assoc Id (entget Obj)))
);end Dxf

(prompt "\nSelect object(s) to hide: ")
(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 "\nEntity on a locked layer. Cannot hide this entity. ")
);end if
);end repeat
)
);end cond
(princ)
);end c:InVis



(defun c:Vis (/ WhatNextSSet Count Elem)

(defun Dxf (Id Obj)
(cdr (assoc Id (entget Obj)))
);end Dxf

(cond
((setq SSet (ssget "_X" '((60 . 1))))
(initget "Yes No")
(setq WhatNext (cond
((getkword "\nAll hidden entities will be visible. Continue? No, : "))
(T "Yes")))
(cond
((= WhatNext "Yes")
(prompt "\nPlease wait...")
(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 "\nEntity on a locked layer. Cannot make visible this entity. ")
);end if
);end repeat
(prompt "\nDone...")
)
);end cond
)
(T (prompt "\nNo objects was hidden. "))

 

Bạn cho mình hỏi chút, lệnh invis dùng OK, nhưng lệnh vis thì lại ko được, mình copy code trực tiếp ( và download), đều ko dùng được lệnh vis.....

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

 

;======================Bemove====================================
; Hide & Show

(defun c:InVis (/ SSet Count Elem)

(defun Dxf (Id Obj)
(cdr (assoc Id (entget Obj)))
);end Dxf

(prompt "\nSelect object(s) to hide: ")
(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 "\nEntity on a locked layer. Cannot hide this entity. ")
);end if
);end repeat
)
);end cond
(princ)
);end c:InVis



(defun c:Vis (/ WhatNextSSet Count Elem)

(defun Dxf (Id Obj)
(cdr (assoc Id (entget Obj)))
);end Dxf

(cond
((setq SSet (ssget "_X" '((60 . 1))))
(initget "Yes No")
(setq WhatNext (cond
((getkword "\nAll hidden entities will be visible. Continue? No, : "))
(T "Yes")))
(cond
((= WhatNext "Yes")
(prompt "\nPlease wait...")
(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 "\nEntity on a locked layer. Cannot make visible this entity. ")
);end if
);end repeat
(prompt "\nDone...")
)
);end cond
)
(T (prompt "\nNo objects was hidden. "))

sao mình dùng vis mà không hiện được đối tượng vậy 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
Vào lúc 17/12/2007 tại 17:24, interwar1283 đã nói:

 



;======================Bemove====================================
; Hide ; Show 

(defun c:InVis (/ SSet Count Elem)

 (defun Dxf (Id Obj)
   (cdr (assoc Id (entget Obj)))
 );end Dxf

 (prompt "\nSelect object(s) to hide: ")
 (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 "\nEntity on a locked layer. Cannot hide this entity. ")
      );end if
    );end repeat
   )	 	
 );end cond
 (princ)
);end c:InVis



(defun c:Vis (/ WhatNextSSet Count Elem)

 (defun Dxf (Id Obj)
   (cdr (assoc Id (entget Obj)))
 );end Dxf

(cond
 ((setq SSet (ssget "_X" '((60 . 1))))
  (initget "Yes No")
  (setq WhatNext (cond
	   ((getkword "\nAll hidden entities will be visible. Continue? No, : "))
	   (T "Yes")))
  (cond
  ((= WhatNext "Yes")
   (prompt "\nPlease wait...")
    (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 "\nEntity on a locked layer. Cannot make visible this entity. ")
      );end if
    );end repeat
   (prompt "\nDone...")
   )
  );end cond
 )
 (T (prompt "\nNo objects was hidden. "))

 

 

mấy bạn ơi, lisp này hay ghê, mình cũng đang cần, nhưng mờ nếu sau ni nhập lệnh nó tự chọn đối tượng đã chọn trước đó rồi hide luôn thì tốt quá, bạn nào rãnh fix lại giúp mình mới, mình cảm ơn 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

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

×