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

#81 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 - 10:16 AM

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
)


Hay quá! Vậy mà mình tưởng (nentsel) và (entsel) chỉ khác cái vụ xuyên qua hay không xuyên qua block thôi chứ!
  • 0

#82 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:20 AM

Hay quá! Vậy mà mình tưởng (nentsel) và (entsel) chỉ khác cái vụ xuyên qua hay không xuyên qua block thôi chứ!

 

Tại bạn không để ý đấy thôi, quan tâm đến (entsel) trả về kết quả gì, (nentsel) trả về kết quả gì khi pick vaof Block, đem chúng ra so sánh sẽ được câu trả lời ^_^


  • 0

#83 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

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

Nhưng coi chừng bạn chọn luôn cả DIM (mặc dầu bản chất sâu xa của Dim là 1 block).


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


#84 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:24 AM

Nhưng coi chừng bạn chọn luôn cả DIM (mặc dầu bản chất sâu xa của Dim là 1 block).

 

sử dụng thêm entget để xử..... .  ^_^


  • 0

#85 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 11:17 AM

entget cũng không phải là đơn giả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.


#86 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 - 11:32 AM

entget cũng không phải là đơn giản.

 

Bác xem ri đã đơn giản chưa ^_^

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

  • 0

#87 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 11:36 AM

Thưa rằng chưa đâu! Nếu đơn giản thế thì đã không comment làm gì. Bác phải test cho nhiều kiểu block nhé!


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


#88 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 - 11:49 AM

Thưa rằng chưa đâu! Nếu đơn giản thế thì đã không comment làm gì. Bác phải test cho nhiều kiểu block nhé!

 

Nếu bác nói chưa được thì đưa ra ví dụ đi,

Cái INSERT thường được tạo ra sau cùng trong mớ list danh sách đó, kể cả Block trong Block

Mình nghĩ nó rất đơn giản ^_^


  • 0

#89 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 - 11:57 AM

Đúng đấy bác ạ, không đơn giản như mình nghĩ.

Nếu gọi (nentsel) rồi bác pick vào một thuộc tính bên trong block thì có cho ra kết quả giống y sì so với (entsel), đến nỗi không thể phân biệt được.


  • 0

#90 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 - 12:01 PM

Đúng đấy bác ạ, không đơn giản như mình nghĩ.

Nếu gọi (nentsel) rồi bác pick vào một thuộc tính bên trong block thì có cho ra kết quả giống y sì so với (entsel), đến nỗi không thể phân biệt được.

 

Nếu bạn test code có vấn đề lỗi với code cuối cùng của mình ở bài #86 thì phiền bạn đưa ví dụ lên đi....


  • 0

#91 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 12:22 PM

Help of nentsel


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


#92 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 - 12:36 PM

Nó đây bác ạ! Bác thử code ở #86 trên bản vẽ này, chỉ vào một Attribute thì sẽ có kết quả thôi mà!
http://www.cadviet.c...attribute_2.dwg


  • 0

#93 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 01:30 PM

Hình như bạn Polyline chỉ hỏi về các hàm ở #77 cho vui mà không cần nên không test thử có ổn khô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.


#94 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 - 01:45 PM

Nó đây bác ạ! Bác thử code ở #86 trên bản vẽ này, chỉ vào một Attribute thì sẽ có kết quả thôi mà!
http://www.cadviet.c...attribute_2.dwg

 

Hì, có phức tạp tí mà thấy cũng đơn giản. Bạn test code :

(defun c:nent (/ e e1) (vl-load-com)
(setq e (nentsel "\n Pick vao doi tuong :"))
(if (= (type (setq e1 (last (last e)))) 'ENAME)
 (if (= (cdr(assoc 0 (entget e1))) "INSERT")
   (alert (strcat "Ban dang pick vao Block ten ENAME: " (vl-princ-to-string e1) ))
 )
)
 (if (= (cdr(assoc 0 (entget (car e)))) "ATTRIB")
    (alert (strcat "Ban dang pick vao Block ten ENAME: "
                           (vl-princ-to-string (setq e1 (cdr(assoc 330 (entget (car e))) )))))
 )
 E1
)
(defun c:nent (/ e e1)
(setq e (nentsel "\n Pick vao doi tuong :"))
(if (= (type (setq e1 (last (last e)))) 'ENAME)
 (if (= (cdr(assoc 0 (entget e1))) "INSERT")
   (alert (strcat "Ban dang pick vao Block ten ENAME: " (vl-princ-to-string e1) ))
 )
)
 (if (= (cdr(assoc 0 (entget (car e)))) "ATTRIB")
    (alert (strcat "Ban dang pick vao Block ten ENAME: "
  (vl-princ-to-string (cdr(assoc 330 (entget (car e))) ))))
 )
 e
)

  • 1

#95 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 - 01:50 PM

Hình như bạn Polyline chỉ hỏi về các hàm ở #77 cho vui mà không cần nên không test thử có ổn không?

Rồi mà bạn! Bạn thử chạy code ở #86, khi pick vào khung màu tím thì nó nhận ra block, nhưng pick vào text thuộc tính thì nhận được kết quả là:
Command: nent
Pick vao doi tuong :0.0

Command:
  • 0

#96 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 01:56 PM

Rồi mà bạn! Bạn thử chạy code ở #86, khi pick vào khung màu tím thì nó nhận ra block, nhưng pick vào text thuộc tính thì nhận được kết quả là:
Command: nent
Pick vao doi tuong :0.0

Command:

Tôi hỏi bài #77 cơ 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.


#97 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 September 2013 - 09:54 PM

Hì, có phức tạp tí mà thấy cũng đơn giản. Bạn test code :

 


Mọi thứ phức tạp đều trở nên đơn giản nếu ta biết được - bằng cách nào đó - sự phức tạp của nó.

Tuy nhiên, sau 3 lần "đơn giản" thì phân sau cùng số vẫn chưa thể "đơn giản" được.


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


#98 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 21 September 2013 - 06:40 AM

Mọi thứ phức tạp đều trở nên đơn giản nếu ta biết được - bằng cách nào đó - sự phức tạp của nó.

Tuy nhiên, sau 3 lần "đơn giản" thì phân sau cùng số vẫn chưa thể "đơn giản" được.

 

Hì , có lỗi gì bác cứ nói toẹc ra và đưa ví dụ lên đi, cứ thấy bác viết bài như vậy, chán òm..........


  • 0

#99 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 - 09:22 AM

các anh cho em hỏi: (ssget '(2 2)) là chọn đối tượng đi qua 1 điểm (2 2)

Giờ em muốn chọn 2 đối tượng đi qua 2 điểm (2 2) và (10 10) (hoặc đi qua 3 điểm, 4 điểm) thì phải viết thế nào , em viết (ssget '(2 2) '(10 10)) nhưng không được  :D


  • 0

#100 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 - 11:12 AM

các anh cho em hỏi: (ssget '(2 2)) là chọn đối tượng đi qua 1 điểm (2 2)

Giờ em muốn chọn 2 đối tượng đi qua 2 điểm (2 2) và (10 10) (hoặc đi qua 3 điểm, 4 điểm) thì phải viết thế nào , em viết (ssget '(2 2) '(10 10)) nhưng không được  :D

Hề hề hề,

Vậy là Không "hieuroi".....

Muốn như vậy bạn cần tạo một list bao gồm các point mà bạn muốn. 

Sau đó tạo một vòng lặp qua các point này và tại mỗi point thì sử dụng cái hàm (ssget point) này để lấy tập đối tượng đi qua điểm đó, chuyển nó thành list bao gồm các ename của các đối tượng được chọn . Dùng hàm append để nối các enmae này thành một list các ename được chọn rồi lại chuyển ngược từ list các ename này thành tên tập chọn.

Công việc này nếu bạn có cài express tools thì khá dễ dàng, bằng không bạn sẽ phải viết các hàm con cho nó.

Hãy làm thử đi nhé. Nếu không được mình sẽ hỗ trợ.


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