Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
lp_hai

chỉ giùm em cáchlàm rỗng tập hợp đã chọn

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

lp_hai    207

Chào cả nhà.

em muốn tạo vòng lập while

trong đó nhóm dtượng ban đầu là dt (ssget) chẵn hạn. sau đó em muốn làm rỗng tập hợp chọn dt ban đầu để em dùng hàm ssadd thêm vào nó những dtượng mới.

VD như em dùng đoạn lisp sau:

(defun c:KO()

(setq dt (ssget)

index 0)

(setq sdt (sslength dt))

 

(repeat sdt

(setq ent (ssname dt index)

index (1+ index))

(setq dt (ssdel ent dt))

)

(princ (sslength dt))

)

đây là một lisp em viết thử để khử các dtượng trong tập hợp dt ban đầu bằng hàm ssdel và vòng lập repeat. nhưng nó báo lỗi các bác ah.

xin chỉ giáo giùm em.

hoặc có cách nào làm cho tập hợp dt ban đầu ko còn dt nào cả. khi dùng hàm (sslength dt) có giá trị bằng 0 nha.

vì nếu xóa dt thì nó vẫn hiểu dt gồm cá dt đã bị xóa.

chúc cả nhà ăn tết vui vẽ và nhiều sức khỏe

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
elleHCSC    98
Chào cả nhà.

em muốn tạo vòng lập while

trong đó nhóm dtượng ban đầu là dt (ssget) chẵn hạn. sau đó em muốn làm rỗng tập hợp chọn dt ban đầu để em dùng hàm ssadd thêm vào nó những dtượng mới.

VD như em dùng đoạn lisp sau:

(defun c:KO()

(setq dt (ssget)

index 0)

(setq sdt (sslength dt))

 

(repeat sdt

(setq ent (ssname dt index)

index (1+ index))

(setq dt (ssdel ent dt))

)

(princ (sslength dt))

)

đây là một lisp em viết thử để khử các dtượng trong tập hợp dt ban đầu bằng hàm ssdel và vòng lập repeat. nhưng nó báo lỗi các bác ah.

xin chỉ giáo giùm em.

hoặc có cách nào làm cho tập hợp dt ban đầu ko còn dt nào cả. khi dùng hàm (sslength dt) có giá trị bằng 0 nha.

vì nếu xóa dt thì nó vẫn hiểu dt gồm cá dt đã bị xóa.

chúc cả nhà ăn tết vui vẽ và nhiều sức khỏe

 

(setq dt nil) hoặc (setq dt()) là khử 1 phát hết luôn chứ bạn entdel từng ent trong tập dt làm gì 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
gia_bach    1.442
Chào cả nhà.

em muốn tạo vòng lập while

trong đó nhóm dtượng ban đầu là dt (ssget) chẵn hạn. sau đó em muốn làm rỗng tập hợp chọn dt ban đầu để em dùng hàm ssadd thêm vào nó những dtượng mới.

VD như em dùng đoạn lisp sau:

(defun c:KO()

(setq dt (ssget)

index 0)

(setq sdt (sslength dt))

 

(repeat sdt

(setq ent (ssname dt index)

index (1+ index))

(setq dt (ssdel ent dt))

)

(princ (sslength dt))

)

đây là một lisp em viết thử để khử các dtượng trong tập hợp dt ban đầu bằng hàm ssdel và vòng lập repeat. nhưng nó báo lỗi các bác ah.

xin chỉ giáo giùm em.

hoặc có cách nào làm cho tập hợp dt ban đầu ko còn dt nào cả. khi dùng hàm (sslength dt) có giá trị bằng 0 nha.

vì nếu xóa dt thì nó vẫn hiểu dt gồm cá dt đã bị xóa.

chúc cả nhà ăn tết vui vẽ và nhiều sức khỏe

Thử lisp này xem :

(defun c:KO ()
 (setq dt (ssget))
 (repeat (sslength dt)
   (princ (strcat "\nch/dai tap chon : " (itoa(sslength dt))))
   (setq ent (ssname dt 0))
   (ssdel ent dt)   )
 (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
lp_hai    207
(setq dt nil) hoặc (setq dt()) là khử 1 phát hết luôn chứ bạn entdel từng ent trong tập dt làm gì nhỉ ?

KO ĐƯỢC

nếu (setq dt nil) hoặc (setq dt ()) thì dt ko còn là tập chọn nữa khi này không ssadd dc

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
VUVUZELA    98
KO ĐƯỢC

nếu (setq dt nil) hoặc (setq dt ()) thì dt ko còn là tập chọn nữa khi này không ssadd dc

 

Sai là Đúng rồi

tại vì bạn đang chạy vòng lặp có 10 đối tượng

rồi bạn xóa 1 hoặc 3 đt (entdel) trong tập đt

thì đến lúc chương trình thực hiện vòng lặp chạy đến đt thứ 8 hoặc 10 thì lúc này đt sẽ xóa rồi (nil) nên xảy a lỗi

Do đó, bạn cần phải dùng p2 đi vòng

(setq ss2 (ssadd))

thực hiện vòng lặp

nếu đúng thì (ssadd) đt vô ss2

rồi lấy ss2 tiếp tục làm công tác ....

thế là không bị lỗ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
gia_bach    1.442
KO ĐƯỢC

nếu (setq dt nil) hoặc (setq dt ()) thì dt ko còn là tập chọn nữa khi này không ssadd dc

- cấp phát biến ss : (setq ss (ssadd)) -> (sslength ss) = 0

- thêm ent vào ss : (ssadd ent ss)

  • 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
elleHCSC    98

Mình nghĩ bạn đang lẫn lộn giữa khái niệm "làm rỗng tập chọn": (setq dt nil) với "xoá đối tượng": (ssdel ent dt) của Acad. Bác Gia_bach và vuvuzela đã giải thích rõ cả rồi. Theo mình hiểu thì nôm na như này:

 

(setq dt (ssget)) = chọn đối tượng - select items --> (setq dt nil) = unselect items, khác hoàn toàn với (ssdel ent dt)- xoá object, loại bỏ object (delete items) khỏi database của ACAD.

 

Chúc vui.

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

Đăng nhập để thực hiện theo  

×