乐筑天下

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

[编程交流] Lisp功能不正常

[复制链接]

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 10:34:02 | 显示全部楼层 |阅读模式
我有一个lisp(见下文),我正在编写它来创建图纸前页上Sheets块的修订状态。它应该是一个长矩形,由间距为0.4的垂直线分隔“在由图纸中的张数决定的长度上分开。还创建了一条水平线,将块分成两半。我面临的问题涉及创建垂直线的代码,该垂直线用于将块划分为等距块。作为整体代码的一部分,它不起作用,这就是结果:
113408r7zwwp1euzupp1br.jpg
 
虽然你在图中看不到,但这张图有11张纸,11条垂直线确实是由代码绘制的。3画在末尾,6画在中间,2画在开头
 
然而,如果我将代码逐行(仅代码的底部)输入AutoCAD,那么它的工作方式就像我想象的那样:
113409uhbpwr3aciwrarbp.jpg
 
有人能帮我找出我的代码出了什么问题吗?谢谢
 
朗尼
 
P、 我还在学习,所以我知道可能有一千种更好的方法来做我正在做的事情,但为了努力学习,我希望能得到一些提示,告诉我的代码有什么问题。当然,如果你想分享你自己的代码来做同样的事情,那么我想看看。编码是关于逻辑的,我需要找出我的错误,这样我才能纠正我的想法。再次感谢。
 
  1. (defun c:revsh (/   n     linelength  ln1pt1
  2. ln1pt2x   ln1pt2y   ln1pt2    ln2pt1 ln2pt2x
  3. ln2pt2y   ln2pt2    ln3pt1    ln3pt2x ln3pt2y
  4. ln3pt2    k         x         ptx       pty
  5. ptz       lnpt1     lnpt2
  6.        )
  7. ;; Draw bottom line
  8. (setq n (length (layoutlist)))
  9. (setq linelength (* n 0.4))
  10. (setq ln1pt1 "37.75,11,0")
  11. (setq ln1pt2x (- 37.75 linelength))
  12. (setq ln1pt2y "11")
  13. (setq ln1pt2 (strcat (rtos ln1pt2x 2 2) "," ln1pt2y ",0"))
  14. (command "line" ln1pt1 ln1pt2 "")
  15. ;; Draw top line
  16. (setq ln2pt1 "37.75,12,0")
  17. (setq ln2pt2x (- 37.75 linelength))
  18. (setq ln2pt2y "12")
  19. (setq ln2pt2 (strcat (rtos ln2pt2x 2 2) "," ln2pt2y ",0"))
  20. (command "line" ln2pt1 ln2pt2 "")
  21. ;; Draw middle line
  22. (setq ln3pt1 "37.75,11.5,0")
  23. (setq ln3pt2x (- 37.75 linelength))
  24. (setq ln3pt2y "11.5")
  25. (setq ln3pt2 (strcat (rtos ln3pt2x 2 2) "," ln3pt2y ",0"))
  26. (command "line" ln3pt1 ln3pt2 "")
  27. ;; Draw sheet separators
  28. (setq k 0)
  29. (setq k (length (layoutlist)))
  30. (setq x 1)
  31. (repeat k
  32.    (setq ptx (- 37.75 (* x 0.4)))
  33.    (setq pty 11)
  34.    (setq ptz 12)
  35.    (setq lnpt1 (strcat (rtos ptx 2 2) "," (rtos pty 2 2) ",0"))
  36.    (setq lnpt2 (strcat (rtos ptx 2 2) "," (rtos ptz 2 2) ",0"))
  37.    (command "line" lnpt1 lnpt2 "")
  38.    (setq x (1+ x))
  39. )
  40. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:46:49 | 显示全部楼层
首先,您需要通过将OSMODE变量设置为0来禁用自动OSNAP-最好将其当前状态存储到一个变量中,以便在最后恢复:
这样做可以防止使用命令语句将实体添加到最近的OSNAP点。
 
当做
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:55:10 | 显示全部楼层
其次,将点构造为列表而不是字符串更有效:
  1. (setq n          (length (layoutlist)))
  2. (setq linelength (* n 0.4))
  3. (setq ln1pt1     '(37.75 11.0 0.0))
  4. (setq ln1pt2x    (- 37.75 linelength))
  5. (setq ln1pt2y    11.0)
  6. (setq ln1pt2     (list ln1pt2x ln1pt2y 0.0))
  7. (command "line" ln1pt1 ln1pt2 "")

 
 
当做
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:03:55 | 显示全部楼层
另一个建议是在设计时注释掉局部变量,以便能够列出它们的值进行调试。
 
当做
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:13:24 | 显示全部楼层
将OSMODE设置为0成功。我在我看到的很多代码中都看到过这种做法,我只是需要受到它的影响才能真正理解它。
 
至于你的其他建议,特别是关于把我的观点变成列表而不是字符串的建议,非常感谢!作为一个新手,我没有太多的前瞻性思考,大多数时候我仍然在以最基本的方式做事(你可以从我的代码中看出),哈哈。再次感谢。
 
朗尼
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:18:47 | 显示全部楼层
不客气!祝你学习顺利!
 
请看一下极函数——当你知道位移的大小和方向(角度)时,它将帮助你计算给定点的位移。
这样,上述摘录将成为:
  1. (setq n          (length (layoutlist)))
  2. (setq linelength (* n 0.4))
  3. (setq ln1pt1     '(37.75 11.0 0.0))
  4. (setq ln1pt2     (polar ln1pt1 pi linelength))
  5. (command "line" ln1pt1 ln1pt2 "")

 
 
当做
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:26:23 | 显示全部楼层
实际上我已经试着先做了,但我真的没有找到答案,我确信这也解决了我上面提到的关于代码过于简单的问题。以下是我之前的经历:
  1. 4
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:40:58 | 显示全部楼层
一些更正:
 
[列表=1]
  • 构造点使用列表函数-事实上,点是2或3个实数的列表。
  • 用作极轴参数的点不需要用括号括起来。
  • 极轴语句的角度必须以弧度为单位,而不是以十进制度数为单位。
    [/列表]
     
    问候,
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-6 16:51 , Processed in 0.471445 second(s), 71 queries .

    © 2020-2025 乐筑天下

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