Đến nội dung


Hình ảnh
- - - - -

[nhờ viết Code] Các bác viết giúp e code chọn đối tượng theo thứ tự vị trí trên Model


  • Please log in to reply
6 replies to this topic

#1 matukute

matukute

    Chưa sử dụng CAD

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

Đã gửi 13 January 2013 - 01:13 AM

Ý của em là thế này dùng chuột quét chọn một vùng các đối tượng ( toàn block, hoặc toàn Text ,..) list trả về một danh sách với nội dung là các Entity name được đặt thứ tự theo thứ tự của chúng trên không gian Model mà không phụ thuộc vào thứ tự quét chọn của người dùng)
Thứ tự đó là:
  • ưu tiên X trước( X nhỏ hơn thì đặt trước, cùng X thì xét Y)
  • ưu tiên Y sau ( Y lớn hơn thì chọn trước Y nhỏ hơn thì chọn sau)


Kiểu như bài trong thùng rác này(hix- hi vọng bài mình không vô thùng rác luôn)
http://www.cadviet.c...showtopic=64324
(lưu ý: cách diễn đạt trên của em không hay bằng cách diễn đạt của bạn ấy, nếu không rõ yêu cậu các bác có thể đọc ở link post trên)
Hiện tại em đang có

(defun W ();( / LL LL1 LL2 j i ss )
(vl-load-com)
(defun IN (ss)
(foreach i ss
(princ i)
(princ "\n")
(princ)
))
(setq ss (acet-ss-to-list (ssget '(( 0 . "TEXT")))))
(progn
(setq LL (list)
LL1 (list)
LL2 (list)
j 0)
(foreach i ss
(setq LL (append LL
(list
(cons j (list i (cdr(assoc 10 (entget i)))))
)
))
(setq j (1+ j))
)
(foreach i LL
(setq LL1 (append LL1 (list(cons (car i) (cadr i)))))
(setq LL2 (append LL2 (list(cons (car i) (caddr i))))))
(progn
(princ "\n LL \n")
(in LL)
(princ "\n LL1 \n")
(in LL1)
(princ "\n LL2 \n")
(in LL2)
)
)
;;xap xep list LL theo nguyen tac uu tien X nho hon, sau do uu tien Y nho hon
;;??????
)
List LL là list với nội dung là
( (0 entiny_0 các_tọa_độ_DXF10_cua_0) (1 entiny_0 các_tọa_độ_DXF10_cua_1) (...) (...) )

List LL1 là list với nội dung là
( (0 entiny_0 ) (1 entiny_0 ) (...) (...) )

List LL1 là list với nội dung là
( (0 các_tọa_độ_DXF10_cua_0) (1 các_tọa_độ_DXF10_cua_1 ) (...) (...) )

Xin các bác cho ý kiến về Code, hoặc viết thành phẩm luôn thì càng tốt giúp em mục đích trên
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 January 2013 - 09:24 AM

Lisp sắp xếp các đối tượng Text được chọn theo thứ tự X tăng dần. Nếu X bằng nhau thì sắp xếp theo Y giảm dần.

;Doan Van Ha - CADViet.com - Ngay 13/01/2013
;Chuc nang: sap xep cac doi tuong text theo thu tu X tang dan. Neu X bang nhau thi sap xep theo Y giam dan.
(defun C:HA(/ ss px py)
(vl-load-com)
(princ "\nChon cac Texts...")
(if (setq ss (ssget '((0 . "Text"))))
(setq lst
(vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
'(lambda (x y)
(if (not (equal (car (setq px (assoc 10 (entget x)))) (car (setq py (assoc 10 (entget y)))) 1E-3))
(> (car px) (car py))
(< (cadr px) (cadr py))))))))

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


#3 matukute

matukute

    Chưa sử dụng CAD

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

Đã gửi 13 January 2013 - 10:01 AM

Lisp sắp xếp các đối tượng Text được chọn theo thứ tự X tăng dần. Nếu X bằng nhau thì sắp xếp theo Y giảm dần.

Cảm ơn bác, cho em thêm 5, 10 năm nữa chắc không có được tư duy như bác, code rất ngắn gọn, chúc bác khỏe thành công trong cuộc sống, cảm ơn bác
  • 1

#4 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 13 January 2013 - 10:17 AM

Ý của em là thế này dùng chuột quét chọn một vùng các đối tượng ( toàn block, hoặc toàn Text ,..) list trả về một danh sách với nội dung là các Entity name được đặt thứ tự theo thứ tự của chúng trên không gian Model mà không phụ thuộc vào thứ tự quét chọn của người dùng)
Thứ tự đó là:

  • ưu tiên X trước( X nhỏ hơn thì đặt trước, cùng X thì xét Y)
  • ưu tiên Y sau ( Y lớn hơn thì chọn trước Y nhỏ hơn thì chọn sau)



Kiểu như bài trong thùng rác này(hix- hi vọng bài mình không vô thùng rác luôn)
http://www.cadviet.c...showtopic=64324
(lưu ý: cách diễn đạt trên của em không hay bằng cách diễn đạt của bạn ấy, nếu không rõ yêu cậu các bác có thể đọc ở link post trên)
Hiện tại em đang có

(defun W ();( / LL LL1 LL2 j i ss )
(vl-load-com)
(defun IN (ss)
(foreach i ss
(princ i)
(princ "\n")
(princ)
))
(setq ss (acet-ss-to-list (ssget '(( 0 . "TEXT")))))
(progn
(setq LL (list)
LL1 (list)
LL2 (list)
j 0)
(foreach i ss
(setq LL (append LL
(list
(cons j (list i (cdr(assoc 10 (entget i)))))
)
))
(setq j (1+ j))
)
(foreach i LL
(setq LL1 (append LL1 (list(cons (car i) (cadr i)))))
(setq LL2 (append LL2 (list(cons (car i) (caddr i))))))
(progn
(princ "\n LL \n")
(in LL)
(princ "\n LL1 \n")
(in LL1)
(princ "\n LL2 \n")
(in LL2)
)
)
;;xap xep list LL theo nguyen tac uu tien X nho hon, sau do uu tien Y nho hon
;;??????
)
List LL là list với nội dung là
( (0 entiny_0 các_tọa_độ_DXF10_cua_0) (1 entiny_0 các_tọa_độ_DXF10_cua_1) (...) (...) )

List LL1 là list với nội dung là
( (0 entiny_0 ) (1 entiny_0 ) (...) (...) )

List LL1 là list với nội dung là
( (0 các_tọa_độ_DXF10_cua_0) (1 các_tọa_độ_DXF10_cua_1 ) (...) (...) )

Xin các bác cho ý kiến về Code, hoặc viết thành phẩm luôn thì càng tốt giúp em mục đích trên

Hề hề hề,
Bạn cần nói rõ cái thứ tự của bạn được chọn theo thuộc tính nào của đối tượng vì một đối tượng có nhiều thuộc tính lắm bạn ạ. Nếu không nói rõ thì việc sắp xếp có khi lại lộn xộn hơn là để nguyên đó.
Hề hề hề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 VoHoan

VoHoan

    biết lệnh move

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

Đã gửi 31 January 2013 - 08:56 AM

Mình có vấn đề này cần hỏi các bác trên CV: Khi dùng lệnh "LI" đế lấy diện tích của 1 hình kín, làm cách nào đế gán giá trị diện tích đó cho 1 biến đế sử dụng cho mục đích khác?
Nhờ các bác chỉ giúp thuật toán hay viết code giúp với nhé!
PS: Vì vấn đề nhỏ nên không muốn lập topic mới, ghé nhờ topic này tạm vậy.
  • 0

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 January 2013 - 09:00 AM

Mình có vấn đề này cần hỏi các bác trên CV: Khi dùng lệnh "LI" đế lấy diện tích của 1 hình kín, làm cách nào đế gán giá trị diện tích đó cho 1 biến đế sử dụng cho mục đích khác?
Nhờ các bác chỉ giúp thuật toán hay viết code giúp với nhé!

Sau khi lấy diện tích hình kín bằng "LI"
-> Bạn dùng dòng này để lấy diện tích của hình kín đó :
(getvar "area")
  • 1

#7 VoHoan

VoHoan

    biết lệnh move

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

Đã gửi 31 January 2013 - 09:03 AM

Sau khi lấy diện tích hình kín bằng "LI"
-> Bạn dùng dòng này để lấy diện tích của hình kín đó :
(getvar "area")

Đơn giản vậy thôi à. Cảm ơn Tue_NV nhé.
  • 0