找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1603|回复: 16

[必看]:在LSP中如何提供默认值?

[复制链接]
发表于 2003-5-6 11:31:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在LSP中,经常要求用户输入字符或数值,最好的是为用户提供一个默认值。
现在我想问一下,大家都是用什么方式提供这个默认值,讨论一下最好的方式是什么。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-5-6 15:31:56 | 显示全部楼层
(if (not 变量名) (setq 变量名 1))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-6 21:18:03 | 显示全部楼层
1:


  1. (defun pri1 (a #p0 b c / x)
  2.   (princ (strcat b " <"))(princ c)(setq x (a #p0 ">:"))
  3.   (if (and x (/= x "")) x c)
  4. )

  5. (defun pri (a b c / x)
  6.   (princ (strcat b " <"))(princ c)(setq x (a ">:"))
  7.   (if (and x (/= x "")) x c)
  8. )



试试:
(setq a(pri getdist "\输入。。。:" (if a a 123)))
(setq a(pri getreal "\输入。。。:" (if a a 123.0)))
(setq a(pri getint "\输入。。。:" (if a a 1)))

(setq p0'(0 0)
        p0(pri getdist p0 "\输入。。。:" (if p0 p0 '(1 1))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-7 08:36:08 | 显示全部楼层
谢谢二位。
但用这种方式提供的默认值是一个定值,用LL_J的例子来说,程序一旦作好,默认值就是1,每次调用程序时都是1,我希望这样:第一次调用时,默认值可以为1,用户认为不合适,输入5,第二次调用,默认值应该为5。
这样会不会好一些?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 10:09:17 | 显示全部楼层
这个当然是不错,可是lisp一旦写好,编译了以后是不可以再改变了的。我想只有把这个资料写入图纸当中,在程序运行的时候读取它。可以用ACAD提供的15个用户变量中的10个。或是用扩展数据库或xrecord。
如果允许在第一次使用时再修改,则用一个全局变量就可以了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 10:47:42 | 显示全部楼层
你是不是想这样:
(defun c:test ()
   (cond ((null dia1_old) (setq dia1_old 1.0)))
   (setq dia1 (getreal (strcat "请输入一个数<" (rtos dia1_old) ">")))
   (if (not dia1)
       (setq dia1 dia1_old)
       (setq dia1_old dia1)
   )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

发表于 2003-5-7 11:46:26 | 显示全部楼层
如果需要记录用户的默认设置值,可以使用外部文件(如INI,CFG等)
不过最好使用Windows注册表
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 11:50:19 | 显示全部楼层
E2002能不能不你的方法具体说说,最好用例子说明
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-7 13:06:40 | 显示全部楼层
最初由 hqd9639 发布
[B]你是不是想这样:
(defun c:test ()
   (cond ((null dia1_old) (setq dia1_old 1.0)))
   (setq dia1 (getreal (strcat "请输入一个数<" (rtos dia1_old) ">")))
   (if (not dia1)
       (setq dia1 dia1_ol... [/B]

你是用全局变量的方法,只要文档不关闭,这个变量将保持;但文档关闭后,重新打开,这个变量就会为NIL。
我认为较好的办法是将数据保存在文档中。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 13:47:36 | 显示全部楼层
(if pre nil (setq pre 2))
  (princ "\nInput Precision Value:<")
  (princ pre)
  (setq pre0 (getstring ">:"))
  (if (/= pre0 "")(setq pre pre0))
  (princ "\nSelect Dimension:")
开机时默认值是2,如果你更改为3,下次默认值就是3。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 14:12:38 | 显示全部楼层
最初由 lijiao 发布
[B][QUOTE]最初由 hqd9639 发布
[B]你是不是想这样:
(defun c:test ()
   (cond ((null dia1_old) (setq dia1_old 1.0)))
   (setq dia1 (getreal (strcat "请输入一个数<" (rtos dia1_old) ">")))
   (if... [/B]



有必要那样吗?其实我认为既是默认值,没必要每次都要改变。
不知道实际运用中哪里需要那样。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-7 18:32:53 | 显示全部楼层
最初由 lijiao 发布
[B]谢谢二位。
但用这种方式提供的默认值是一个定值,用LL_J的例子来说,程序一旦作好,默认值就是1,每次调用程序时都是1,我希望这样:第一次调用时,默认值可以为1,用户认为不合适,输入5,第二次调用,默认值应该... [/B]


可以。你看看原程序,第一次输入后就记住了。

但重入acad,初始值都是固定的;如果你想连
开机的初始值都要可变,你得找个地方记录。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-5-7 18:56:32 | 显示全部楼层
三种方法我都用过,现在一般使用全局变量,必要时只要根据使用要求小作修改(服务)即可。
使用Acad保留变量只能使用10个(USERI1-5、USERR1-5,而USERS1-5不保存),经常使用就会忘记,出现冲突。
我在下载中心的“电力线路计算程序”中使用了文件记录的形式保存线路型号,这是对于需要保留的值比较多时才适合使用,并在程序中对没有记录文件的情况进行处理,我的程序是根据对话框文件位置判断记录文件位置的,没有对话框时,可能需要指定合适的路径,否则记录文件可能会很乱。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-7 19:16:08 | 显示全部楼层
最初由 snsj 发布
[B]E2002能不能不你的方法具体说说,最好用例子说明 [/B]

可以用Vlax-ldata-put记录数据,是随图保存的。

  1. (if (null #yb_bl)
  2.     (setq #yb_bl (getreal "\n出图比例<1>: "))
  3.   )
  4.   (if (or (= #yb_bl "")
  5.           (= #yb_bl nil)
  6.       )
  7.     (setq #yb_bl 1.0)
  8.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-8 08:57:56 | 显示全部楼层
1、eachy的方法不错,还可以保存到XRECORD中
2、ACAD中有许多命令也提供默认值,比如圆角,你输入圆角半径25后,重新打开文档,默认值仍为25,不知ACAD是用什么方式保存的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 09:51 , Processed in 0.353722 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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