明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2060|回复: 9

编写上一次输入的数值

[复制链接]
发表于 2011-3-4 21:30 | 显示全部楼层 |阅读模式
如何编写像画圆一样,输入一个数值后画第二个圆的数为上一次的默认数, 直接回车就可以了呢?
发表于 2011-3-4 22:15 | 显示全部楼层


把要存储的数值设成一个全局变量,每次要输入存储的数值的时候就判段这个变量值,并把他作为默认值就可以了。
下面是我以前编的拉伸有默认距离的程序,请参考下。打开网页好难啊!

;;拉伸不用输入距离程序参考。s_dis_all为全局变量,保存的是默认拉伸距离,不可设置为局部变量
;;使用注意事项:在拾取拉伸基点后,输入拉伸距离时,鼠标十字指针不能停留在基点上
;;这是因为你要给拉伸指定一个方向
(defun c:ss (/ s_dis)
  (command ".STRETCH" (ssget) "")
  (command (setq BasicPoint (getpoint "\n指定基点:")))
  (if (= nil s_dis_all)
    (progn
      (setq s_dis_all (getreal "\n输入拉伸距离:"))
      (command s_dis_all)
    )
    (progn
      (setq
s_dis (getreal
  (strcat "\n输入拉伸距离<" (rtos s_dis_all 2 4) ">:")
       )
      )
      (if (= nil s_dis)
(setq s_dis s_dis_all)
      )
      (command s_dis)
      (setq s_dis_all s_dis)
    )
  )
)



  
 楼主| 发表于 2011-3-6 17:25 | 显示全部楼层
本帖最后由 wang.bay 于 2011-3-6 17:26 编辑
yucpp 发表于 2011-3-4 22:15
把要存储的数值设成一个全局变量,每次要输入存储的数值的时候就判段这个变量值,并把他作为默认值就可 ...


这个是可以,不过写得好像太复杂了些,有没有更简单一些呢,我看一这个程序一天了,还是不太明白(command s_dis)的内涵。不过还得多谢你先。谢谢!!
发表于 2011-3-6 19:45 | 显示全部楼层
我说下思路吧,你参考下。
需要存储的数据设成全局变量a,每次程序启动时,先检查a是否存在(即a为非nil),如果a不存在,就让用户直接输入a值,不给用户提供默认参考值。
如果a存在,就让用户再输入a值的时候提供一个默认参考值,既用户直接回车时采用这个值。默认值的写法请看下这个程序:
(setq c        (if (setq temp (getreal "\n砼强度等级:<20>"))
          temp
          20
        )
)
或者下面这个,更容易理解的。
(setq zhijing (getreal "输入管子直径(12.7):\n") )
(if (= zhijing nil)
(setq zhijing 12.7)
)
(command s_dis)的意思是给上面的 (command ".STRETCH“)提供参数的,你可以在论坛搜下command的用法,其作用远非调用cad命令这么简单。
另一个提供默认参数的做法就是把变量写入注册表,不过原理还是和这一样的。
 楼主| 发表于 2011-3-14 19:59 | 显示全部楼层
  我编写的为何得不到理想的呢
我CAD是2008的,用以下程序得到的值不是数值,返回值是nil
就是在直接回车的情况下。
难道这个(if (= nil engs)(setq engs 2))起不到作用?

你再看下
(if (= nil engs)
    (progn
      (setq engs (getreal "\n输入几分边钉:<2分>"))
      (if (= nil engs)(setq engs 2)))
    (progn
      (setq ens (getreal (strcat "\n输入几分边钉:<" (rtos engs 2 4) ">:")))
      (if (= nil ens)(setq ens engs))))
  (setq engs ens)

engs最后返回的是nil
发表于 2011-3-14 20:09 | 显示全部楼层
(if (= nil engs)(setq engs 2)))
==》
(if (= nil ens)(setq ens 2)))
 楼主| 发表于 2011-3-14 20:48 | 显示全部楼层
本帖最后由 wang.bay 于 2011-3-14 20:51 编辑

像下面这样子才是正确的...
(if (= nil engs)
    (progn
      (setq engs (getreal "\n输入几分边钉:<2分>"))
      (if (= nil engs)(setq engs 2)))
    (progn
      (setq ens (getreal (strcat "\n输入几分边钉:<" (rtos engs 2 4) ">:")))
      (if (= nil ens)(setq ens engs))
  (setq engs ens)))
像这样下一次的变量才是想得到的要求.
多谢你们的讨论。
(setq engs ens)这个应在第二个progn里才行的。。
发表于 2013-3-15 12:26 | 显示全部楼层
留个记号呀!位伸!
发表于 2013-3-16 22:07 | 显示全部楼层
留个记号呀!位伸!
发表于 2013-3-17 10:33 | 显示全部楼层
很久没来论坛了,留个记号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 01:11 , Processed in 0.221870 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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