乐筑天下

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

[编程交流] 循环直到层“0”上出现圆弧

[复制链接]

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:36:14 | 显示全部楼层 |阅读模式
我正在编写一个lisp,它将提示用户选择一个弧。。。我遇到的问题是,我不知道如何确保用户通过循环选择位于层“0”上的圆弧,直到满足该标准。
 
提前感谢您的帮助。
回复

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 11:42:22 | 显示全部楼层
KRBeckman,
根据您的简要描述,似乎您可能希望关闭除“0”之外的所有层,以便用户无法从错误的层中进行选择。还是我不明白他的意图?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:43:31 | 显示全部楼层
怎么样:
 
  1. (ssget "_:S" '((0 . "ARC") (8 . "0")))

 
或者更具体地说,在循环中:
 
  1. (while (not ss)
  2. (setq ss (ssget "_:S" '((0 . "ARC") (8 . "0")))))

 
但一定要本地化“ss”。
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:46:11 | 显示全部楼层
 
你介意解释一下while函数是如何工作的吗?更具体地说,为什么
 
 
使其循环。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:49:56 | 显示全部楼层
在用户做出有效选择之前,变量“ss”为零,因此(不是ss)返回T,迫使While继续。
 
为了尽可能简洁地解释WHILE,在每个循环之前对测试表达式进行求值,并且仅当文本表达式返回非nil值时才对测试表达式后面的语句进行求值。
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 11:53:31 | 显示全部楼层
啊,当我看到(不是ss)时,我想它是在检查ss是否等于零,当用户没有选择正确类型的对象时,这将是错误的。我现在明白了。。。(非ss)检查ss是否等于零。和我想象的有点倒退,但我明白了。那么你可以用(=ss nil)替换(不是ss),对吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:57:14 | 显示全部楼层
 
是的,但没有那么优雅
回复

使用道具 举报

31

主题

170

帖子

139

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 12:00:14 | 显示全部楼层
对,我只是想确定我做对了。我必须开始使用它。再次感谢您的帮助。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:02:12 | 显示全部楼层
不要忘记额外的编码。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:07:32 | 显示全部楼层
如果你更喜欢entsel的行为,还有两种方法:
 
  1. (while
  2. (progn
  3.    (setq ent (car (entsel "\nSelect Arc: ")))
  4.    (cond (  (eq 'ENAME (type ent))
  5.          
  6.             (if (not (and (eq "ARC" (cdr (assoc 0 (entget ent))))
  7.                           (eq "0"   (cdr (assoc 8 (entget ent))))))
  8.               
  9.               (princ "\n** Object is not an Arc on Layer "0" **")))
  10.          (  (princ "\n** Nothing Selected **")))))

 
  1. (while (not ss)
  2. (setq ss (ssget "_+.:E:S" '((0 . "ARC") (8 . "0")))))

 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:15 , Processed in 0.499108 second(s), 72 queries .

© 2020-2025 乐筑天下

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