Đến nội dung


Hình ảnh
- - - - -

Làm sao để trừ 2 tập hợp chọn với nhau?


  • Please log in to reply
18 replies to this topic

#1 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 10 December 2010 - 09:58 AM

Tôi có 2 tập hợp chọn ss1 và ss2, trong đó:
- Tập hợp chọn ss1 gồm n phần tử, tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn).
- Tập hợp chọn ss2 gồm m phần tử (m>n), trong đó chứa n phần tử của ss1 và (m-n) phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ).
- Làm sao để tạo được tập hợp chọn ss3 chỉ chứa (m-n) phần tử không bị đánh dấu xóa. Ai biết xin chỉ giùm, rất cám ơn.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 10 December 2010 - 10:16 AM

Tôi có 2 tập hợp chọn ss1 và ss2, trong đó:
- Tập hợp chọn ss1 gồm n phần tử, tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn).
- Tập hợp chọn ss2 gồm m phần tử (m>n), trong đó chứa n phần tử của ss1 và (m-n) phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ).
- Làm sao để tạo được tập hợp chọn ss3 chỉ chứa (m-n) phần tử không bị đánh dấu xóa. Ai biết xin chỉ giùm, rất cám ơn.

Không hiểu ý của bạn?
Thế nào là tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn)
Bạn vui lòng nói rõ hơn nhé?
  • 0

#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 10 December 2010 - 10:46 AM

Không hiểu ý của bạn?
Thế nào là tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn)
Bạn vui lòng nói rõ hơn nhé?

Như thế này: một đối tượng khi được chọn sẽ có 1 cái tên. Sau khi chọn xong, ta xóa đối tượng đó đi nhưng tên tuổi nó vẫn còn trong cơ sở dữ liệu, gọi là phần tử đã bị đánh dấu xóa. Còn phần tử được chọn mà vẫn còn tồn tại trên bản vẽ gọi là phần tử không bị đánh dấu xóa.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#4 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 10 December 2010 - 10:52 AM

Tôi có 2 tập hợp chọn ss1 và ss2, trong đó:
- Tập hợp chọn ss1 gồm n phần tử, tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn).
- Tập hợp chọn ss2 gồm m phần tử (m>n), trong đó chứa n phần tử của ss1 và (m-n) phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ).
- Làm sao để tạo được tập hợp chọn ss3 chỉ chứa (m-n) phần tử không bị đánh dấu xóa. Ai biết xin chỉ giùm, rất cám ơn.

Bạn dùng thử mấy dòng này xem
(setq ss1 (acet-ss-to-list ss1))
(setq ss2 (acet-ss-to-list ss2))
(foreach n ss1
(setq ss3 (vl-remove n ss2))
)
(setq ss3 (acet-list-to-ss ss3))

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#5 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 10 December 2010 - 10:56 AM

Không hiểu ý của bạn?
Thế nào là tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn)
Bạn vui lòng nói rõ hơn nhé?

Theo em hiểu thì các đối tượng trong bản vẽ khi bị xóa bằng lệnh erase sẽ không bị loại khỏi cơ sở dữ liệu của bản vẽ cho đến khi ta đóng bản vẽ lại (toàn bộ liệu này được ghi ra 1 file tạm nằm trong %temp% - có lẽ để phục vụ cho lệnh undo) Điều đó có nghĩa là toàn bộ record của đối tượng được bảo toàn nguyên vẹn và không một đối tượng nào tạo mới sau đó được phép có record (cụ thể là các giá trị mô tả Handle và ename của đối tượng) trùng với record của các đối tượng đã bị xóa. các đối tượng đó được gọi là đối tượng bị đánh dấu xóa như cách gọi ở trên
@Doan van Ha: các hàm SSDEL, SSADD có lẽ thỏa mãn nhu cầu của bạn
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 10 December 2010 - 11:25 AM

Tôi có 2 tập hợp chọn ss1 và ss2, trong đó:
- Tập hợp chọn ss1 gồm n phần tử, tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn).
- Tập hợp chọn ss2 gồm m phần tử (m>n), trong đó chứa n phần tử của ss1 và (m-n) phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ).
- Làm sao để tạo được tập hợp chọn ss3 chỉ chứa (m-n) phần tử không bị đánh dấu xóa. Ai biết xin chỉ giùm, rất cám ơn.

Chào bạn Doan Van Ha,
Bạn xài thử cái này coi sao. Lưu ý là không nhất thiết tập ss1 của bạn phải là tập con của SS2 nhé. Có điều khi đó chỉ có những phần tử nào có cả trong hai tập chọn mới bị loại khỏi tập ss3.
Trong lisp mình để ngược với bạn, tập ss1 là tập bị trừ (mẹ) và tập ss2 là tập trừ (con) bạn nhé.

(defun c:subss (/ ss1 ss2 lst1 lst2)
(if (= ss1 nil)
(progn
(alert "\n Chon tap doi tuong me")
(setq ss1 (ssget )
lst1 (acet-ss-to-list ss1))
)
)
(if (= ss2 nil)
(progn
(alert "\n Chon tap doi tuong con")
(setq ss2 (ssget)
lst2 (acet-ss-to-list ss2))
)
)
(foreach x lst2
(if (member x lst1)
(setq lst1 (vl-remove x lst1))
)
)
(setq ss3 (acet-list-to-ss lst1))
ss3
)


Trong trường hợp bạn đã có tập ss1 và ss2 rồi thì sẽ không phải chọn đối tượng nữa và lisp sẽ trả cho bạn tập ss3 như bạn cần.
Chúc bạn vui.

@ All: Tiện tay vời yêu cầu của bạn Doan Van Ha, mình làm luôn cái lisp cho phép gộp hai tập chọn thành một tập chọn mới để may ra có bạn nào cần dùng.
Hề hề hề.


(defun c:addss ( / ss1 ss2 lst1 lst2)
(if (= ss1 nil)
(progn
(alert "\n Chon tap doi tuong me")
(setq ss1 (ssget )
lst1 (acet-ss-to-list ss1))
)
)
(if (= ss2 nil)
(progn
(alert "\n Chon tap doi tuong con")
(setq ss2 (ssget)
lst2 (acet-ss-to-list ss2))
)
)
(foreach x lst2
(if (not (member x lst1))
(setq lst1 (cons x lst1))
)
)
(setq ss3 (acet-list-to-ss lst1))
ss3

)

.
..........................
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 10 December 2010 - 02:51 PM

Chào bạn Doan Van Ha,
Bạn xài thử cái này coi sao. Lưu ý là không nhất thiết tập ss1 của bạn phải là tập con của SS2 nhé. Có điều khi đó chỉ có những phần tử nào có cả trong hai tập chọn mới bị loại khỏi tập ss3.
Trong lisp mình để ngược với bạn, tập ss1 là tập bị trừ (mẹ) và tập ss2 là tập trừ (con) bạn nhé.


(defun c:subss (/ ss1 ss2 lst1 lst2)
(if (= ss1 nil)
(progn
(alert "\n Chon tap doi tuong me")
(setq ss1 (ssget )
lst1 (acet-ss-to-list ss1))
)
)
(if (= ss2 nil)
(progn
(alert "\n Chon tap doi tuong con")
(setq ss2 (ssget)
lst2 (acet-ss-to-list ss2))
)
)
(foreach x lst2
(if (member x lst1)
(setq lst1 (vl-remove x lst1))
)
)
(setq ss3 (acet-list-to-ss lst1))
ss3
)


Trong trường hợp bạn đã có tập ss1 và ss2 rồi thì sẽ không phải chọn đối tượng nữa và lisp sẽ trả cho bạn tập ss3 như bạn cần.
Chúc bạn vui.

@ All: Tiện tay vời yêu cầu của bạn Doan Van Ha, mình làm luôn cái lisp cho phép gộp hai tập chọn thành một tập chọn mới để may ra có bạn nào cần dùng.
Hề hề hề.


(defun c:addss ( / ss1 ss2 lst1 lst2)
(if (= ss1 nil)
(progn
(alert "\n Chon tap doi tuong me")
(setq ss1 (ssget )
lst1 (acet-ss-to-list ss1))
)
)
(if (= ss2 nil)
(progn
(alert "\n Chon tap doi tuong con")
(setq ss2 (ssget)
lst2 (acet-ss-to-list ss2))
)
)
(foreach x lst2
(if (not (member x lst1))
(setq lst1 (cons x lst1))
)
)
(setq ss3 (acet-list-to-ss lst1))
ss3

)

.
..........................

Cám ơn sự nhiệt tình của cả 3 bạn. Tiện thể cho hỏi thêm: Làm sao để loại ra khỏi tập SS tất cả các đối tượng đã bị đánh dấu xóa mà ta chưa biết chúng là những thằng nào?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 10 December 2010 - 03:02 PM

Cám ơn sự nhiệt tình của cả 3 bạn. Tiện thể cho hỏi thêm: Làm sao để loại ra khỏi tập SS tất cả các đối tượng đã bị đánh dấu xóa mà ta chưa biết chúng là những thằng nào?

Duyệt qua từng ename của ss -> Kiểm tra đối tượng đã bị xoá chưa bằng hàm vlax-erased-p
Nếu hàm vlax-erased-p trả về T => chứng tỏ đối tượng này đã bị xoá (ename vẫn tồn tại) -> Remove ename ra khỏi tập ss
Làm như thế cho đến ename cuối cùng trong ss
  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 10 December 2010 - 03:07 PM

Duyệt qua từng ename của ss -> Kiểm tra đối tượng đã bị xoá chưa bằng hàm vlax-erased-p
Nếu hàm vlax-erased-p trả về T => chứng tỏ đối tượng này đã bị xoá (ename vẫn tồn tại) -> Remove ename ra khỏi tập ss
Làm như thế cho đến ename cuối cùng trong ss

Sẵn nhờ TUE_NV viết luôn đoạn code đó luôn vì mình... hơi ngu mấy cái hàm VLAX, ACET... Thanks!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 December 2010 - 03:39 PM

@Các bác Tue,Tu,Thai,Binh.... : sao các pác giỏi thế.:undecided:(
  • 0

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


#11 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 10 December 2010 - 04:11 PM

Tôi có 2 tập hợp chọn ss1 và ss2, trong đó:
- Tập hợp chọn ss1 gồm n phần tử, tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn).
- Tập hợp chọn ss2 gồm m phần tử (m>n), trong đó chứa n phần tử của ss1 và (m-n) phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ).
- Làm sao để tạo được tập hợp chọn ss3 chỉ chứa (m-n) phần tử không bị đánh dấu xóa. Ai biết xin chỉ giùm, rất cám ơn.

To Doan Van Ha :
Tò mò 1 chút : Không biết bạn ứng dụng các thao tác trên vào việc gì nhỉ ?


@Các bác Tue,Tu,Thai,Binh.... : sao các pác giỏi thế.:undecided:(

To ketxu :
CadViet chỉ toàn nguời tài ! :wub:
  • 0

#12 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 10 December 2010 - 04:14 PM

Sẵn nhờ TUE_NV viết luôn đoạn code đó luôn vì mình... hơi ngu mấy cái hàm VLAX, ACET... Thanks!

Hề hề hề,
Tranh thủ lúc bác Tue_Nv còn bận, mình làm cái ni theo sự gợi ý của bác ấy, bạn coi thử nhé:

(defun c:chkss ( )
(vl-load-com)
(if (= ss nil)
(setq ss (ssget))
)
(setq n (sslength ss)
i 0
sslst (acet-ss-to-list ss)
(while (< i n)
(setq obj (vlax-ename->vla-object (ssname ss i)))
(if (vlax-erased-p obj)
(setq sslst (vl-remove (ssname ss i) sslst))
)
(setq i (1+ i))
)
(setq ss (acet-list-to-ss sslst))
ss
)


@ketxu:
Hề hề hề, bác chuẩn bị vòng hoa cho mình nhé, mũi sắp nổ rồi . hề hề hề
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 10 December 2010 - 04:51 PM

Hề hề hề,
Tranh thủ lúc bác Tue_Nv còn bận, mình làm cái ni theo sự gợi ý của bác ấy, bạn coi thử nhé:


(defun c:chkss ( )
(vl-load-com)
(if (= ss nil)
(setq ss (ssget))
)
(setq n (sslength ss)
i 0
sslst (acet-ss-to-list ss)
(while (< i n)
(setq obj (vlax-ename->vla-object (ssname ss i)))
(if (vlax-erased-p obj)
(setq sslst (vl-remove (ssname ss i) sslst))
)
(setq i (1+ i))
)
(setq ss (acet-list-to-ss sslst))
ss
)


@ketxu:
Hề hề hề, bác chuẩn bị vòng hoa cho mình nhé, mũi sắp nổ rồi . hề hề hề

Xin tỏ lòng ngưỡng mộ các siêu sao trên CADVIET, vừa giỏi, vừa nhanh, vừa tận tình. Trả lời ý của bạn GIA_BACH: lúc đầu có n đường (bất kỳ về kiểu đối tượng) được chọn, sau đó tôi nối một số đường lại với nhau, tạo thành m đường (m<=n). Các đường tham gia vào việc nối bị mất đi. Việc bây giờ là tìm cách xử lý trên m đường này, thay vì n đường ban đầu. Nếu bạn có cách gì hay hơn nữa thì tung chiêu chứ để trong bụng dạ nhiều nó... đau bụng. Thanks.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 December 2010 - 05:20 PM

To Doan Van Ha :
Tò mò 1 chút : Không biết bạn ứng dụng các thao tác trên vào việc gì nhỉ ?
To ketxu :
CadViet chỉ toàn nguời tài ! :wub:

Sao e CADViet mem mà dốt mãi thế nhỉ :undecided:

@ketxu:
Hề hề hề, bác chuẩn bị vòng hoa cho mình nhé, mũi sắp nổ rồi . hề hề hề

hề hề..bác chuyển hết các đoạn code bác vọc sang e tiếp uản choa,r hãy thăng :">
  • 0

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


#15 npham

npham

    biết lệnh rotate

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

Đã gửi 10 December 2010 - 07:56 PM

Ủa ủa? Không biết có hiểu nhầm ý mấy bác không nữa. Nhưng trừ/cộng 2 tập sao không dùng ssdel, ssadd??
Còn nếu muốn kiểm tra 1 ename có tồn tại trên bản vẽ hay không ta dùng (enget ename)
Kiểm tra 1 ename có tồn tại trong ss hay không ta dùng (ssmemb ename ss)

Này nhé: ssme- sscon
(setq i 0)
(while (setq e (ssname sscon i))
(setq ssme (ssdel e ssme))
(setq i (1+ i))
)
Tất nhiên nếu không chắc cái e của con có nằm trong mẹ hay không ta đặt thêm điều kiện
(if (ssmemb e ssme) (setq ssme (ssdel e ssme)))

ssme+sscon
(setq i 0)
(while (setq e (ssname sscon i))
(setq ssme (ssadd e ssme))
(setq i (1+ i))
)

Không biết có đúng ý của mấy bác đang bàn hay không? sorry. Chúc cuối tuần vui vẻ
  • 1

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 10 December 2010 - 08:17 PM

Ủa ủa? Không biết có hiểu nhầm ý mấy bác không nữa. Nhưng trừ/cộng 2 tập sao không dùng ssdel, ssadd??
Còn nếu muốn kiểm tra 1 ename có tồn tại trên bản vẽ hay không ta dùng (enget ename)
Kiểm tra 1 ename có tồn tại trong ss hay không ta dùng (ssmemb ename ss)

Này nhé: ssme- sscon

(setq i 0)
(while (setq e (ssname sscon i))
(setq ssme (ssdel e ssme))
(setq i (1+ i))
)

ssme+sscon
(setq i 0)
(while (setq e (ssname sscon i))
(setq ssme (ssadd e ssme))
(setq i (1+ i))
)

Không biết có đúng ý của mấy bác đang bàn hay không? sorry. Chúc cuối tuần vui vẻ

Một ý tưởng hay, dùng các hàm "cổ điển" vẫn đủ. Các bác kia dùng các hàm "hiện đại" cũng tốt luôn. Chỉ 1 vấn đề mà có rất nhiều cách viết hay. Thanks
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#17 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 11 December 2010 - 10:35 AM

Tôi có 2 tập hợp chọn ss1 và ss2, trong đó:
- Tập hợp chọn ss1 gồm n phần tử, tất cả đã bị đánh dấu xóa (đã bị xóa khỏi bản vẽ nhưng tên tuổi vẫn còn).
- Tập hợp chọn ss2 gồm m phần tử (m>n), trong đó chứa n phần tử của ss1 và (m-n) phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ).
- Làm sao để tạo được tập hợp chọn ss3 chỉ chứa (m-n) phần tử không bị đánh dấu xóa. Ai biết xin chỉ giùm, rất cám ơn.


Xin tỏ lòng ngưỡng mộ các siêu sao trên CADVIET, vừa giỏi, vừa nhanh, vừa tận tình.
Trả lời ý của bạn GIA_BACH: lúc đầu có n đường (bất kỳ về kiểu đối tượng) được chọn, sau đó tôi nối một số đường lại với nhau, tạo thành m đường (m<=n). Các đường tham gia vào việc nối bị mất đi. Việc bây giờ là tìm cách xử lý trên m đường này, thay vì n đường ban đầu. Nếu bạn có cách gì hay hơn nữa thì tung chiêu chứ để trong bụng dạ nhiều nó... đau bụng. Thanks.

Đây là hệ quả của việc sử dụng lệnh COMMAND trong lập trình !
Vì COMMAND của Cad chỉ trả về kết quả (mà không cho biết chính xác anh nào tham gia vào việc nối, anh nào bị tam thời xóa).

Nếu bạn xử lí các đối tượng tuần tự thì bạn sẽ biết được chính xác "Các đối tượng tham gia vào việc nối (có database thay đổi)".
Khi đó chả cần phải "tìm các phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ)".
Chiêu này đâu có gì lạ! :undecided:
  • 0

#18 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 11 December 2010 - 11:28 AM

Đây là hệ quả của việc sử dụng lệnh COMMAND trong lập trình !
Vì COMMAND của Cad chỉ trả về kết quả (mà không cho biết chính xác anh nào tham gia vào việc nối, anh nào bị tam thời xóa).

Nếu bạn xử lí các đối tượng tuần tự thì bạn sẽ biết được chính xác "Các đối tượng tham gia vào việc nối (có database thay đổi)".
Khi đó chả cần phải "tìm các phần tử khác không bị đánh dấu xóa (tồn tại trên bản vẽ)".
Chiêu này đâu có gì lạ! :undecided:

Nếu cứ nối tuần tự như Bạn và biết được các đối tượng tham gia vào việc nối thì vấn đề đã đơn giản. Đằng này có hằng hà sa số đối tượng trên bản vẽ, và cũng chẳng biết thằng nào và con nào... hun nhau mới khó. Tụi nó nếu gặp nhau là hun nhau, không gặp thì làm ngơ. Vấn đề là trong vô số đứa nhóc đó, nếu có cặp (ba, bốn...) nào yêu nhau sớm thì ta phải tìm ra được chúng để đưa đi... giáo dưỡng. Hề hề hề. Chuyện vui vậy đó. Dù sao cũng rất cám ơn Bạn.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#19 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 12 December 2010 - 11:08 PM

Mình thấy những gì các bạn đang bàn chỉ cần dùng lệnh select là đủ. Ví dụ có hai tập hợp ss1 và ss2, một vài đối tượng hay cả ss2 đã bị xóa, một vài đối tượng trong ss1 đã biến đổi như line thành pline chẳng hạn. Chỉ cần dùng select
(command "_.select" ss1 "r" ss2 "")
Sau đó lấy lại tập hợp do select trả về (setq ss3 (ssget "P")). Trong ss3 chỉ hiện hữu những đối tượng có thật mà thôi
  • 1