Đế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

#61 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 11 July 2012 - 10:49 AM

Mấy tuần trước em đã mò ra lệnh SELECTSIMILAR , hehe , có bắc nào thử coi , lệnh này đáp ứng được phần nào yêu cầu về lọc của em rồi :D . 1 lệnh thay cho rất nhiều Lisp lọc đối tượng , bác nào thích thì đặt cho nó phím tắt trong acad.pgp đi còn đợi gì nữa

Mình dùng Cad đời thấp nên đếch có :D
  • 1
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!

#62 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 11 July 2012 - 10:59 AM

Mấy tuần trước em đã mò ra lệnh SELECTSIMILAR , hehe , có bắc nào thử coi , lệnh này đáp ứng được phần nào yêu cầu về lọc của em rồi :D . 1 lệnh thay cho rất nhiều Lisp lọc đối tượng , bác nào thích thì đặt cho nó phím tắt trong acad.pgp đi còn đợi gì nữa

Right click chuột cũng có lệnh này trong popup menu
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#63 saycaphe

saycaphe

    biết vẽ circle

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

Đã gửi 02 July 2013 - 12:43 PM

Các bác giúp em với, em muốn viết câu lệnh xoá toàn bộ các đường tròn có D<200, em viết lệnh chọn các đường tròn có R<100, câu lệnh như sau: 

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

thì trả về kq như thế này 

<selection set : xxx> với xxx là 1 ký tự gì đó.

Các bác chỉnh giúp em với.

Thanks 

(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))
<Selection set: 1f2>
(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))
<Selection set: 1f2>
(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))
<Selection set: 1f2>

  • 0

#64 TaiNguyen79

TaiNguyen79

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 24 (tàm tạm)

Đã gửi 02 July 2013 - 01:50 PM

chọn đc rồi thì xóa đi chứ có gì đâu


  • 1

#65 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 July 2013 - 02:18 PM

Có nhiều cách dùng hàm để delete 1 tập hợp chọn có tên là ss:

(command "erase" ss "")

(acet-ss-entdel ss)

v.v...


  • 1

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


#66 saycaphe

saycaphe

    biết vẽ circle

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

Đã gửi 03 July 2013 - 08:03 AM

chọn đc rồi thì xóa đi chứ có gì đâu

ko chọn được bác ơi, nó chỉ hiện ra <selection set: xxx> chứ nó ko có chọn.

 

Có nhiều cách dùng hàm để delete 1 tập hợp chọn có tên là ss:

(command "erase" ss "")

(acet-ss-entdel ss)

v.v...

Bác viết giúp em câu lệnh xoá các đường tròn đường kính <200 được ko?


  • 0

#67 TaiNguyen79

TaiNguyen79

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 24 (tàm tạm)

Đã gửi 03 July 2013 - 08:11 AM

ko chọn được bác ơi, nó chỉ hiện ra <selection set: xxx> chứ nó ko có chọn.

 

Bác viết giúp em câu lệnh xoá các đường tròn đường kính <200 được ko?

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

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

(command ".erase" a "")


  • 0

#68 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 19 September 2013 - 11:32 AM

Màu đối tượng trong Autocad nằm trong code 62 của đối tượng đó. Nếu code này là có thì nó sẽ mang màu của code đó, nếu không, nó mang màu là bylayer.

Bây giờ mình muốn chọn các đối tượng có màu bylayer, nghĩa là không chứa code 62 trong mã DXF của nó thì câu lệnh gọi (SSGET cần tham số gì?


  • 0

#69 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 19 September 2013 - 11:43 AM

(setq ss (ssget '((-4 . "=") (62 . 256))))


  • 1

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


#70 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 September 2013 - 11:50 AM

(ssget '((62 . 256)))


  • 1

#71 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 19 September 2013 - 02:09 PM

Oh, thật là kỳ diệu! Nghĩa là đối tượng vẫn có mã 62 nhưng hàm (assoc 62 (entget ent)) lại cho ra giá trị rỗng!


  • 0

#72 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 September 2013 - 02:56 PM

Còn việc chọn linetype theo "ByLayer" thì code là : 

(ssget '((6 . "ByLayer")))


  • 0

#73 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 19 September 2013 - 03:18 PM

Rất hay và hữu ích! Nhưng vẫn câu hỏi cũ, mình muốn hỏi rằng liệu có thể chọn đối tượng mà không có một mã code nhất định nào đó không?


  • 0

#74 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 19 September 2013 - 03:33 PM

Rất hay và hữu ích! Nhưng vẫn câu hỏi cũ, mình muốn hỏi rằng liệu có thể chọn đối tượng mà không có một mã code nhất định nào đó không?

Bạn có thể nói rõ hơn không? Hơi khó hiểu.


  • 1

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


#75 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

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

Đã gửi 19 September 2013 - 04:24 PM

Rất hay và hữu ích! Nhưng vẫn câu hỏi cũ, mình muốn hỏi rằng liệu có thể chọn đối tượng mà không có một mã code nhất định nào đó không?

(ssget)


  • 1

#76 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 19 September 2013 - 04:27 PM

Xin lỗi, cách diễn đạt này đúng là khó hiểu thật!

Ví dụ mình muốn chọn tất cả các đối tượng không có dữ liệu mở rộng (mã -3) thì làm thế nào? Có dùng trực tiếp ssget được không hay phải chọn cả rồi lọc đối tượng?


  • 0

#77 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 19 September 2013 - 06:38 PM

Em này:

(ssget '((-4 . "<NOT") (-3 ("*")) (-4 . "NOT>")))

Hoặc em này:

(ssget '((-4 . "<NOT") (-3 ("~")) (-4 . "NOT>")))


  • 2

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


#78 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 20 September 2013 - 09:37 AM

Mình có thêm một thắc mắc về hàm ssget nữa.
Khi dùng (nentsel) để pick vào một text bên trong Block, nó sẽ trả về giá trị của text đơn mà không quan tâm đến block.
Vậy làm sao để chọn được block chứa nó sau 1 lần pick? Và khi sử dụng (nentsel), làm sao để biết mình đã pick vào một block?


  • 0

#79 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 09:46 AM

(entsel) chăng?


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


#80 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 20 September 2013 - 10:00 AM

Mình có thêm một thắc mắc về hàm ssget nữa.
Khi dùng (nentsel) để pick vào một text bên trong Block, nó sẽ trả về giá trị của text đơn mà không quan tâm đến block.
Vậy làm sao để chọn được block chứa nó sau 1 lần pick? Và khi sử dụng (nentsel), làm sao để biết mình đã pick vào một block?

 

Bạn tham khảo code này:

(defun c:nent (/ e)
(setq e (nentsel "\n Pick vao doi tuong :"))
(if (= (type (car (last e))) 'ENAME)
 (progn
   (alert "Ban dang pick vao Block")
  (setq e (car (last e)))  
))
 e
)

  • 1