明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3352|回复: 13

求助,如何让程序输入没有的选项修值后,不退出,而是循环提示用户输入正确的选项值?

  [复制链接]
发表于 2012-7-16 17:18:39 | 显示全部楼层 |阅读模式
(defun c:gg (/ cm cd_err0)
  (princ "\n<1>→平坡段 / <2>→缓坡段 / <3>→正常坡段 / <f>→恢复原值 / <Enter↓>→挡水段")
  (princ "\n<Enter↓>或输入选项值,<Esc退出>:")
  (setq efg (getstring))
  (cond
    ((= efg "")
     (r1-wh3 "<>(挡水段)")
    )
    ((= efg "1")
     (r1-wh3 "<>(平坡段)")
    )
    ((= efg "2")
     (r1-wh3 "<>(缓坡段)")
    )
    ((= efg "3")
     (r1-wh3 "<>(正常坡段)")
    )
    ((= efg "f")
     (r1-wh3 "<>")
    )
  )
  (princ)
)
(defun r1-wh3 (pa / cm os p1 po_err0)
  (command ".dimedit" "n" pa)
  (princ "\n选择标注对象 <退出>:")
  (princ)
)

自己不会LISP,就照着以前的大师作品,模仿了一个。但是程序还是有些问题,就是输入1,2,3,f外的键后,程序会退出。想请教高手们,怎么修改程序,让其输入选项以外的字符时,程序不退出。还是继续循环提示用户输入正确的值。直到输入正确的项为止。
程序要达到的目的,就是,如一个1000的标注尺寸,输入相应的选项后,分别在真实的标注值后,加入,挡水段,平坡段,缓坡段,正常坡段。这几个文字。
小弟我不会LISP,还烦请各位高手们改出结果来,让我直接可以测试了。谢谢!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-7-16 17:56:14 | 显示全部楼层
(defun c:gg (/ cm cd_err0)
  (princ "\n<1>→平坡段 / <2>→缓坡段 / <3>→正常坡段 / <f>→恢复原值 / <Enter↓>→挡水段")
        (initget "  1 2 3 f")
  (setq efg (getkword "\n<Enter↓>或输入选项值,<Esc退出>:"))
       
(defun r1-wh3 (pa / cm os p1 po_err0)
(command ".dimedit" "n" pa)
(princ "\n选择标注对象 <退出>:")
)
       
  (cond
    ((= efg nil)
     (r1-wh3 "<>(挡水段)")
    )
    ((= efg "1")
     (r1-wh3 "<>(平坡段)")
    )
    ((= efg "2")
     (r1-wh3 "<>(缓坡段)")
    )
    ((= efg "3")
     (r1-wh3 "<>(正常坡段)")
    )
    ((= efg "f")
     (r1-wh3 "<>")
    )
  )
  (princ)
)
 楼主| 发表于 2012-7-16 20:45:13 | 显示全部楼层
谢谢叮咚大哥,好了!再次叩谢!
 楼主| 发表于 2012-7-17 11:40:24 | 显示全部楼层
再次恳求,请问如果我把
(initget "  1 2 3 f")
改写成(initget " aa 2 3 f"),后面的1也相应的改写为aa,这时,输入aa程序也能执行,奇怪的是输入a也能执行了。如何让程序只能输入AA,而不是输入A了。
谢谢!
 楼主| 发表于 2012-7-17 15:55:50 | 显示全部楼层
没有人回复,要沉了,顶上去。
发表于 2012-7-17 17:53:50 | 显示全部楼层
Try
(initget "AA 2 3 F")
发表于 2012-7-17 19:17:01 | 显示全部楼层
Andyhon 发表于 2012-7-17 17:53
Try
(initget "AA 2 3 F")

学习了 ~~  initget 函数 ~~
 楼主| 发表于 2012-7-17 20:23:53 | 显示全部楼层
Andyhon 发表于 2012-7-17 17:53
Try
(initget "AA 2 3 F")

回长老,按长老的提示改了。如下,但是输入A,程序还是可以把标注尺寸改成,标注文字+平坡段

(defun c:gg (/ cm cd_err0)
  (princ "\n<AA>→平坡段 / <2>→缓坡段 / <3>→正常坡段 / <f>→恢复原值 / <Enter↓>→挡水段")
(initget "AA 2 3 F")
  (setq efg (getkword "\n<Enter↓>或输入选项值,<Esc退出>:"))
        
(defun r1-wh3 (pa / cm os p1 po_err0)
(command ".dimedit" "n" pa)
(princ "\n选择标注对象 <退出>:")
)
        
  (cond
    ((= efg nil)
     (r1-wh3 "<>(挡水段)")
    )
    ((= efg "AA")
     (r1-wh3 "<>(平坡段)")
    )
    ((= efg "2")
     (r1-wh3 "<>(缓坡段)")
    )
    ((= efg "3")
     (r1-wh3 "<>(正常坡段)")
    )
    ((= efg "F")
     (r1-wh3 "<>")
    )
  )
  (princ)
)

我想让程序输入AA,才能改成平坡段,而不是现在的A。当然现在输入AA,A,都可以把标注文字加平坡段,三个字的。

点评

(initget "Aa 2 3 F")  发表于 2012-7-17 20:27
发表于 2012-7-17 21:10:05 | 显示全部楼层
...我想让程序输入AA...

Command: (initget "AA 2 3 F")
nil

Command: (setq efg (getkword "\n<Enter↓>或输入选项值,<Esc退出>:"))

<Enter↓>或输入选项值,<Esc退出>:A

Invalid option keyword.

<Enter↓>或输入选项值,<Esc退出>:A

Invalid option keyword.

<Enter↓>或输入选项值,<Esc退出>:AA
"AA"

Command: !efg
"AA"
 楼主| 发表于 2012-7-17 21:38:33 | 显示全部楼层
晕菜,完全看不懂哦。长老好心,能否帮忙改出来,让小弟我直接测试了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-21 23:58 , Processed in 0.245350 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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