Đến nội dung


Hình ảnh
- - - - -

[Đã xong] Lisp hide & show object


  • Please log in to reply
79 replies to this topic

#61 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1313 Bài viết
Điểm đánh giá: 633 (tốt)

Đã gửi 19 January 2015 - 11:14 PM

Đã bảo là ở cấp độ đối tượng mờ lị, layon vs layoff thì cần chi lisp.
  • 0

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#62 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 20 January 2015 - 07:35 AM

Có cách nào chế lại lệnh này để nó có hiệu lực trên từng viewport ko các bác :-s

Với Cad 2014-15  : các lệnh này (hideobjects, isolateobjects, unisolateobjects) chạy ngon trong active viewport.


  • 1

#63 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1313 Bài viết
Điểm đánh giá: 633 (tốt)

Đã gửi 20 January 2015 - 08:29 AM

Bác gia bach vẫn chưa hiểu ý em rồi, ý em là nó tương tự như lệnh lệnh vplayfreeze, nghĩa là nó chỉ ẩn đối tượng trong viewport mình cần ẩn thôi, còn cáC viewport khác nó vẫn hiện.
Ví dụ cụ thể:
- Có 1 mặt bằng gồm tường, 2 cái cửa. (2 cửa cùng chung 1 layer).
- Có 2 viewport bên layout cùng chiếu vào mặt bằng đó.
Bây giờ ở viewport 1, em muốn ấn đi 1 cái cửa, viewport 2 giữ nguyên, không ẩn gì cả.
Lệnh hideobject sẽ không làm được việc này mà nó sẽ làm ẩn đi cái cửa ở cả 2 viewport.


  • 1

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#64 tanbqtb03

tanbqtb03

    biết vẽ ellipse

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

Đã gửi 20 January 2015 - 08:45 AM

Có phải ý bác Mũn thế này ko ah?

     Chọn 1 layer, cho nó option:

1- Hoặc cho phép hiển thị trong viewport hiện hành (- viewport đang đặt con trỏ) ko được hiển thị trong các layout khác

Mục đích: Để khi thể hiện bản vẽ bên layout, khi người vẽ bổ sung thêm 1 layer mới thì ko phải chọn từng viewport để vplayfreeze lại lần lượt rất tốn thời gian và dễ bị bỏ sót.

 

2- Hoặc chỉ cho phép layer đó hiển thị trong các viewport khác và bị vplayfreeze trong chính viewprot hiện hành.

 

Vì e đang dùng CAD2007 nên ko biết các phiên bản về sau có tính năng như e trình bày ko, các bác "chém" nhẹ tay hihi


  • 1

#65 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 20 January 2015 - 09:34 AM

OP nói rõ là object, bạn cứ lái sang Layer chi vậy ??


  • 2

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#66 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 20 January 2015 - 10:17 AM

Bác gia bach vẫn chưa hiểu ý em rồi, ý em là nó tương tự như lệnh lệnh vplayfreeze, nghĩa là nó chỉ ẩn đối tượng trong viewport mình cần ẩn thôi, còn cáC viewport khác nó vẫn hiện.
Ví dụ cụ thể:
- Có 1 mặt bằng gồm tường, 2 cái cửa. (2 cửa cùng chung 1 layer).
- Có 2 viewport bên layout cùng chiếu vào mặt bằng đó.
Bây giờ ở viewport 1, em muốn ấn đi 1 cái cửa, viewport 2 giữ nguyên, không ẩn gì cả.
Lệnh hideobject sẽ không làm được việc này mà nó sẽ làm ẩn đi cái cửa ở cả 2 viewport.

Bác có thể tạo ViewPort đa giác lõm, tham khảo :  http://www.cadviet.c...wport-truoc-do/


  • 2

#67 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1313 Bài viết
Điểm đánh giá: 633 (tốt)

Đã gửi 20 January 2015 - 10:58 AM

16719_capture.png

 

Ở đây em có 2 viewport cùng nhìn vào 1 vị trí bên model. Cả 6 cái ghế này đều nằm trên 1 layer. Bây giờ em muốn ẩn đi 1 cái ghế ở viewport 1 nhưng vẫn hiện ở viewport 2.
Nếu dùng lệnh hideobject thì ở viewport 2, cái ghế cũng sẽ bị ẩn đi.

Để làm được như thế này thì em phải làm thủ công bằng cách đẻ thêm 1 layer có thuộc tính giống với layer chứa cái ghế, sau đó em chuyển cái ghế muốn ẩn sang layer đó, rồi tắt nó đi ở viewport 1.
Em muốn hỏi là có thể chế lại lệnh hideobject hoặc sử dụng lisp để rút ngắn thao tác và ko phải đẻ thêm layer như em làm ko?


  • 1

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#68 tanbqtb03

tanbqtb03

    biết vẽ ellipse

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

Đã gửi 20 January 2015 - 11:05 AM

OP nói rõ là object, bạn cứ lái sang Layer chi vậy ??

Sorry bác Ketxu nhé!

Vậy nhân tiện cho mình hỏi ko biết có lệnh nào trong CAD2007 hoặc lisp nào có tính năng như mình trình bày ko ah? Thanks all


  • 0

#69 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1313 Bài viết
Điểm đánh giá: 633 (tốt)

Đã gửi 21 January 2015 - 10:29 AM

Sorry bác Ketxu nhé!

Vậy nhân tiện cho mình hỏi ko biết có lệnh nào trong CAD2007 hoặc lisp nào có tính năng như mình trình bày ko ah? Thanks all

Mấy tính năng này trong bảng layer ở layout đều có hết mà bạn.


  • 0

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#70 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 21 January 2015 - 11:52 AM

Có thể là:

Khi người dùng chọn đối tượng, xác định Boundary >>> tạo LWpolyline theo Bo đó >>> Chspace để chuyển LWpoly vừa tạo sang môi trường layout và Wipeout theo LWpoly đó để che

 

p/s: Chỉ thực hiện thao tác này khi đã bố trí bản vẽ xong, hoặc là nhờ cao nhân hiến kế để quản lý tốt mấy cái Wipeout sinh ra đó, tránh lằng nhằng :D

 

:D Trình còn non nhưng xin góp ý, mấy bác nghĩ sao ạ ! :D


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#71 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 21 January 2015 - 01:51 PM

Có thể là:

Khi người dùng chọn đối tượng, xác định Boundary >>> tạo LWpolyline theo Bo đó >>> Chspace để chuyển LWpoly vừa tạo sang môi trường layout và Wipeout theo LWpoly đó để che

 

p/s: Chỉ thực hiện thao tác này khi đã bố trí bản vẽ xong, hoặc là nhờ cao nhân hiến kế để quản lý tốt mấy cái Wipeout sinh ra đó, tránh lằng nhằng :D

 

:D Trình còn non nhưng xin góp ý, mấy bác nghĩ sao ạ ! :D

Dùng wipeOut thì e rằng nó cũng che luôn cái cạnh bàn (trong viewport1 OP vẽ thấy cạnh bàn, chỉ ko thấy cái ghế).


  • 0

#72 tanbqtb03

tanbqtb03

    biết vẽ ellipse

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

Đã gửi 21 January 2015 - 02:15 PM

Mấy tính năng này trong bảng layer ở layout đều có hết mà bạn.

Mình ví dụ thế này nhé! Bác vẽ 1 bộ bản vẽ các bộ môn tầm 50 layout, mọi thứ vẽ xong. Đến lúc này phát sinh thêm 01 HT thoát nước mưa chẳng hạn với layer nuoc_mua. Khi đó bác hướng dẫn giúp e là làm sao chỉ hiển thị layer này - layer nuoc_mua chỉ trong layout thứ 51 mới p/sinh thêm mà ko cần phải click từng viewport trong 50 layout trước đó. Tại e cũng mới dùng layout CAD nên ko rành lắm. Thanks


  • 0

#73 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1313 Bài viết
Điểm đánh giá: 633 (tốt)

Đã gửi 21 January 2015 - 04:45 PM

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


  • 1

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#74 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 22 January 2015 - 09:47 AM

Vấn đề của bác Mũn tưởng đơn giản nhưng không đơn giản tí nào, viết ra rồi lại xóa. Có rất nhiều trường hợp chưa lường trước được ở mức tự động. Làm tay như bác vẫn là kiểm soát dễ nhất


  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#75 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1313 Bài viết
Điểm đánh giá: 633 (tốt)

Đã gửi 22 January 2015 - 12:15 PM

Em mù tịt trong vấn đề lập trình, nhưng em hiểu nôm na cơ chế lệnh của nó sẽ dư lày:
Khi pick chọn đối tượng thì lisp sẽ làm những công việc sau:
1: Đẻ thêm 1 lớp layer có thuộc tính như layer hiện đang chứa đối tượng (ví dụ đối tượng thuộc layer 3 thì đẻ thêm 1 layer có tên là 3_hide với thuộc tính như layer 3)
2: Chuyển đối tượng về layer mới đẻ thêm.
3: Set vp freeze cho layer mới đẻ thêm tại viewport hiện hành.
Bước 2 và bước 3 có thể đổi chỗ cho nhau.

Đấy là em nghĩ như thế, còn ko biết có thể thực hiện được hay ko.


  • 0

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#76 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 22 January 2015 - 02:12 PM

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


  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#77 tanbqtb03

tanbqtb03

    biết vẽ ellipse

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

Đã gửi 24 January 2015 - 09:56 AM

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


  • 0

#78 dohung9687

dohung9687

    Chưa sử dụng CAD

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

Đã gửi 18 September 2016 - 10:20 PM

sao em ẩn bằng invis thì được mà hiện bằng lệnh vis nó cứ báo unknow là sao? bác giúp cho


  • 0

#79 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 19 September 2016 - 12:54 PM

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


  • 0

#80 Chym Code

Chym Code

    biết vẽ arc

  • Members
  • PipPip
  • 46 Bài viết
Điểm đánh giá: -10 (hơi kém)

Đã gửi 19 September 2016 - 03:27 PM

;======================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.....


  • 0