乐筑天下

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

[编程交流] 需要“IF”功能的帮助o

[复制链接]

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:12:49 | 显示全部楼层 |阅读模式
你好
 
这是我模糊的Lisp程序。到目前为止,它运行良好,但有一个小问题。唯一的问题是,当我错过选择时,它会根据我设置的内容显示“未选择对象”。但随后它继续并提示我Arcok YES NO,我无法解决这个问题。如果选择有效,则它应该继续执行Arcok。
 
请帮忙。
 
  1. (defun convcloudnew (/ al ss arcok)
  2. (command "undo" "m")
  3.         (initget (+ 2 4))
  4.         (setq al (getreal "Specify Arc length <0.5>:"))
  5.         (if (= al nil) ;If user do not input a value here
  6.             (setq al 0.5) ;Consider "Enter" as 0.5
  7.          ) ; end if
  8.         (if (setq ss (ssget '((0 . "LINE,*POLYLINE,CIRCLE,ELLIPSE,SPLINE,ARC"))))
  9.             (progn
  10. (repeat (setq i (sslength ss))
  11.                  (command "_.revcloud" "a" al al "" (ssname ss (setq i (1- i))) "")
  12. )
  13.              );end progn
  14.            (princ "\nNo objects selected.")
  15.   ) ;end if
  16.         (initget (+ 2 4) "Y N")
  17.         (setq arcok (getkword "\nArc size look ok? [Yes/No]:"))
  18.         (if (= arcok nil) ;If user do not input a value here
  19.             (setq arcok "Y")
  20.          ) ; end if
  21. (Cond
  22.    ( (= arcok "Y")
  23.             (princ "\nProceeding to next function")
  24.      (princ)
  25.           )
  26.   ( (= arcok "N")
  27.            (command "undo" "b")
  28.     (princ "\nClouding undone")
  29.     (Princ)  
  30.          )
  31. ) ; end cond
  32. );end defun

 
非常感谢。
 
编辑:还有一期。如果选择了带有NO的ArcOK,那么是否可以保留选择?哪个undo是云,这样我就可以在不再次选择相同项目的情况下调整其大小?
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:19:46 | 显示全部楼层
如果这是您想要实现的,那么将所有代码放入If语句progn中,如
  1. (defun convcloudnew (/ al ss arcok)
  2. (command "undo" "m")
  3. (initget (+ 2 4))
  4. (setq al (getreal "Specify Arc length <0.5>:"))
  5. (if (= al nil) ;If user do not input a value here
  6.    (setq al 0.5) ;Consider "Enter" as 0.5
  7.    ) ; end if
  8. (if (setq ss (ssget '((0 . "LINE,*POLYLINE,CIRCLE,ELLIPSE,SPLINE,ARC"))))
  9.    (progn
  10.      (repeat (setq i (sslength ss))
  11.        (command "_.revcloud" "a" al al "" (ssname ss (setq i (1- i))) "")
  12.        )
  13.      (initget (+ 2 4) "Y N")
  14.      (setq arcok (getkword "\nArc size look ok? [Yes/No]:"))
  15.      (if (= arcok nil) ;If user do not input a value here
  16.        (setq arcok "Y")
  17.        ) ; end if
  18.      (Cond
  19.        ( (= arcok "Y")
  20.         (princ "\nProceeding to next function")
  21.         (princ)
  22.         )
  23.        ( (= arcok "N")
  24.         (command "undo" "b")
  25.         (princ "\nClouding undone")
  26.         (Princ)
  27.         )
  28.        ) ; end cond
  29.      );end progn
  30.    (princ "\nNo objects selected.")
  31.    ) ;end if
  32. );end defun

是的,选择集在变量ss中仍然可用,尽管使用(命令…)有时会导致不想要的结果。
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:22:25 | 显示全部楼层
第一个问题已解决。非常感谢你,克林特。
你的意思是说,如果我取消了云层,那么我也可以使用SS而不是再次重新选择?你能解释一下在命令提示符下写什么吗?我试着输入SS而不是选择,但没有成功。
 
编辑:你有比我现在使用的更好的想法吗?有没有可能一直调整弧的大小,直到它给我什么我什么(没有重做整个事情了)。是否有任何变量可以捕捉作为参考,以便在此基础上调整弧度?
 
编辑:可以是dimscale,与云的弧度成一定比例?因此,当图形较大时,云也会相应调整。
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:26:06 | 显示全部楼层
任何关于这方面的建议对我来说都是一个很好的开始。非常感谢。
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:29:11 | 显示全部楼层
我真的不喜欢使用命令,除非我别无选择。但是althernative需要更多的时间。但这里有一种方法可以使用命令实现。
如果您将绿线作为另一个例程中的子功能运行,则可能不需要绿线。
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:32:12 | 显示全部楼层
嗨,克林特,
 
这真是太棒了,正是我想要的。
 
是的,这是主例程的一个子函数,所以我没有像你提到的那样使用绿色的行。主例程有另一个子功能,称为Draw,它允许用户绘制矩形、Pline、圆形和椭圆,因此这是一个完整的云彩例程,在该lisp中使用鼠标可以完成所有操作(弧长除外)。但在大多数情况下,这是一个基本的Lisp程序,不像你们这样进步。在你的帮助下,它变成了一个基本+半高级的lisp。
 
看看代码,我不会更接近你写的东西。
 
非常感谢你的帮助。
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:37:27 | 显示全部楼层
谢谢shailujp。很高兴我能帮忙。
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:39:30 | 显示全部楼层
嗨,克林特
 
我有一个小要求。是否可以动态获取弧长(al)而不进行硬编码?在图形上,默认值为0.5。根据图形大小将其更改为3后,默认情况下不应返回到0.5。这样,我就不必每次都输入尺寸,也不必记住活动图形中的弧长值。
 
我用李的“默认选项提示”做了几次尝试,但都没有成功。
 
谢谢
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-5 23:45:09 | 显示全部楼层
我不是在看你的程序,因为我不是在LISP中编程,但对于我的云例程(VBA),我使用用户*变量。您可以为它们指定一个值,稍后再检索。它们只会持续到图纸打开的时候,因此可能对您没有帮助,但值得一看。
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:50:03 | 显示全部楼层
试试这个
  1. (defun convcloudnew ( / al i ss sse )
  2. (if (setq ss (ssget '((0 . "LINE,*POLYLINE,CIRCLE,ELLIPSE,SPLINE,ARC"))))
  3.    (progn
  4.      (repeat (setq i (sslength ss))
  5.        (setq sse (cons (cdr (entget (ssname ss (setq i (1- i))))) sse))
  6.        )
  7.      (setq al (getvar "*REVCLOUDMAXARCLENGTH"))
  8.      (while al
  9.        (command "_.erase" ss "")
  10.        (setq ss (ssadd))
  11.        (foreach x sse
  12.          (command "_.revcloud" "arc" al al "object" (entmakex x) "")
  13.          (ssadd (entlast) ss)
  14.          )
  15.        (initget 6)
  16.        (setq al (getreal (strcat "\nSpecify a different arc length or ENTER to accept the current value < " (rtos al 2 2) " >: ")))
  17.        )
  18.      )
  19.    (princ "\nNo objects selected.")
  20.    )
  21. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:28 , Processed in 0.523528 second(s), 83 queries .

© 2020-2025 乐筑天下

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