Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 14 January 2011 - 11:50 AM

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
  • 0
Hình đã gửi

#2 elleHCSC

elleHCSC

    biết lệnh copy

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

Đã gửi 14 January 2011 - 11:55 AM

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ỉ ?
  • 0
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN

#3 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 14 January 2011 - 12:27 PM

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

  • 1

#4 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 14 January 2011 - 01:14 PM

(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
  • 0
Hình đã gửi

#5 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 14 January 2011 - 02:28 PM

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
:)
  • 1

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#6 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 14 January 2011 - 02:30 PM

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

#7 elleHCSC

elleHCSC

    biết lệnh copy

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

Đã gửi 14 January 2011 - 03:22 PM

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.
  • 0
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN