本帖最后由 vitalgg 于 2021-5-22 20:19 编辑
没有做 0 除检查 和 R0 /= Rt 检查 ,自己加吧。 顺便 推广一下 @lisp: http://atlisp.cn
 - (defun ktr0rt:dialog (/ dcl_fp dcl-tmp dcl_id ktr0rt:cal)
- (defun ktr0rt:cal (/ k t1 r0 rt res)
- (setq k (read (get_tile "K")))
- (setq t1 (read (get_tile "t")))
- (setq r0 (read (get_tile "R0")))
- (setq rt (read (get_tile "Rt")))
- (if k (setq k (float k)))
- (if t1 (setq t1 (float t1)))
- (if r0 (setq r0 (float r0)))
- (if rt (setq rt (float rt)))
- (cond ((or (= 0 r0)(= 0 rt)(= 0 t1)) (alert "R0 Rt t不能为 0"))
- ((and (null k)
- (numberp t1)
- (numberp r0)
- (numberp rt))
- (set_tile "K" (rtos (* t1 (- (/ 1 rt)(/ 1 r0))) 2 5)))
- ((and (numberp k)
- (null t1)
- (numberp r0)
- (numberp rt))
- (set_tile "t" (rtos (/ k (- (/ 1 rt)(/ 1 r0))) 2 2)))
- ((and (numberp k)
- (numberp t1)
- (null r0)
- (numberp rt))
- (set_tile "R0" (rtos (/ 1 (- (/ 1 rt) (/ k t1))) 2 2)))
- ((and (numberp k)
- (numberp t1)
- (numberp r0)
- (null rt))
- (set_tile "Rt" (rtos (/ 1 (+ (/ 1 r0) (/ k t1))) 2 2))) (t (alert "数据不全或太全。"))
- ))
- (progn
- (setq dcl-tmp (strcat (getenv "temp") "\\" "tmp-ktr0rt.dcl" ))
- (setq dcl_fp (open dcl-tmp "w"))
- (write-line (strcat "panel : dialog {"
- "label = \"Calc\"; "
- ":row{"
- ": edit_box { key=\"K\";label=\"K\";}"
- ": edit_box { key=\"t\";label=\"t\";}"
- ": edit_box { key=\"R0\";label=\"R0\";}"
- ": edit_box { key=\"Rt\";label=\"Rt\";}"
- ": button { key=\"calc\";label=\"Cal\";}"
- "}ok_cancel;}")
- dcl_fp)
- (close dcl_fp))
- (setq dcl_id (load_dialog dcl-tmp))
- (if (not (new_dialog "panel" dcl_id))
- (exit))
- (action_tile "calc" "(ktr0rt:cal)")
- (start_dialog)
- (unload_dialog dcl_id)
- (vl-file-delete dcl-tmp))
- (defun C:tt ()(ktr0rt:dialog))
-
|