乐筑天下

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

[编程交流] Lisp程序表演滑稽。。。不在a中

[复制链接]

12

主题

119

帖子

107

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 10:14:28 | 显示全部楼层 |阅读模式
我是一个自学成才的novie LISP作家,让它立刻被人知道。。。
创建此例程是为了使用直径和增量长度绘制阶梯轴。。。问题是,有时计算不会生成直线。我注意到缩小后这种情况会更多。此外,我的“while”循环完全错误,我试图在其中添加一个选项,但效果不好。。。如有任何帮助/建议,将不胜感激。
 
编辑:我得到一个错误“在(X,Y,Z)处创建零长度线”
 
  1. (DEFUN C:FPI ( / x pt1 Y1 Y1a Y1b X1 X1a Y2 Y2a Y2b X2 X2a)
  2. (defun dtr (x)
  3. (* pi (/ x 180.0))
  4. )
  5. (setq pt1 (getpoint "\nSelect Start Point:"))
  6. (setq Y1 (getreal "\nEnter Diameter:"))
  7. (setq Y1a (/ Y1 2))
  8. (setq Y1b (polar pt1 (dtr 90) Y1a))
  9. (command "LINE" pt1 Y1b "")
  10. (setq X1 (getreal "\nEnter Length:"))
  11. (setq X1a (polar Y1b (dtr 180) X1))
  12. (command "LINE" Y1b X1a "")
  13. (while
  14. (setq Y2 (getreal "\nEnter Diameter:"))
  15. (setq Y2a (/ (- Y2 Y1) 2))
  16. (setq Y2b (polar X1a (dtr 90) Y2a))
  17. (command "LINE" X1a Y2b "")
  18. (setq X2 (getreal "\nEnter Length:"))
  19. (setq X2a (polar Y2b (dtr 180) X2))
  20. (command "LINE" Y2b X2a "")
  21. (setq Y1 (getreal "\nEnter Diameter:"))
  22. (setq Y1a (/ (- Y1 Y2) 2))
  23. (setq Y1b (polar X2a (dtr 90) Y1a))
  24. (command "LINE" X2a Y1b "")
  25. (setq X1 (getreal "\nEnter Length:"))
  26. (setq X1a (polar Y1b (dtr 180) X1))
  27. (command "LINE" Y1b X1a ""))(PRINC))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:22:42 | 显示全部楼层
首先,由于运行OSNAP,您遇到了问题。或者暂时将osmode设置为零,在每个点(在命令调用中)之前加上“_non”,或者使用entmod/VLA绘制线。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 10:27:02 | 显示全部楼层
你好,Jplanera,
 
阅读你的“问题”,首先想到的是“osnaps”。在画线之前,让舒尔关闭osnap。OSNAP总是把事情搞砸。
 
此外,您确实使用了很多“setq”,可以稍微减少一点,请看下面:
 
  1. [size=1][font=Fixedsys][color=#ff0000]([/color][color=blue]DEFUN[/color] C:FPI [color=red]([/color][color=blue]/[/color] x pt1 Y1 Y1a Y1b X1 X1a Y2 Y2a Y2b X2 X2a OldOsmode[color=red])[/color][/font][/size]
  2. [size=1][font=Fixedsys][color=purple]; added[/color][/font][/size]
  3. [size=1][font=Fixedsys] [color=red]([/color][color=blue]setq[/color] OldOsmode [color=red]([/color][color=blue]getvar[/color] [color=#ff00ff]"OSMODE"[/color][color=red]))[/color][/font][/size]
  4. [size=1][font=Fixedsys] [color=red]([/color][color=blue]setvar[/color] [color=#ff00ff]"OSMODE"[/color] [color=green]0[/color][color=red])[/color] [color=purple]; turn Osnaps off[/color][/font][/size]
  5. [size=1][font=Fixedsys] [color=red]([/color][color=blue]defun[/color] dtr [color=red]([/color]x[color=red])[/color][/font][/size]
  6. [size=1][font=Fixedsys]   [color=red]([/color][color=blue]*[/color] pi [color=red]([/color][color=blue]/[/color] x [color=green]180.0[/color][color=red]))[/color][/font][/size]
  7. [size=1][font=Fixedsys] [color=red])[/color] [color=purple];_defun[/color][/font][/size]
  8. [size=1][font=Fixedsys] [color=red]([/color][color=blue]setq    pt1[/color] [color=red]([/color][color=blue]getpoint[/color] [color=#ff00ff]"\nSelect Start Point:"[/color][color=red])[/color][/font][/size]
  9. [size=1][font=Fixedsys]    Y1  [color=red]([/color][color=blue]getreal[/color] [color=#ff00ff]"\nEnter Diameter:"[/color][color=red])[/color][/font][/size]
  10. [size=1][font=Fixedsys]    Y1a [color=red]([/color][color=blue]/[/color] Y1 [color=green]2[/color][color=red])[/color][/font][/size]
  11. [size=1][font=Fixedsys]    Y1b [color=red]([/color][color=blue]polar[/color] pt1 [color=red]([/color][color=blue]dtr[/color] [color=green]90[/color][color=red])[/color] Y1a[color=red])[/color][/font][/size]
  12. [size=1][font=Fixedsys] [color=red])[/color] [color=purple];_setq[/color][/font][/size]
  13. [size=1][font=Fixedsys] [color=red]([/color][color=blue]command[/color] [color=#ff00ff]"LINE"[/color] pt1 Y1b [color=#ff00ff]""[/color][color=red])[/color][/font][/size]
  14. [size=1][font=Fixedsys] [color=red]([/color][color=blue]setq    X1[/color]  [color=red]([/color][color=blue]getreal[/color] [color=#ff00ff]"\nEnter Length:"[/color][color=red])[/color][/font][/size]
  15. [size=1][font=Fixedsys]    X1a [color=red]([/color][color=blue]polar[/color] Y1b [color=red]([/color][color=blue]dtr[/color] [color=green]180[/color][color=red])[/color] X1[color=red])[/color][/font][/size]
  16. [size=1][font=Fixedsys] [color=red])[/color][/font][/size]
  17. [size=1][font=Fixedsys] [color=red]([/color][color=blue]command[/color] [color=#ff00ff]"LINE"[/color] Y1b X1a [color=#ff00ff]""[/color][color=red])[/color][/font][/size]
  18. [size=1][font=Fixedsys] [color=red]([/color][color=blue]while[/color][/font][/size]
  19. [size=1][font=Fixedsys]   [color=red]([/color][color=blue]setq[/color] Y2 [color=red]([/color][color=blue]getreal[/color] [color=#ff00ff]"\nEnter Diameter:"[/color][color=red]))[/color][/font][/size]
  20. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]setq[/color] Y2a [color=red]([/color][color=blue]/[/color] [color=red]([/color][color=blue]-[/color] Y2 Y1[color=red])[/color] [color=green]2[/color][color=red])[/color][/font][/size]
  21. [size=1][font=Fixedsys]       Y2b [color=red]([/color][color=blue]polar[/color] X1a [color=red]([/color][color=blue]dtr[/color] [color=green]90[/color][color=red])[/color] Y2a[color=red])[/color][/font][/size]
  22. [size=1][font=Fixedsys]    [color=red])[/color][/font][/size]
  23. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]command[/color] [color=#ff00ff]"LINE"[/color] X1a Y2b [color=#ff00ff]""[/color][color=red])[/color][/font][/size]
  24. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]setq[/color] X2  [color=red]([/color][color=blue]getreal[/color] [color=#ff00ff]"\nEnter Length:"[/color][color=red])[/color][/font][/size]
  25. [size=1][font=Fixedsys]       X2a [color=red]([/color][color=blue]polar[/color] Y2b [color=red]([/color][color=blue]dtr[/color] [color=green]180[/color][color=red])[/color] X2[color=red])[/color][/font][/size]
  26. [size=1][font=Fixedsys]    [color=red])[/color][/font][/size]
  27. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]command[/color] [color=#ff00ff]"LINE"[/color] Y2b X2a [color=#ff00ff]""[/color][color=red])[/color][/font][/size]
  28. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]setq[/color] Y1  [color=red]([/color][color=blue]getreal[/color] [color=#ff00ff]"\nEnter Diameter:"[/color][color=red])[/color][/font][/size]
  29. [size=1][font=Fixedsys]       Y1a [color=red]([/color][color=blue]/[/color] [color=red]([/color][color=blue]-[/color] Y1 Y2[color=red])[/color] [color=green]2[/color][color=red])[/color][/font][/size]
  30. [size=1][font=Fixedsys]       Y1b [color=red]([/color][color=blue]polar[/color] X2a [color=red]([/color][color=blue]dtr[/color] [color=green]90[/color][color=red])[/color] Y1a[color=red])[/color][/font][/size]
  31. [size=1][font=Fixedsys]    [color=red])[/color][/font][/size]
  32. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]command[/color] [color=#ff00ff]"LINE"[/color] X2a Y1b [color=#ff00ff]""[/color][color=red])[/color][/font][/size]
  33. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]setq[/color] X1  [color=red]([/color][color=blue]getreal[/color] [color=#ff00ff]"\nEnter Length:"[/color][color=red])[/color][/font][/size]
  34. [size=1][font=Fixedsys]       X1a [color=red]([/color][color=blue]polar[/color] Y1b [color=red]([/color][color=blue]dtr[/color] [color=green]180[/color][color=red])[/color] X1[color=red])[/color][/font][/size]
  35. [size=1][font=Fixedsys]    [color=red])[/color][/font][/size]
  36. [size=1][font=Fixedsys]    [color=red]([/color][color=blue]command[/color] [color=#ff00ff]"LINE"[/color] Y1b X1a [color=#ff00ff]""[/color][color=red])[/color][/font][/size]
  37. [size=1][font=Fixedsys] [color=red])[/color][/font][/size]
  38. [size=1][font=Fixedsys][color=purple]; added[/color][/font][/size]
  39. [size=1][font=Fixedsys] [color=red]([/color][color=blue]setvar[/color] [color=#ff00ff]"OSMODE"[/color] OldOsmode[color=red])[/color] [color=purple]; turn osmode back to what it was[/color][/font][/size]
  40. [size=1][font=Fixedsys] [color=red]([/color][color=blue]PRINC[/color][color=red])[/color][/font][/size]
  41. [size=1][font=Fixedsys][color=red])[/color] [color=purple];_defun[/color][/font][/size]

 
它运行,但我不知道它的目的。
如果有帮助,请告诉我。
当做
马尔科
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 10:29:24 | 显示全部楼层
AARGHH。。。。你打败了我AlanJT
回复

使用道具 举报

12

主题

119

帖子

107

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 10:33:01 | 显示全部楼层
谢谢你们俩!!啊!OSNAPS!!很好的提示可以最小化“setq”的Marco。
 
我不熟悉“non”或entmod/VLA,alan。。虽然我可以使用osmode!
 
我有时不得不创建粗糙的机器外形,它们都是具有数十种不同直径的阶梯轴。为了更容易地绘制,我创建了这个lisp,在已知直径和步长的情况下绘制轴的一侧。
 
我现在有一个无限循环。用Esc或Enter结束循环的正确步骤是什么?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:36:45 | 显示全部楼层
我猜你正在绘制与图中类似的轴的立面图?
 
也许这会有所帮助:
 
  1. [b][color=BLACK]([/color][/b]defun c:ssel [b][color=FUCHSIA]([/color][/b]/ sp od l d p1 p2[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]setq sp [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nStart Point:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]setq od 0[b][color=FUCHSIA])[/color][/b]
  5. [b][color=FUCHSIA]([/color][/b]while
  6.    [b][color=NAVY]([/color][/b]progn
  7.      [b][color=MAROON]([/color][/b]initget 6[b][color=MAROON])[/color][/b]
  8.      [b][color=MAROON]([/color][/b]setq d [b][color=GREEN]([/color][/b]getdist [color=#2f4f4f]"\nNext Diameter <Enter> To Exit:   "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.    [b][color=NAVY]([/color][/b]initget 7[b][color=NAVY])[/color][/b]
  10.    [b][color=NAVY]([/color][/b]setq l [b][color=MAROON]([/color][/b]getdist [color=#2f4f4f]"\nSegment Length:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  11.    [b][color=NAVY]([/color][/b]setq p1 [b][color=MAROON]([/color][/b]polar sp [b][color=GREEN]([/color][/b]* pi 0.5[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* [b][color=BLUE]([/color][/b]- d od[b][color=BLUE])[/color][/b] 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  12.          p2 [b][color=MAROON]([/color][/b]polar p1 [b][color=GREEN]([/color][/b]* pi 1.0[b][color=GREEN])[/color][/b] l[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  13.    [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 10 sp[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 11 p1[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  14.    [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 10 p1[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 11 p2[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  15.    [b][color=NAVY]([/color][/b]setq sp p2 od d[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  16. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
-大卫
111433hloex7wvduueweln.jpg
回复

使用道具 举报

12

主题

119

帖子

107

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 10:42:30 | 显示全部楼层
是的,就是这样。虽然我更愿意让它单独绘制每个片段,但它工作得非常出色。我知道我知道。。。我我,我想要我想要!
 
有没有可能有一个“后退”选项?例如,我输入了错误的第四直径,我想备份并重做它。。。
我仍然在与条件和whiles以及所有这些做斗争。。。总有一天我会得到的!
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:45:51 | 显示全部楼层
??
 
  1. (defun c:TEst (/ _line lst d s)
  2. (defun _line (a b)
  3.    (entmakex (list '(0 . "LINE") (cons 10 (trans a 1 0)) (cons 11 (trans b 1 0))))
  4. )
  5. (if (car (setq lst (list (getpoint "\nSpecify start point: "))))
  6.    (while (and (progn (initget 6) (setq d (getdist (car lst) "\nSpecify diameter: ")))
  7.                (_line (car lst) (car (setq lst (cons (polar (car lst) (/ pi 2.) d) lst))))
  8.                (progn (initget 6) (setq s (getdist (car lst) "\nSpecify segment length: ")))
  9.                (_line (car lst) (car (setq lst (cons (polar (car lst) pi s) lst))))
  10.           )
  11.    )
  12. )
  13. (princ)
  14. )
回复

使用道具 举报

12

主题

119

帖子

107

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 10:49:05 | 显示全部楼层
天啊,完成一项任务有这么多不同的方法。太棒了!
 
嗯,我真的不明白它是怎么工作的:但是艾伦,你的程序似乎画出了实际的直径,我需要输入直径,输出半径。。。
 
谢谢你们的帮助
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:57:22 | 显示全部楼层
哎呀,我没有意识到这部分代码。我要回家了,但我可能晚些时候复习。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 21:18 , Processed in 1.391984 second(s), 74 queries .

© 2020-2025 乐筑天下

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