Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
5 replies to this topic

#1 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 08 May 2007 - 06:44 AM

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

#2 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 08 May 2007 - 09:01 AM

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

#3 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 08 May 2007 - 03:45 PM

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


  • 1

#4 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 08 May 2007 - 06:50 PM

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?
  • 0

#5 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 08 May 2007 - 10:51 PM

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

  • 1

#6 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 09 May 2007 - 06:15 AM

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