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

[Nhờ viết lisp] Tìm đối tượng Point có Position Z nhỏ nhất hoặc lớn nhất

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

Bản vẽ của em có 1 loạt điểm point với Position Z khác nhau. Em xin nhờ các bác viết lisp tìm điểm point có Position Z nhỏ nhất và lớn nhất trong các điểm point có trong 1 vùng lựa chọn nào đó.

Thứ tự thực hiện kiểu như sau:

- lệnh pmin -> quét chọn vùng chứa các điểm point -> kết quả chọn được điểm point có Position Z nhỏ nhất.

- lệnh pmax -> quét chọn vùng chứa các điểm point -> kết quả chọn được điểm point có Position Z lớn nhất.

Em cám ơn 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

Quick code:

	(defun C:PMAX( / lst) ; Max
 (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex  (ssget '((0 . "POINT")))))))
 (sssetfirst nil (ssadd (car (vl-sort lst '(lambda (e1 e2)  (> (cadddr (assoc 10 (entget e1))) (cadddr (assoc 10 (entget e2))))))))))
(defun C:PMIN( / lst) ; Min
 (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex  (ssget '((0 . "POINT")))))))
 (sssetfirst nil (ssadd (car (vl-sort lst '(lambda (e1 e2)  (< (cadddr (assoc 10 (entget e1))) (cadddr (assoc 10 (entget e2))))))))))
	

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

Bác Doan Van Ha cho em nhờ thêm chút nữa ạ. Bác có thể chỉnh giúp em sao cho trong trường hợp có nhiều đối tượng có cùng Position Z nhỏ nhất hoặc cao nhất mình chọn 1 lúc tất cả các đối tượng cùng Position Z đấy không ạ? Em vừa dùng thử thì khi có nhiều point có Position Z bằng nhau thì phải lệnh nhiều lần để tìm được hết.

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 mưu của tôi là cố tình chỉ chọn 1 gái đẹp, bởi bạn không nói rõ là sẽ chọn luôn cả đám vào chung kết hoa hậu để làm bồ nhí. Đợi. Lần sau y/c cho rõ vào. 

	(defun C:PMAX( / lst ss)
 (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex  (ssget '((0 . "POINT")))))))
 (setq lst (vl-sort lst '(lambda (e1 e2)  (> (cadddr (assoc 10 (entget e1))) (cadddr (assoc 10 (entget e2)))))))
 (setq lst (vl-remove-if-not '(lambda(x) (equal (cadddr (assoc 10 (entget (car lst)))) (cadddr (assoc 10 (entget x))) 1E-3)) lst))
 (setq ss (ssadd))
 (foreach s lst (ssadd s ss))
 (sssetfirst nil ss))
(defun C:PMIN( / lst ss)
 (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex  (ssget '((0 . "POINT")))))))
 (setq lst (vl-sort lst '(lambda (e1 e2)  (< (cadddr (assoc 10 (entget e1))) (cadddr (assoc 10 (entget e2)))))))
 (setq lst (vl-remove-if-not '(lambda(x) (equal (cadddr (assoc 10 (entget (car lst)))) (cadddr (assoc 10 (entget x))) 1E-3)) lst))
 (setq ss (ssadd))
 (foreach s lst (ssadd s ss))
 (sssetfirst nil ss))
	

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

Em cám ơn bác Hà! Lúc đầu em mới nghĩ đến tình huống có 1 em xinh tươi thôi, nhưng hóa ra em nào cũng xinh nên em muốn hốt hết! Thế là lại phải phiền bác lần nữa! :)

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  

×