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

#1 buimanhxd

buimanhxd

    biết pan

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

Đã gửi 22 March 2010 - 11:36 AM

E đang gặp rắc rối với hàm ssget trong autolisp mong các bác trong diễn đàn giúp đỡ.
(ssget '((0 . "TEXT")))
  • 0

#2 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 22 March 2010 - 01:40 PM

E đang gặp rắc rối với hàm ssget trong autolisp mong các bác trong diễn đàn giúp đỡ.
(ssget '((0 . "TEXT")))

Chào bạn buimanhxd,
Bạn gặp rắc rối gì vậy??? Hãy đọc ở đây nhé.

ssget Function


Creates a selection set from the selected object

(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])

Selection sets can contain objects from both paper and model space, but when the selection set is used in an operation, ssget filters out objects from the space not currently in effect. Selection sets returned by ssget contain main entities only (no attributes or polyline vertices).

Arguments

sel-method

A string that specifies the object selection method. Valid selection methods are

C Crossing selection.

CP Cpolygon selection (all objects crossing and inside of the specified polygon).

F Fence selection.

I Implied selection (objects selected while PICKFIRST is in effect).

L Last visible object added to the database.

P Last selection set created.

W Window selection.

WP WPolygon (all objects within the specified polygon).

X Entire database. If you specify the X selection method and do not provide a filter-list, ssget selects all entities in the database, including entities on layers that are off, frozen, and out of the visible screen.

:E Everything within the cursor's object selection pickbox.

:N Call ssnamex for additional information on container blocks and transformation matrices for any entities selected during the ssget operation. This additional information is available only for entities selected via graphical selection methods such as Window, Crossing, and point picks.

Unlike the other object selection methods, :N may return multiple entities with the same entity name in the selection set. For example, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, an so on) to the selection set. The result could be multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report).

:S Allow single selection only.

pt1

A point relative to the selection.

pt2

A point relative to the selection.

pt-list

A list of points.

filter-list

An association list that specifies object properties. Objects that match the filter-list are added to the selection set.

If you omit all arguments, ssget prompts the user with the Select objects prompt, allowing interactive construction of a selection set.

If you supply a point but do not specify an object selection method, AutoCAD assumes the user is selecting an object by picking a single point.

Return Values

The name of the created selection set if successful; otherwise nil if no objects were selected.

Notes on the Object Selection Methods

When using the :N selection method, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, etc.) to the selection set. It is therefore possible to have multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report). Because the :N method does not guarantee that each entry will be unique, code that relies on uniqueness should not use selection sets created using this option.
When using the L selection method in an MDI environment, you cannot always count on the last object drawn to remain visible. For example, if your application draws a line, and the user subsequently minimizes or cascades the AutoCAD drawing window, the line may no longer be visible. If this occurs, ssget with the "L" option will return nil.

Examples

Prompt the user to select the objects to be placed in a selection set:

Command: (ssget)



Create a selection set of the object passing through (2,2):

Command: (ssget '(2 2))

nil

Create a selection set of the most recently selected objects:

Command: (ssget "_P")



Create a selection set of the objects crossing the box from (0,0) to (1,1):

Command: (ssget "_C" '(0 0) '(1 1))



Create a selection set of the objects inside the window from (0,0):

Command: (ssget "_W" '(0 0) '(5 5))



By specifying filters, you can obtain a selection set that includes all objects of a given type, on a given layer, or of a given color. The following example returns a selection set that consists only of blue lines that are part of the implied selection set (those objects selected while PICKFIRST is in effect):

Command: (ssget "_I" '((0 . "LINE") (62 . 5)))



The following examples of ssget require that a list of points be passed to the function. The pt_list variable cannot contain points that define zero-length segments.

Create a list of points:

Command: (setq pt_list '((1 1)(3 1)(5 2)(2 4)))

((1 1) (3 1) (5 2) (2 4))

Create a selection set of all objects crossing and inside the polygon defined by pt_list:

Command: (ssget "_CP" pt_list)



Create a selection set of all blue lines inside the polygon defined by pt_list:

Command: (ssget "_WP" pt_list '((0 . "LINE") (62 . 5)))



The selected objects are highlighted only when ssget is used with no arguments. Selection sets consume AutoCAD temporary file slots, so AutoLISP is not permitted to have more than 128 open at one time. If this limit is reached, AutoCAD refuses to create any more selection sets and returns nil to all ssget calls. To close an unnecessary selection set variable, set it to nil.

A selection set variable can be passed to AutoCAD in response to any Select objects prompt at which selection by Last is valid. AutoCAD then selects all the objects in the selection set variable.

The current setting of Object Snap mode is ignored by ssget unless you specifically request it while you are in the function.

See Also

Selection Set Handling and Selection Set Filter Lists in the AutoLISP Developer's Guide.

Cái này nằm trong Help Developer của CAD. Nếu bạn đọc cái này mà vẫn chưa hiểu thì hãy xem ở đây:

http://www.cadviet.c...2/auto_lisp.doc

Tài liệu này mình download từ diễn đàn CADVIET đó bạn ạ. Hãy chịu khó tìm kiếm sẽ có nhiều thứ đáng xem lắm.

Về cái dòng lệnh cụ thể mà bạn đã post thì biên dịch nó ra là: Hãy chọn các đối tượng thuộc loại TEXT bằng các phương pháp chọn lựa của CAD. Vậy đó, 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.

#3 buimanhxd

buimanhxd

    biết pan

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

Đã gửi 22 March 2010 - 08:43 PM

(ssget '((0 . "TEXT")))
Cám ơn bác nhưng mà số "0" trong dòng lệnh trên có tác dụng gì vậy.
E mới học nên còn hơi gà mong các bác giúp đỡ.
  • 0

#4 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 22 March 2010 - 09:57 PM

(ssget '((0 . "TEXT")))
Cám ơn bác nhưng mà số "0" trong dòng lệnh trên có tác dụng gì vậy.
E mới học nên còn hơi gà mong các bác giúp đỡ.

Số 0 là DXF code, chỉ loại thực thể (Entity Type). Nếu chưa hiểu về DXF code, bạn có thể tham khảo bài này:
http://www.cadviet.c...tent/view/89/1/
Hãy tự đặt mình vào "địa vị" của trình ACAD, khi đọc dòng code trên, nó sẽ hiểu như sau:
- Căn cứ vào số 0 -> "người ta" muốn "mình" lọc Selection Set bằng tiêu chí Entity Type
- String "TEXT" sau dấu chấm: cụ thể hóa cho số 0 ở trước -> mình chỉ cần tìm các đối tượng là TEXT trong vùng mà user đã selected

Chà! Giải thích cho bạn kiểu như trên có lẽ sẽ không có... hồi kết! Đúng hơn là bạn chẳng gặp rắc rối gì cả mà vì bạn chưa nắm được những cái cơ bản. Tóm lại, chịu khó đọc thêm sách và Help, sau đó thực hành -> bạn sẽ hiểu ra ngay thôi mà.
  • 1

#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 15 April 2011 - 12:37 AM

truớc giờ mình dùng nentselp. hôm này chuyển qua dùng cái này (ssget ":E" Point (list (cons 0 filter))) để làm cái hàm con với điều kiện lọc cho nhanh. Nhưng cấu trúc hàm như thế kia là sai. bác nào rành về cách sử dụng ssget giúp mình với.
Ý mình là: Chọn 1 đối tượng tại 1 điểm cho trước với điều kiện lọc filter
  • 0

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


#6 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 15 April 2011 - 01:10 AM

truớc giờ mình dùng nentselp. hôm này chuyển qua dùng cái này (ssget ":E" Point (list (cons 0 filter))) để làm cái hàm con với điều kiện lọc cho nhanh. Nhưng cấu trúc hàm như thế kia là sai. bác nào rành về cách sử dụng ssget giúp mình với.
Ý mình là: Chọn 1 đối tượng tại 1 điểm cho trước với điều kiện lọc filter

Bạn dùng (ssget Point (list (cons 0 filter)))là được.
  • 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!

#7 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 April 2011 - 01:19 AM

Bạn dùng (ssget Point (list (cons 0 filter)))là được.

Oh nhỉ. Mình đúng là ngớ ngẩn :lol:
Cảm ơn bạn!
  • 0

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


#8 saycaphe

saycaphe

    biết vẽ circle

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

Đã gửi 12 September 2011 - 02:09 PM

mình muốn chọn tất cả các đối tượng màu xanh(green) chẳng hạn, thì câu lệnh như thế nào vậy bạn?


(sssetfirst nil (ssget "X" '((62 . 3)))) ko thấy hoạt động :(
  • 0

#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 12 September 2011 - 02:47 PM

Câu lệnh như thế là đúng, sẽ chọn các đối tượng có màu chỉ định 3 (nhưng không chọn các đối tượng màu ByLayer mà Layer màu 3)
  • 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


#10 NTD

NTD

    biết lệnh rotate

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

Đã gửi 01 June 2012 - 04:45 PM

em có 2 đoạn mã như sau :

đoạn mã 1 là :
;;Chuc Nang : Chuyen đối tượng đc chọn vao` 1 lop- Lenh T``
(Defun C:T`` ( ) (princ "\nChuyen Line & PolyLine & SpLine & Mline vao` 1 Layer Tuong-Gach-NetCat:")
(Setq lis (Ssget '((0 . "*"))))
(command ".Chprop" "p" "" "La" "Tuong-Gach-NetCat" "c" "Bylayer" "")
(princ))

đoạn mã 2 là :
;;Chuc Nang : Chuyen Line & PolyLine & SpLine & Mline vao` 1 lop- Lenh T`
(Defun C:T` ( ) (princ "\nChuyen Line & PolyLine & SpLine & Mline vao` 1 Layer Tuong-Gach-NetCat:")
(Setq lis (Ssget '((0 . "*Line"))))
(command ".Chprop" "p" "" "La" "Tuong-Gach-NetCat" "c" "Bylayer" "")
(princ))

- Em đã dùng đấu * để chọn tất cả
- Em đã dùng dấu * đứng trước Line để lọc được tất cả các đối tượng Line & PolyLine & SpLine & Mline . Vấn đề là em muốn thêm cả đối tượng arc vào trong 1 lệnh chọn cả arc cả *Line( các đối tượng có chữ Line ) thì phải làm sao (ko muốn viết thêm 1 lệnh nữa cho arc , vì như vậy mất time thao tác ) , các bác giúp em với
- Câu hỏi lớn hơn 1 chút nữa là em muốn lọc nhiều đối tượng với nhiều tính chất trong 1 lệnh thì làm sao ? VD :chức năng y như đoạn mã 2 nhưng lọc thêm các đối tượng có mầu 4 và Linetype không phải là Bylayer
- Lọc kiểu loại trừ thì sao ? VD : Chỉ chọn đối tượng ko phải là Hatch và Dim

Các bác đừng bảo em dùng lệnh Filter nhé , em muốn lọc trong 1 đoạn mã LSP để viết lệnh riêng
Cảm ơn mọi góp ý của các bác
  • 0

#11 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 01 June 2012 - 05:06 PM

Trả lời câu hỏi nhỏ trước:
(0 . "*LINE,ARC")
Các câu hỏi khó hơn: bạn tìm đọc các điều kiện lọc của hàm ssget trong help xem. Khi chưa làm được thì sẽ giúp, vì lọc nhiều điều kiện thì hơi phức tạp. Chú ý các điều kiện AND, OR, NOT.
  • 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.


#12 NTD

NTD

    biết lệnh rotate

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

Đã gửi 02 June 2012 - 08:54 AM

Cảm ơn bác
(0 . "*LINE,ARC") , chuẩn luôn thêm dấu phẩy thôi mà em ko biết ,
Bác nào trả lòi đc câu hỏi khó thì giúp em với , em tập tọe chế Lisp theo mấy cái sẵn có nên ko nắm đc cái gốc cơ bản ---> đọc mấy cái cao siêu ngay ko hiểu ngay đc . Nhưng lại đang cần chế mấy cái Lisp ... cao siêu cho công việc hiện tại . Mục đích cuối cùng của em vẫn là giải quyết đc việc nhanh hơn hiệu quả hơn trong việc vẽ CAD = LISP mà thôi , Lập trình viết LISP em xin học theo các bác ... cho nó ngấm nhanh hơn :D
  • 0

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 June 2012 - 09:11 AM

Bạn hãy tìm hiều thêm các mã dxf khác. Ví dụ màu là 62, linetype là 6... Sau đó viết nối tiếp vào phần (0 . "...") thành (0 . "...")(62 . 4)(6 . ....)
  • 1

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


#14 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 02 June 2012 - 10:59 AM

- Em muốn lọc nhiều đối tượng với nhiều tính chất trong 1 lệnh thì làm sao ? VD :chức năng y như đoạn mã 2 nhưng lọc thêm các đối tượng có mầu 4 và Linetype không phải là Bylayer
- Lọc kiểu loại trừ thì sao ? VD : Chỉ chọn đối tượng ko phải là Hatch và Dim

- Lọc thêm màu 4, và Linetype không phải Bylayer:
(setq ss (ssget '((0 . "*LINE") (62 . 4) (-4 . "<NOT") (6 . "Bylayer") (-4 . "NOT>"))))
- Lọc loại trừ Dim và Hatch:
(setq ss (ssget '((-4 . "<NOT") (-4 . "<OR") (0 . "HATCH") (0 . "DIMENSION") (-4 . "OR>") (-4 . "NOT>"))))
Bạn đọc thêm bài ở link dưới đây để thấy lọc là khá phức tạp:
http://xaydungit.vn/...ực-số-nguyên...
  • 3

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


#15 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 June 2012 - 11:15 AM

1./- Lọc thêm màu 4, và Linetype không phải Bylayer:
(setq ss (ssget '((0 . "*LINE") (62 . 4) (-4 . "<NOT") (6 . "Bylayer") (-4 . "NOT>"))))
2./ Lọc loại trừ Dim và Hatch:
(setq ss (ssget '((-4 . "<NOT") (-4 . "<OR") (0 . "HATCH") (0 . "DIMENSION") (-4 . "OR>") (-4 . "NOT>"))))
Bạn đọc thêm bài ở link dưới đây để thấy lọc là khá phức tạp:
http://xaydungit.vn/...-nguy%C3%AAn...

Tue_NV viết gọn lại 1 tí :

1./- Lọc thêm màu 4, và Linetype không phải Bylayer:
(setq ss (ssget '((0 . "*LINE") (62 . 4) (6 . "~Bylayer") )))
2./ Lọc loại trừ Dim và Hatch:
(setq ss (ssget '((-4 . "<NOT") (0 . "HATCH,DIMENSION") (-4 . "NOT>"))))
Hoặc:
(setq ss (ssget '((0 . "~HATCH") (0 . "~DIMENSION"))))

Bạn NTD đọc thêm trong Help về hàm WCMATCH
Cách sử dụng Wild-card characters
  • 5

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 03 June 2012 - 02:12 PM

......
Bạn đọc thêm bài ở link dưới đây để thấy lọc là khá phức tạp:
http://xaydungit.vn/...-nguy%C3%AAn...

Trong đường Link trên -> bác viết là :
(princ "\nChon cac text la so thuc...")
(setq so (ssget '((0 . "*TEXT") (1 . "~*[~-0--9]*")))))
->> Các Text số thực hoặc Text số nguyên mà có khoảng trắng phía trước thì không còn đúng nữa
Ví dụ như Text
" 3.3" sẽ không được chọn

Sẽ là thiếu sót khi User vô ý thêm space phía trước Text số

PS: Chọn số thực theo code trên bao hàm luôn cả số nguyên luôn. Mình đã viết xong lisp chọn Text, Mtext là số nguyên, số thực ở đây :
http://www.cadviet.c...=0
  • 1

#17 NTD

NTD

    biết lệnh rotate

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

Đã gửi 04 June 2012 - 03:52 PM

Tue_NV viết gọn lại 1 tí :

1./- Lọc thêm màu 4, và Linetype không phải Bylayer:
(setq ss (ssget '((0 . "*LINE") (62 . 4) (6 . "~Bylayer") )))
2./ Lọc loại trừ Dim và Hatch:
(setq ss (ssget '((-4 . "<NOT") (0 . "HATCH,DIMENSION") (-4 . "NOT>"))))
Hoặc:
(setq ss (ssget '((0 . "~HATCH") (0 . "~DIMENSION"))))

Bạn NTD đọc thêm trong Help về hàm WCMATCH
Cách sử dụng Wild-card characters



Cảm ơn các bác , các bác chỉ em toàn thứ cao siêu em chưa ngấm vào luôn đc có bác Tue_NV chỉ em mấy chiêu như sư dụng dấu ngã ~ để loại trừ chẳng hạn em thấy đoạn mã lọc ngắn gọn dễ hiểu hơn vì dấu ngã ~ ở đây có chức năng loại trừ y như dấu ngã khi dùng lệnh LAYWALK để loại trừ khỏi danh sách chọn các Layer

Đây là cách hiểu của em các bác góp ý cho xem hiểu nhầm ko ? nếu thiếu xin các bác chỉ thêm cho

* : Ký hiệu bất kỳ , bao nhiêu cũng đc , ko có cũng OK
~ : Nghịch đảo hay loại trừ các ký tự đứng sau nó
@ : Đại diện cho 1 ký tự là chữ cái bất kỳ & chỉ 1 ký tự mà thôi
# : Đại diện cho 1 ký tự là chữ số bất kỳ & chỉ 1 ký tụ mà thôi & chỉ 1 ký tự mà thôi
dấu chấm . : Đại diện cho 1 ký tự trong các ký tự sau ~ ! @ # $ % & ( ) , bao nhiêu ký tự trong dãy ký tự này cũng đc
  • 0

#18 NTD

NTD

    biết lệnh rotate

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

Đã gửi 04 June 2012 - 04:03 PM

mình muốn chọn tất cả các đối tượng màu xanh(green) chẳng hạn, thì câu lệnh như thế nào vậy bạn?


(sssetfirst nil (ssget "X" '((62 . 3)))) ko thấy hoạt động :(

Câu lệnh như thế là đúng, sẽ chọn các đối tượng có màu chỉ định 3 (nhưng không chọn các đối tượng màu ByLayer mà Layer màu 3)


Em cũng đang rất thắc mắc vấn đề này : Làm sao để viết 1 đoạn mã lọc ra đc các đối tượng có mầu là ByLayer mà các Layer chứa các đối tượng đó có chung 1 mầu nào đó , mầu 3 chẳng hạn ?
Mong các bắc cao thủ viết dùm em LISP nè , cảm ơn nhiều nhiều
  • 0

#19 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 04 June 2012 - 05:02 PM

Lisp chọn các đối tượng có màu 3 (Green), bất kể Bylayer hay không Bylayer.

;Doan Van Ha - CADViet.com - Ngay 04/6/2012
;Muc dich: Chon cac doi tuong co mau 3 (bylayer hoac non_bylayer).
(defun C:HA( / ss entlst mau)
(setq mau (getint "\nNhap so nguyen chi mau muon chon: "))
(if (not (<= 0 mau 256)) (progn (alert "So cua mau phai nam trong doan 0-256.") (exit)))
(princ "\nChon doi tuong...")
(setq ss (ssget) ss1 (ssadd))
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(foreach ent entlst
(if
(or
(= (cdr (assoc 62 (entget ent))) mau)
(= (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 (entget ent)))))) mau))
(setq ss1 (ssadd ent ss1))))
(sssetfirst nil ss1))
P/S: đã sửa để chọn theo màu user nhập và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.


#20 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 05 June 2012 - 07:56 AM

mình muốn chọn tất cả các đối tượng màu xanh(green) chẳng hạn, thì câu lệnh như thế nào vậy bạn?
.................................
Em cũng đang rất thắc mắc vấn đề này : Làm sao để viết 1 đoạn mã lọc ra đc các đối tượng có mầu là ByLayer mà các Layer chứa các đối tượng đó có chung 1 mầu nào đó , mầu 3 chẳng hạn ?
Mong các bắc cao thủ viết dùm em LISP nè , cảm ơn nhiều nhiều

Tham khảo : Lisp chọn các đối tượng cùng màu
hay : Lisp chọn các đối tượng theo màu hay linetype
link :
- Viết lisp theo yêu cầu [phần 2] # 6
- Viết lisp theo yêu cầu [phần 2] #8
  • 1