Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
matukute

[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

Các bài được khuyến nghị

Ý 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à:

  1. ưu tiên X trước( X nhỏ hơn thì đặt trước, cùng X thì xét Y)
  2. ư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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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))))))))

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ý 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à:

  1. ưu tiên X trước( X nhỏ hơn thì đặt trước, cùng X thì xét Y)
  2. ư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ề,...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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")

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×