Chuyển đến nội dung
Diễn đàn CADViet
huunhantvxdts

[Nhờ chỉnh sửa] sắp xếp text

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

sao khó quá mình không trả về được tập chọn ss bằng hàm ngược (acet-list-to-ss .....) để làm tiếp mà không được

lisp viết như sau:

(setq ss (ssget '((0 . "*TEXT"))))
(setq k 0.001)
(setq sslst (acet-ss-to-list ss)); tao list ename
(setq ss2 (vl-sort sslst
    '(lambda (e1 e2 / p10e1 p10e2)      ;khai bao ham chuyen dung de xu ly voi 2 doi tuong la e1 e2
(if (equal (cadr(setq p10e1 (cdr(assoc 10 (entget e1)))))
(cadr(setq p10e2 (cdr(assoc 10 (entget e2)))))
k)      ; dieu kien kiem tra neu co toa do Y1 = Y2 voi sai so k thi
        ;neu toa do Y bang nhau thi sap xep Text co X nho hon nen dau
 (< (car p10e1) (car p10e2))
        ;neu toa do Y khac nhau thi( ? ban chu noi ro) minh dat la chon Text co Y nho hon(o duoi)
 (< (cadr p10e1) (cadr p10e2))
 ))
    )
)
(setq ss (acet-list-to-ss ss2)) ; tra lai tâp chọn ss không được

nhờ bạn hướng dẫn tiếp

Hề hề hề, 

Mình chưa rõ bạn sai chỗ nào song mình đã làm thử trực tiếp trên cad của mình thì ra kết quả như sau:

 Command: (setq ssl (acet-ss-to-list (ssget)))

Select objects: Specify opposite corner: 6 found

Select objects:

(<Entity name: 7ef6fab8> <Entity name: 7ef6f9e8> <Entity name: 7ef6f990> 

<Entity name: 7ef6f980> <Entity name: 7ef56e90> <Entity name: 7ef56e88>)

Command: (setq ss (acet-list-to-ss ssl))

<Selection set: 65>

Command: (setq ssl1 (vl-sort ssl '(lambda (e1 e2) (if (equal (cadr (setq p1

(cdr (assoc 10 (entget e1))))) (cadr (setq p2 (cdr (assoc 10 (entget e2)))))

0.001) (< (car p1) (car p2)) (< (cadr p1) (cadr p2))))))

(<Entity name: 7ef6f9e8> <Entity name: 7ef6f990> <Entity name: 7ef56e90>

<Entity name: 7ef56e88> <Entity name: 7ef6fab8> <Entity name: 7ef6f980>)

Command: (setq ss (acet-list-to-ss ssl1))

<Selection set: 6d>

 

Và như vậy chứng tỏ rằng hàm (acet-list-to-ss ....) thực tế đã trả ra một tập chọn mới khác với tập chọn ban đầu:

<Selection set: 65> là khác với <Selection set: 6d> mặc dù hai tập chọn này vẫn có số phần tử là y chang nhau.

Bạn có thể xem trên hai cái list ename của chúng để thấy , chỉ có trật tự của chúng là thay đổi.do việc sort tạo ra. Trên thực tế sau khi sort có thể các tập chọn này sẽ có số phần tử khác nhau nếu như trong tập chọn đầu tiên có các phần tử y hệt nhau (nghĩa là các point trùng nhau cả về các toạ độ x,y,z.)

 

Bạn thử kiểm tra lại cú pháp của hàm vl-sort xem có thừa thiếu chi không vì mình nhìn cũng thấy hoa cả mắt. Đồng thời check lại xem bạn đã có cài phần express tool chưa nhé. Bởi các hàm (acet- ....) này nằm trong bộ express tool bạn ạ.

 

 

 

Command: (setq ssl (acet-ss-to-list (ssget)))
 
Select objects: Specify opposite corner: 6 found
 
Select objects:
(<Entity name: 7ef6fab8> <Entity name: 7ef6f9e8> <Entity name: 7ef6f990> 
<Entity name: 7ef6f980> <Entity name: 7ef56e90> <Entity name: 7ef56e88>)
 
Command: (setq ss (acet-list-to-ss ssl))
<Selection set: 65>
 
Command: (setq ssl1 (vl-sort ssl '(lambda (e1 e2) (if (equal (cadr (setq p1 
(cdr (assoc 10 (entget e1))))) (cadr (setq p2 (cdr (assoc 10 (entget e2))))) 
0.001) (< (car p1) (car p2)) (< (cadr p1) (cadr p2))))))
(<Entity name: 7ef6f9e8> <Entity name: 7ef6f990> <Entity name: 7ef56e90> 
<Entity name: 7ef56e88> <Entity name: 7ef6fab8> <Entity name: 7ef6f980>)
 
Command: (setq ss (acet-list-to-ss ssl1))
<Selection set: 6d>
 
Command: (setq ssl (acet-ss-to-list (ssget)))
 
Select objects: Specify opposite corner: 6 found
 
Select objects:
(<Entity name: 7ef6fab8> <Entity name: 7ef6f9e8> <Entity name: 7ef6f990> 
<Entity name: 7ef6f980> <Entity name: 7ef56e90> <Entity name: 7ef56e88>)
 
Command: (setq ss (acet-list-to-ss ssl))
<Selection set: 65>
 
Command: (setq ssl1 (vl-sort ssl '(lambda (e1 e2) (if (equal (cadr (setq p1 
(cdr (assoc 10 (entget e1))))) (cadr (setq p2 (cdr (assoc 10 (entget e2))))) 
0.001) (< (car p1) (car p2)) (< (cadr p1) (cadr p2))))))
(<Entity name: 7ef6f9e8> <Entity name: 7ef6f990> <Entity name: 7ef56e90> 
<Entity name: 7ef56e88> <Entity name: 7ef6fab8> <Entity name: 7ef6f980>)
 
Command: (setq ss (acet-list-to-ss ssl1))
<Selection set: 6d>
  • 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

 

Hề hề hề, 

Mình chưa rõ bạn sai chỗ nào song mình đã làm thử trực tiếp trên cad của mình thì ra kết quả như sau:

 Command: (setq ssl (acet-ss-to-list (ssget)))

Select objects: Specify opposite corner: 6 found

Select objects:

(<Entity name: 7ef6fab8> <Entity name: 7ef6f9e8> <Entity name: 7ef6f990> 

<Entity name: 7ef6f980> <Entity name: 7ef56e90> <Entity name: 7ef56e88>)

Command: (setq ss (acet-list-to-ss ssl))

<Selection set: 65>

Command: (setq ssl1 (vl-sort ssl '(lambda (e1 e2) (if (equal (cadr (setq p1

(cdr (assoc 10 (entget e1))))) (cadr (setq p2 (cdr (assoc 10 (entget e2)))))

0.001) (< (car p1) (car p2)) (< (cadr p1) (cadr p2))))))

(<Entity name: 7ef6f9e8> <Entity name: 7ef6f990> <Entity name: 7ef56e90>

<Entity name: 7ef56e88> <Entity name: 7ef6fab8> <Entity name: 7ef6f980>)

Command: (setq ss (acet-list-to-ss ssl1))

<Selection set: 6d>

 

Và như vậy chứng tỏ rằng hàm (acet-list-to-ss ....) thực tế đã trả ra một tập chọn mới khác với tập chọn ban đầu:

<Selection set: 65> là khác với <Selection set: 6d> mặc dù hai tập chọn này vẫn có số phần tử là y chang nhau.

Bạn có thể xem trên hai cái list ename của chúng để thấy , chỉ có trật tự của chúng là thay đổi.do việc sort tạo ra. Trên thực tế sau khi sort có thể các tập chọn này sẽ có số phần tử khác nhau nếu như trong tập chọn đầu tiên có các phần tử y hệt nhau (nghĩa là các point trùng nhau cả về các toạ độ x,y,z.)

 

Bạn thử kiểm tra lại cú pháp của hàm vl-sort xem có thừa thiếu chi không vì mình nhìn cũng thấy hoa cả mắt. Đồng thời check lại xem bạn đã có cài phần express tool chưa nhé. Bởi các hàm (acet- ....) này nằm trong bộ express tool bạn ạ.

 

 

 

Command: (setq ssl (acet-ss-to-list (ssget)))
 
Select objects: Specify opposite corner: 6 found
 
Select objects:
(<Entity name: 7ef6fab8> <Entity name: 7ef6f9e8> <Entity name: 7ef6f990> 
<Entity name: 7ef6f980> <Entity name: 7ef56e90> <Entity name: 7ef56e88>)
 
Command: (setq ss (acet-list-to-ss ssl))
<Selection set: 65>
 
Command: (setq ssl1 (vl-sort ssl '(lambda (e1 e2) (if (equal (cadr (setq p1 
(cdr (assoc 10 (entget e1))))) (cadr (setq p2 (cdr (assoc 10 (entget e2))))) 
0.001) (< (car p1) (car p2)) (< (cadr p1) (cadr p2))))))
(<Entity name: 7ef6f9e8> <Entity name: 7ef6f990> <Entity name: 7ef56e90> 
<Entity name: 7ef56e88> <Entity name: 7ef6fab8> <Entity name: 7ef6f980>)
 
Command: (setq ss (acet-list-to-ss ssl1))
<Selection set: 6d>
 
Command: (setq ssl (acet-ss-to-list (ssget)))
 
Select objects: Specify opposite corner: 6 found
 
Select objects:
(<Entity name: 7ef6fab8> <Entity name: 7ef6f9e8> <Entity name: 7ef6f990> 
<Entity name: 7ef6f980> <Entity name: 7ef56e90> <Entity name: 7ef56e88>)
 
Command: (setq ss (acet-list-to-ss ssl))
<Selection set: 65>
 
Command: (setq ssl1 (vl-sort ssl '(lambda (e1 e2) (if (equal (cadr (setq p1 
(cdr (assoc 10 (entget e1))))) (cadr (setq p2 (cdr (assoc 10 (entget e2))))) 
0.001) (< (car p1) (car p2)) (< (cadr p1) (cadr p2))))))
(<Entity name: 7ef6f9e8> <Entity name: 7ef6f990> <Entity name: 7ef56e90> 
<Entity name: 7ef56e88> <Entity name: 7ef6fab8> <Entity name: 7ef6f980>)
 
Command: (setq ss (acet-list-to-ss ssl1))
<Selection set: 6d>

Hồi chiều làm cả buổi nó không trả về được, không biết sao giờ nó trả về được rồi

cám ơn bạn rất nhiều

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

×