乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 19

[编程交流] 使用上一个输入

[复制链接]

66

主题

180

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
341
发表于 2022-7-5 17:00:17 | 显示全部楼层 |阅读模式
  1. (defun c:xLucky(/ hcol) (command "select" pause)
  2. (setq hcol (getint "\nEnter Number: "))
  3. (command "chprop" "p" "" "c" hcol ""))

 
如何将我输入的前一个数字设置为“hcol”的值,这样我就不会反复键入该值,除非我键入不同的值并再次使用它。。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:04:49 | 显示全部楼层
这样地?
  1. (defun c:xLucky( / )
  2. (command "_.select" pause)
  3. (or *hcol* (setq *hcol* 1))
  4. (or (setq *hcol* (getint (strcat "\nEnter Number: <" (itoa *hcol*) ">: "))) *hcol*)
  5. (command "_.chprop" "p" "" "c" *hcol* "")
  6. (princ)
  7. )

请注意,*hcol*现在是一个全局变量,不应包括在参数列表中。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:09:05 | 显示全部楼层
 
小心-如果用户在提示下按enter键,则会将*hcol*设置为零。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:11:31 | 显示全部楼层
 
正确,刚刚测试过-比我想象的要难,所以我找到了两个解决方案:
 
1.使用“使用默认选项提示”教程中的最后一个示例http://www.lee-mac.com/promptwithdefault.html(一定很喜欢)
  1. (defun c:test ( / )
  2. (command "_.select" pause)
  3. (or (numberp *hcol*) (setq *hcol* 1))
  4. (setq *hcol* (cond ( (getint (strcat "\nChoose a Number <" (itoa (setq *hcol* (cond ( *hcol* ) ( 1 )))) ">: " ))) ( *hcol* )))
  5. (command "_.chprop" "p" "" "c" *hcol* "")
  6. (princ)
  7. )

 
2.使用我上周想到的一些伪函数:
  1. (defun c:test ( / )
  2. (command "_.select" pause)
  3. (or (numberp *hcol*) (setq *hcol* 1))
  4. (setq *hcol* (_or (list (getint (strcat "\nEnter Number: <" (itoa *hcol*) ">: ")) *hcol*)))
  5. (command "_.chprop" "p" "" "c" *hcol* "")
  6. (princ)
  7. )
  8. ; (_or (list (getpoint "\nFirst try: ") (getpoint "\nSecond try: ") (getpoint "\nThird try: ") ))
  9. (defun _or ( LstOfAnythings / r ); return the first non-nil value, instead of just T or nil, seems to work
  10. (vl-some
  11.         (function
  12.                 (lambda (x)
  13.                         (if (not (vl-catch-all-error-p (vl-catch-all-apply 'eval (list 'x))))
  14.                                 (setq r x)
  15.                         )
  16.                 )
  17.         )
  18.         LstOfAnythings
  19. )
  20. r
  21. )

顺便说一句,在测试代码之后,对于最近线程上的另一个请求,在cadtutor上的结果性能似乎相似。
 
我不确定cond到底是如何工作的,我测试了and/or/if函数,但没有成功。
我认为cond将评估您提供的尽可能多的测试语句,如果所有内容都评估为nil(或者测试语句完全不相关),它将运行最后一个语句(T)。
我“使用/知道”它,因为我在这个论坛上,每次我觉得奇怪/不确定,而使用它。必须用它做更多的实验。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:14:46 | 显示全部楼层
@Grrr:您上一篇文章的第一个代码示例包含多余的一行。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:19:14 | 显示全部楼层
 
请小心,因为此表达式不会按预期进行计算:在构造返回值列表并将其传递给您的“_or”函数之前,将对所有getpoint表达式进行计算(无论之前的响应如何)。
 
这种行为不同于AutoLISP或函数的行为,AutoLISP或函数是一种特殊形式,这意味着对每个连续参数的求值取决于对具有先前参数的函数的求值。为了复制这种行为,getpoint表达式的列表应作为未赋值(文字)列表传递,表达式在vl some表达式中求值。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:19:38 | 显示全部楼层
另一个
检查hcol是否为零将hcol设置为起始值
如果hcol/=nil,则提示具有当前值
按接受当前值或输入新值。
 
  1. ; found this
  2. (if (= vert nil)(setq vert 50)) ; sets an initial value for message
  3. (prompt "\nEnter Vertical scale:<")
  4. (prin1 vert)
  5. (prompt ">:")
  6. (setq newvert (getint))
  7. (if (= newvert nil)
  8. (princ); use current vert value
  9. (setq vert newvert) ; set vert to new value
  10. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:24:16 | 显示全部楼层
是的,我知道它会计算所有的getpoint表达式,无法解决这个问题,直到遵循您的建议,传递未计算参数的列表:
  1. (defun _or ( LstOfAnythings / r ); return the first non-nil value, instead of just T or nil, seems to work
  2. (apply 'and (mapcar '(lambda (x) (= 'STR (type x))) LstOfAnythings))
  3. (vl-some
  4.         (function
  5.                 (lambda (x)
  6.                         (and
  7.                                 (not (vl-catch-all-error-p (setq r (vl-catch-all-apply 'eval (list (read x))))))
  8.                                 (not (eq r nil))
  9.                         )
  10.                 )
  11.         )
  12.         LstOfAnythings
  13. )
  14. r
  15. )       

测试功能:
  1. (if ; test function
  2. (setq p
  3.         (_or
  4.                 (list
  5.                         "(getpoint "\nFirst try: ")"
  6.                         "(getpoint "\nSecond try: ")"
  7.                         "(getpoint "\nThird try: ")"
  8.                 )
  9.         )
  10. )
  11. (entmakex (list (cons 0 "POINT") (cons 62 1) (cons 10 p)))
  12. )

谢谢
我觉得可能还有另一种方式来申请。
 
对不起,罗伊,我什么都看不见。。有什么提示吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:27:32 | 显示全部楼层
 
引用文字表达式也就足够了,例如:
  1. (defun _or ( lst )
  2.    (vl-some '(lambda ( x / r ) (if (not (vl-catch-all-error-p (setq r (vl-catch-all-apply 'eval (list x))))) r)) lst)
  3. )
  4. (if (setq p (_or '((getpoint "\n1st try: ") (getpoint "\n2nd try: ") (getpoint "\n3rd try: "))))
  5.    (entmakex (list (cons 0 "POINT") (cons 62 1) (cons 10 p)))
  6. )
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:32:01 | 显示全部楼层
假设*hcol*为零或整数,则不需要此行:
下一行已经处理好了:
  1. (itoa (setq *hcol* (cond ( *hcol* ) ( 1 ))))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 08:14 , Processed in 0.369835 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表