Đến nội dung


Hình ảnh
* * - - - 4 Bình chọn

[Hỏi] Hàm ssget trong Autolisp


  • Please log in to reply
149 replies to this topic

#101 hieuroi

hieuroi

    biết vẽ arc

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

Đã gửi 23 October 2013 - 11:23 AM

mình tưởng đơn giản, hóa ra lại phức tạp như vậy, đọc xong chả hiểu mô tê răng rứa chi cả. :D

máy mình có cài Express tools.

Thanks


  • 0

#102 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 23 October 2013 - 12:30 PM

mình tưởng đơn giản, hóa ra lại phức tạp như vậy, đọc xong chả hiểu mô tê răng rứa chi cả. :D

máy mình có cài Express tools.

Thanks

Hề hề hề,

Nếu có cài express tools thì hãy thử làm như sau xem nó ra cái gì nhé:

1/- Nhập trên dòng command:

(setq lst (list '(2 2) '(10 10)))

2/- nhấn enter Cad sẽ trả về trên dòng command list ((2 2) (10 10))

3/- Nhập dòng code loằng ngoằng sau đây:

(foreach p lst (setq ss (acet-list-to ss (append (acet-ss-to-list ss) (acet-ss-to-list (ssget p))))))

4/- Nhấn Enter và nếu bạn thấy xuất hiện một cái tên chi chi đó trên dòng command thì có nghĩa đó là tên của tập chọn các đối tượng đi qua hai điểm (2 2) và (10 10)

 

Hy vọng bạn sẽ Hieuroi......


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

#103 hieuroi

hieuroi

    biết vẽ arc

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

Đã gửi 23 October 2013 - 02:06 PM

hi, làm theo tới bước 2 thì ok, tới bước nhập loằng ngoằng vào thì nó báo lỗi thế này:
 
(foreach p lst (setq ss (acet-list-to ss (append (acet-ss-to-list ss)
(acet-ss-to-list (ssget p))))))
; error: no function definition: ACET-LIST-TO

nó bị gì thế bác?

Nếu mình muốn đi qua nhiều điểm nữa thì chỉ cần thêm điểm đó vào cái lst ở bước 1 phải k bác?
  • 0

#104 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 23 October 2013 - 02:38 PM

hi, làm theo tới bước 2 thì ok, tới bước nhập loằng ngoằng vào thì nó báo lỗi thế này:
 
(foreach p lst (setq ss (acet-list-to ss (append (acet-ss-to-list ss)
(acet-ss-to-list (ssget p))))))
; error: no function definition: ACET-LIST-TO

nó bị gì thế bác?

Nếu mình muốn đi qua nhiều điểm nữa thì chỉ cần thêm điểm đó vào cái lst ở bước 1 phải k bác?

Hề hề hề,

Sorry bạn.

Nó lỗi là do cái ni mình gõ sai chính tả:

(foreach p lst (setq ss (acet-list-to ss (append (acet-ss-to-list ss) (acet-ss-to-list (ssget p))))))

Phải sửa lại thế này:

(foreach p lst (setq ss (acet-list-to-ss (append (acet-ss-to-list ss) (acet-ss-to-list (ssget p))))))

 

Chắc do mình cẩu thả không check lại khi gõ đấy mà.

Cái bạn hỏi thì đúng như vầy, phải thêm vào ở bước 1.


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

#105 hieuroi

hieuroi

    biết vẽ arc

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

Đã gửi 23 October 2013 - 02:58 PM

kakaka, mình đã làm được. :lol:


  • 0

#106 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 14 November 2013 - 03:07 PM

các bác cho em hỏi, khi chọn đối tượng trong bản vẽ cad bằng hàm lisp, nếu em không zoom phần đối tượng được chọn lên màn hình thì không chọn được đối tượng đó, vậy làm sao đối tượng đó nằm ngoài giao diện màn hình đồ họa mà mình vẫn chọn được đối tượng đó (đã biết trước vị trí và vị trí chứa đối tượng này cố định trong bản vẽ)  :)


  • 0

#107 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 14 November 2013 - 03:49 PM

Mình cũng gặp phải trường hợp như vậy và đã nghĩ cách là "Zoom" đến điểm đó rồi trước khi chọn và đã làm được


  • 0

#108 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 14 November 2013 - 03:55 PM

hehe, zoom thì mình cũng đã biết và đang áp dụng, tuy nhiên khi chạy nó cứ cà giựt nên mình thấy không được chuyên nghiệp cho lắm, không biết có cách chọn đối tượng nào mà khi thao tác nó mượt mà, nhẹ nhàng hơn không  :D


  • 0

#109 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 November 2013 - 04:03 PM

Cad nó thế thì đành chịu thế. Hàm ssget còn không cho chọn quá 128 tập chọn nữa cơ. Không biết cad mới thì có sửa số 128 chưa (?).

Zoom nó cà giựt nếu bản vẽ nặng. Với bản vẽ nhẹ thì nó lướt êm hơn. Và bạn có thể zoom bằng hàm vla thì nhanh hơn dùng command.

Ví dụ zoom window bằng vla:

(defun c:zoom1 ()

(setq acadapplic (vlax-get-acad-object))
(setq util (vla-get-utility (vla-get-activedocument acadapplic)))
(setq PT1 (vla-getpoint util nil "\nFirst Point : "))
(setq PT2 (vla-getcorner util PT1 "\nSecond Point : "))
(vla-ZoomWindow acadapplic PT1 PT2)
(princ))


)


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


#110 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 14 November 2013 - 04:16 PM

TẬP CHỌN được hiểu như thế nào vậy bác, là 128 đối tượng được chọn trong bản vẽ, hay là 128 nhóm (tập hợp các đối tượng)  đối tượng được chọn trong bản vẽ đó ?


  • 0

#111 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 November 2013 - 04:22 PM

Hiểu theo nghĩa thứ 2, nhưng cũng ít khi dùng tới đó lắm.


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


#112 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 14 November 2013 - 08:35 PM

các bác cho em hỏi, khi chọn đối tượng trong bản vẽ cad bằng hàm lisp, nếu em không zoom phần đối tượng được chọn lên màn hình thì không chọn được đối tượng đó, vậy làm sao đối tượng đó nằm ngoài giao diện màn hình đồ họa mà mình vẫn chọn được đối tượng đó (đã biết trước vị trí và vị trí chứa đối tượng này cố định trong bản vẽ)  :)

Đối tượng mà bạn chọn là gì? Các đối tượng có điểm chèn: point, text, insert... hoàn toàn có thể chọn được tại mọi điểm ngoài phạm vi màn hình


  • 0

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


#113 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 14 November 2013 - 08:45 PM

Cad nó thế thì đành chịu thế. Hàm ssget còn không cho chọn quá 128 tập chọn nữa cơ. Không biết cad mới thì có sửa số 128 chưa (?).

Zoom nó cà giựt nếu bản vẽ nặng. Với bản vẽ nhẹ thì nó lướt êm hơn. Và bạn có thể zoom bằng hàm vla thì nhanh hơn dùng command.

Ví dụ zoom window bằng vla:

(defun c:zoom1 ()

(setq acadapplic (vlax-get-acad-object))
(setq util (vla-get-utility (vla-get-activedocument acadapplic)))
(setq PT1 (vla-getpoint util nil "\nFirst Point : "))
(setq PT2 (vla-getcorner util PT1 "\nSecond Point : "))
(vla-ZoomWindow acadapplic PT1 PT2)
(princ))


)

Zoom bằng VLA theo tôi nhớ thì không hề nhanh hơn command. và còn bị nhảy dòng tại command screen nữa.


  • 0

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


#114 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 14 November 2013 - 09:23 PM

Đối tượng mà bạn chọn là gì? Các đối tượng có điểm chèn: point, text, insert... hoàn toàn có thể chọn được tại mọi điểm ngoài phạm vi màn hình

đối tượng mình chọn là text, mình dùng ssget để chọn, nhưng khi ở ngoài màn hình thì lại không chọn được,bạn có cao kiến gì không?  :)


  • 0

#115 abcf4ab

abcf4ab

    Chưa sử dụng CAD

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

Đã gửi 14 November 2013 - 09:38 PM

http://www.cadviet.c...3/125711_pl.dwg

chào các anh em,mình mới học cad 3d,mình muốn nối các đường như hình vẽ lại thành 1 đương để sử dụng lệnh SU mong các bác giúp


  • 0

#116 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 November 2013 - 09:39 PM

Zoom bằng VLA theo tôi nhớ thì không hề nhanh hơn command. và còn bị nhảy dòng tại command screen nữa.

Chắc là nhớ nhầm ấy chứ! Điều này dễ kiểm tra bằng cách mở 1 bản vẽ bất kỳ đủ nặng, thử zoom và zoom1 là thấy ngay thôi.


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


#117 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 14 November 2013 - 10:08 PM

đối tượng mình chọn là text, mình dùng ssget để chọn, nhưng khi ở ngoài màn hình thì lại không chọn được,bạn có cao kiến gì không?  :)

Namvanvo dùng (ssget) để chọn nhưng không nói rõ là chọn với cách thức "method" gì?  

Nếu chỉ dùng (ssget) thôi thì chỉ sử dụng chuột mà tự đi quét chọn thôi, ở ngoài màn hình thì tự "Pan" đến đó mà chọn vậy

Còn nếu dùng (ssget "x") thì ở trong lẫn ở ngoài màn hình đều chọn tất.

Vậy ý định của Namvanvo là dùng (ssget) như thế nào?


  • 0

#118 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 14 November 2013 - 10:18 PM

Namvanvo dùng (ssget) để chọn nhưng không nói rõ là chọn với cách thức "method" gì?  

Nếu chỉ dùng (ssget) thôi thì chỉ sử dụng chuột mà tự đi quét chọn thôi, ở ngoài màn hình thì tự "Pan" đến đó mà chọn vậy

Còn nếu dùng (ssget "x") thì ở trong lẫn ở ngoài màn hình đều chọn tất.

Vậy ý định của Namvanvo là dùng (ssget) như thế nào?

sory bác, em nói chung chung quá, em dùng ssget với method "W","C",F" và tọa độ là cố định


  • 0

#119 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 15 November 2013 - 07:43 AM

Bạn có thể dùng như vầy :

(setq a (ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0))))

(command ".erase" a "")

Các bác cho em hỏi là muốn chọn những đối tượng Line có chiều dài nhỏ hơn 100 thì viết code thế nào? em không tìm thấy mã DXF chiều dài của Line của LWPOLYLINE?   :)


  • 0

#120 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 15 November 2013 - 07:56 AM

đối tượng mình chọn là text, mình dùng ssget để chọn, nhưng khi ở ngoài màn hình thì lại không chọn được,bạn có cao kiến gì không?  :)


Bạn sử dụng method "X" nhưng kết hợp filter gồm các toán tử AND, OR, <,<,< và >,>,> cho mã dxf 10 để lọc các đối tượng trong khu vực muốn chọn. Mình gợi ý ban vậy thôi vì vao cadviet bằng đt ko code đc. Nhiều lisp của mình từng post lên cadviet có sử dụng cách này. Bạn có thể tìm để tham khảo
  • 1

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