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

[Đã xong] Lisp tìm giá trị max hoặc min trong text

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

diễn đàn có thể giúp tôi thủ thuật tìm giá trị max hoặc min trong các đối tượng là text (text có giá trị là số thực và Z=0). Cảm ơn các anh

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
diễn đàn có thể giúp tôi thủ thuật tìm giá trị max hoặc min trong các đối tượng là text (text có giá trị là số thực và Z=0). Cảm ơn các anh

 

Có thể nói rõ yêu cầu:

1. Đầu vào là thế nào: (VD như sẽ chọn một nhóm text trên bản vẽ...)

2. Đầu ra: Thông báo số lớn nhất, nhỏ nhất hay là hiển thị trạng thái đã chọn số lớn nhất hay nhỏ nhất trên bản vẽ...

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

diễn đàn có thể giúp tôi thủ thuật tìm giá trị max hoặc min trong các đối tượng là text (text có giá trị là số thực và Z=0). Cảm ơn các anh

Bạn thử dùng trình lisp sau. Appload và gõ mm để chạy. Nếu chưa đúng ý, bạn nêu rõ hơn yêu cầu.

 


(defun C:MM (/ ss i V Vmax Vmin)

(setq ss (ssget '((0 . "TEXT"))) i 0)

(repeat (sslength ss)

(setq V (atof (cdr (assoc 1 (entget (ssname ss i))))))

(if (= i 0) (setq Vmax V Vmin V))

(if (> V Vmax) (setq Vmax V))

(if (< V Vmin) (setq Vmin V))

(setq i (1+ i))

)

(command "redraw")

(princ (strcat "\nMax = " (rtos Vmax) "\tMin = " (rtos Vmin)))

(princ)

)

 

  • 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
Bạn thử dùng trình lisp sau. Appload và gõ mm để chạy. Nếu chưa đúng ý, bạn nêu rõ hơn yêu cầu.

 

(defun C:MM (/ ss i V Vmax Vmin) 
(setq ss (ssget '((0 . "TEXT"))) i 0)
(repeat (sslength ss)
   (setq V (atof (cdr (assoc 1 (entget (ssname ss i))))))
   (if (= i 0) (setq Vmax V Vmin V))
   (if (> V Vmax) (setq Vmax V))
   (if (< V Vmin) (setq Vmin V))
   (setq i (1+ i))
)
(command "redraw")
(princ (strcat "\nMax = " (rtos Vmax) "\tMin = " (rtos Vmin)))
(princ)
)

 

 

Cảm ơn bạn ssg đã giúp tôi giải quyết vấn đề đã nêu ra, tuy nhiên bạn có thể viết thêm sau khi hiển thị các giá trị min max tại dòng command, ta có thể hiển thị trạng thái đã chọn số lớn nhất hay nhỏ nhất trên bản vẽ... được không bạ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

Cải tiến chương trình của ssg, ta sẽ có 2 lệnh mới là TMax và TMin, sẽ tìm đối tượng text có giá trị min và max trong tập chọn.

Sau khi sử dụng lệnh và chọn các đối tượng, đối tượng lớn nhất (hoặc nhỏ nhất) sẽ được high light.

(defun C:TMax (/ ss i V Vmax entht entmax)
 (setq	ss (ssget '((0 . "TEXT")))
i  0
 )
 (repeat (sslength ss)
   (setq V (atof (cdr (assoc 1 (entget (setq entht (ssname ss i)))))))    
   (if	(or (= i 0) (> V Vmax))
     (setq Vmax   V
    entmax entht
     )
   )
   (setq i (1+ i))
 )
 (command "redraw")
 (princ (strcat "\nMax = " (rtos Vmax)))
 (sssetfirst (ssadd entmax) (ssadd entmax))
 (princ)
)

(defun C:TMin (/ ss i V Vmin entht entmin)
 (setq	ss (ssget '((0 . "TEXT")))
i  0
 )
 (repeat (sslength ss)
   (setq V (atof (cdr (assoc 1 (entget (setq entht (ssname ss i)))))))    
   (if	(or (= i 0) (      (setq Vmin   V
    entmin entht
     )
   )
   (setq i (1+ i))
 )
 (command "redraw")
 (princ (strcat "\nMin = " (rtos Vmin)))
 (sssetfirst (ssadd entmin) (ssadd entmin))
 (princ)
)

  • 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ải tiến chương trình của ssg, ta sẽ có 2 lệnh mới là TMax và TMin, sẽ tìm đối tượng text có giá trị min và max trong tập chọn.

Sau khi sử dụng lệnh và chọn các đối tượng, đối tượng lớn nhất (hoặc nhỏ nhất) sẽ được high light.

(defun C:TMax (/ ss i V Vmax entht entmax)
 (setq	ss (ssget '((0 . "TEXT")))
i  0
 )
 (repeat (sslength ss)
   (setq V (atof (cdr (assoc 1 (entget (setq entht (ssname ss i)))))))    
   (if	(or (= i 0) (> V Vmax))
     (setq Vmax   V
    entmax entht
     )
   )
   (setq i (1+ i))
 )
 (command "redraw")
 (princ (strcat "\nMax = " (rtos Vmax)))
 (sssetfirst (ssadd entmax) (ssadd entmax))
 (princ)
)

(defun C:TMin (/ ss i V Vmin entht entmin)
 (setq	ss (ssget '((0 . "TEXT")))
i  0
 )
 (repeat (sslength ss)
   (setq V (atof (cdr (assoc 1 (entget (setq entht (ssname ss i)))))))    
   (if	(or (= i 0) (< V Vmin))
     (setq Vmin   V
    entmin entht
     )
   )
   (setq i (1+ i))
 )
 (command "redraw")
 (princ (strcat "\nMin = " (rtos Vmin)))
 (sssetfirst (ssadd entmin) (ssadd entmin))
 (princ)
)

 

một lần nữa xin cảm ơn các anh ssg, anh Nguyen Hoanh, đã nhiệt tình hướng dẫn và giúp tôi giải quyết vấn đề 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

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

×