明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1986|回复: 4

[LISP函数]一触即发的选项

[复制链接]
发表于 2003-11-24 09:26 | 显示全部楼层 |阅读模式
;;一触即发的选项[pro-提示 lst-关键字列表 def-缺省关键字]
(defun yad-getkword(pro lst def / kw val)
  (setq lst (apply 'append (mapcar '(lambda(e) (list (ascii (strcase e)) (ascii (strcase e T)))) lst))
        def (ascii def)
  )
  (prompt pro)
  (while (not (and (setq kw (grread nil) val (car kw) kw (cadr kw))
                   (member val '(2 11 25))
                   (if (or (= val 25) (and (= val 11) (= kw 0)) (member kw '(13 32)))
                     (setq kw def)
                     (member kw lst)
                   )
              )
         )
  )
  (strcase (vl-list->string (list kw)))
)
;;例1:(yad-getkword "\n输入选项[A 直线/B 圆弧/C 圆]:<A>" '("A" "B" "C") "a")
;;例2:(yad-getkword "\n输入选项[A 直线/B 圆弧/C 圆]:<退出>" '("a" "b" "c") "X")
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-11-24 09:51 | 显示全部楼层
看來這樣做會給寫有可選項的程序帶來更大的方便. 試試看.
发表于 2003-11-25 12:47 | 显示全部楼层
我做有一个的应用。
  1. ;;;按模式修改实体
  2. ;;;ssdef1 (ssget "x")的参数定义
  3. ;;;prop  属性表内容
  4. ;;;(
  5. ;;; ("单个字母1" "提示1" "表名1" (("字段名1" . 字段值1)("字段名2" . 字段值2)("字段名x" . 字段值x)) 其它加工的代码)
  6. ;;; ("单个字母2" "提示2" "表名2" (("字段名1" . 字段值1)("字段名2" . 字段值2)("字段名x" . 字段值x)) 其它加工的代码)
  7. ;;; ("单个字母x" "提示x" "表名x" (("字段名1" . 字段值1)("字段名2" . 字段值2)("字段名x" . 字段值x)) 其它加工的代码)
  8. ;;;)
  9. (DEFUN change_with_mode (ssdef prop other/ mode_data mode_now ss tmp1 promt_text)
  10.     (SETQ prop       (APPEND prop '("X" "退出"))  ;增加退出选项
  11.           mode_now   nil                          ;当前模式
  12.           promt_text "\n\t"                       ;提示内容
  13.     )
  14.     (FOREACH tmp1 prop (SETQ promt_text (STRCAT promt_text (NTH 0 tmp1) "." (NTH 1 tmp1) "\t")))
  15.     (WHILE (AND (SETQ ss (SSGET "x" ssdef)) (/= (NTH 0 mode_now) "X"))
  16.         (IF mode_now
  17.             (PRINC (STRCAT promt_text "<" (NTH 0 mode_now) "." (NTH 1 mode_now)))
  18.             (PRINC promt_text)
  19.         )
  20.         (SETQ mode_data (GRREAD nil))
  21.         (COND ;;键盘输入情况
  22.               ((AND (= 2 (CAR mode_data)) (SETQ mode_data (ASSOC (CHR (CADR mode_data)) prop)))
  23.                (SETQ mode_now (NTH 0 mode_data))
  24.                (IF (/= "X" mode_now)
  25.                    (change_with_mode_sub1 mode_data ssdef)
  26.                )
  27.               )
  28.               ;;右键情况由当前模式决定
  29.               ;;当前模式为空时退出,否则执行当前模式操作
  30.               ((= 12 (CAR mode_data))
  31.                (IF mode_now
  32.                    (change_with_mode_sub1 mode_data ssdef)
  33.                    (SETQ mode_now "X")
  34.                )
  35.               )
  36.         )
  37.     )
  38. )
复制代码
发表于 2003-11-26 07:59 | 显示全部楼层
lockmyeye可否貼出完整程序及使用說明,謝謝!
发表于 2008-5-25 14:15 | 显示全部楼层
如何用?能否细说?最好把yad内的函数库也搞一个。方便yad程序别人开发补充
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 10:44 , Processed in 0.358513 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表