乐筑天下

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

[编程交流] 窗扇图纸代码

[复制链接]

5

主题

34

帖子

29

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 14:18:05 | 显示全部楼层 |阅读模式
我是lisp的新手,这段代码占用了我本周大部分的业余时间,有些代码是借用的,比如Afralisp网站上的defun DTR,但它们很明显。
受我在这里所看到的启发,我希望能将我的大部分门窗设计自动化。
虽然这个代码并不漂亮,但它确实可以工作,需要调整(希望下一步能在玻璃条中工作)。
欢迎任何观察,但请将笑声保持在沉闷的咆哮中!谢谢
 
  1. (defun DTR (a) (* PI (/ a 180.0))
  2. )
  3. (defun C:SASH1 (/ IP P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16
  4. HEIGHT WIDTH GRT GL1 GL2 RW1 BORA HEAD STILE OLDSNAP OLDBLIP OLDLIGHT)
  5. ; lisp routine to draw basic casement sash
  6. ; by Rob-GB
  7. (setq OLDSNAP (getvar "OSMODE")
  8. )
  9. (setq OLDBLIP (getvar "BLIPMODE")
  10. )
  11. (setq OLDLIGHT (getvar "HIGHLIGHT")
  12. )
  13. (setvar "CMDECHO" 0)
  14. (setvar "BLIPMODE" 0)
  15. (setq IP (getpoint "\nInsertion Point: "))
  16. (setvar "OSMODE" 0)
  17. (setq HEIGHT (getreal "\nEnter height of sash : ")
  18. )
  19. (setq WIDTH (getreal "\nEnter Width of sash : ")
  20. )
  21. (setq BORA (getreal "\nEnter Bottom Rail : ")
  22. )
  23. (setq HEAD (getreal "\nEnter Top Rail : ")
  24. )
  25. (setq STILE (getreal "\nEnter Stile : ")
  26. )
  27. (setq GRT (getreal "\nEnter Glass Rebate : ")
  28. )
  29. ;Basic dims required
  30. (setq GL1 (- HEIGHT (+(- HEAD GRT)(- BORA GRT)))
  31. )
  32. (setq GL2 (- WIDTH (* 2 (- STILE GRT)))
  33. )
  34. (setq RW1 (- WIDTH (* 2 STILE))
  35. )
  36. (setq P1 (POLAR IP (DTR 90.0) HEIGHT)
  37. ) ; PLOT POINTS
  38. (setq P2 (POLAR P1 (DTR 0.0) STILE)
  39. )
  40. (setq P3 (POLAR P2 (DTR 0.0) RW1)
  41. )
  42. (setq P4 (POLAR P3 (DTR 0.0) STILE)
  43. )
  44. (setq P5 (POLAR P4 (DTR 270.0) HEIGHT)
  45. )
  46. (setq P6 (POLAR P5 (DTR 180.0) STILE)
  47. )
  48. (setq P7 (POLAR P6 (DTR 180.0) RW1)
  49. )
  50. (setq P8 (POLAR P3 (DTR 270.0) HEAD)
  51. )
  52. (setq P9 (POLAR P8 (DTR 180.0) RW1)
  53. )
  54. (setq P10 (POLAR P6 (DTR 90.0) BORA)
  55. )
  56. (setq P11 (POLAR P10 (DTR 180.0) RW1)
  57. )
  58. (setq P12 (POLAR P7 (DTR 90.0) (- BORA GRT))
  59. )
  60. (setq P13 (POLAR P12 (DTR 180.0) GRT)
  61. )
  62. (setq P14 (POLAR P13 (DTR 90.0) GL1)
  63. )
  64. (setq P15 (POLAR P14 (DTR 0.0) GL2)
  65. )
  66. (setq P16 (POLAR P15 (DTR 270.0) GL1)
  67. )
  68. ;points plotted
  69. (command "PLINE" IP P1 P2 P3 P4 P5 P6 P7 IP ""
  70. ); outside drawn
  71. (command "PLINE" P2 P7 ""
  72. )
  73. (command "PLINE" P3 P6 ""
  74. )
  75. (command "PLINE" P8 P9 ""
  76. )
  77. (command "PLINE" P10 P11 ""
  78. )
  79. (command "PLINE" P13 P14 P15 P16 P13 ""
  80. )
  81. (setvar "OSMODE" OLDSNAP)
  82. (setvar "BLIPMODE" OLDBLIP)
  83. (setvar "HIGHLIGHT" OLDLIGHT)
  84. (princ)
  85. );defun
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:22:27 | 显示全部楼层
 
Rob GB不错,
 
但我建议您将插入点提示移到标注输入提示之后。这会更有意义。
 
干得好!
秃鹰
 
  1. (defun DTR (a) (* PI (/ a 180.0)))
  2. (defun C:SASH1 (/ IP P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16
  3.                  HEIGHT WIDTH GRT GL1 GL2 RW1 BORA HEAD STILE OLDSNAP OLDBLIP OLDLIGHT)
  4. ; lisp routine to draw basic casement sash
  5. ; by Rob-GB
  6. (setq OLDSNAP (getvar "OSMODE"))
  7. (setq OLDBLIP (getvar "BLIPMODE"))
  8. (setq OLDLIGHT (getvar "HIGHLIGHT"))
  9. (setvar "CMDECHO" 0)
  10. (setvar "BLIPMODE" 0)
  11. (setvar "OSMODE" 0)
  12. (setq HEIGHT (getreal "\nEnter height of sash : "))
  13. (setq WIDTH (getreal "\nEnter Width of sash : "))
  14. (setq BORA (getreal "\nEnter Bottom Rail : "))
  15. (setq HEAD (getreal "\nEnter Top Rail : "))
  16. (setq STILE (getreal "\nEnter Stile : "))
  17. (setq GRT (getreal "\nEnter Glass Rebate : "))
  18. [color=red](setq IP (getpoint "\nInsertion Point: "))  ;Move insertion point prompt here[/color]
  19. ;Basic dims required
  20. (setq GL1 (- HEIGHT (+(- HEAD GRT)(- BORA GRT))))
  21. (setq GL2 (- WIDTH (* 2 (- STILE GRT))))
  22. (setq RW1 (- WIDTH (* 2 STILE)))
  23. ; PLOT POINTS
  24. (setq P1 (POLAR IP (DTR 90.0) HEIGHT))
  25. (setq P2 (POLAR P1 (DTR 0.0) STILE))
  26. (setq P3 (POLAR P2 (DTR 0.0) RW1))
  27. (setq P4 (POLAR P3 (DTR 0.0) STILE))
  28. (setq P5 (POLAR P4 (DTR 270.0) HEIGHT))
  29. (setq P6 (POLAR P5 (DTR 180.0) STILE))
  30. (setq P7 (POLAR P6 (DTR 180.0) RW1))
  31. (setq P8 (POLAR P3 (DTR 270.0) HEAD))
  32. (setq P9 (POLAR P8 (DTR 180.0) RW1))
  33. (setq P10 (POLAR P6 (DTR 90.0) BORA))
  34. (setq P11 (POLAR P10 (DTR 180.0) RW1))
  35. (setq P12 (POLAR P7 (DTR 90.0) (- BORA GRT)))
  36. (setq P13 (POLAR P12 (DTR 180.0) GRT))
  37. (setq P14 (POLAR P13 (DTR 90.0) GL1))
  38. (setq P15 (POLAR P14 (DTR 0.0) GL2))
  39. (setq P16 (POLAR P15 (DTR 270.0) GL1))
  40. ;points plotted
  41. (command "PLINE" IP P1 P2 P3 P4 P5 P6 P7 IP ""); outside drawn
  42. (command "PLINE" P2 P7 "")
  43. (command "PLINE" P3 P6 "")
  44. (command "PLINE" P8 P9 "")
  45. (command "PLINE" P10 P11 "")
  46. (command "PLINE" P13 P14 P15 P16 P13 "")
  47. (setvar "OSMODE" OLDSNAP)
  48. (setvar "BLIPMODE" OLDBLIP)
  49. (setvar "HIGHLIGHT" OLDLIGHT)
  50. (princ)
  51. );defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:26:20 | 显示全部楼层
嘿Rob,
 
第一次尝试不错,干得好伙计
 
几点提示:-
 
[列表]
  • 我会在代码中包含一个错误处理程序,因为您正在篡改系统变量,如OSMODE和CMDECHO等-因此,如果用户点击Esc,您的OSNAP将被破坏。
    [/列表]
    [列表]
  • 我会在IF语句中包含所有提示,这样如果用户没有输入某个条目,例程就不会出错。
    [/列表]
    [列表]
  • 包括“_”作为命令的前缀,即。
    [/列表]
    1. (command "_.pline"...)

     
    因为这将使其语言和版本兼容。“_”表示语言兼容性,以及“。”如果用户重新定义了函数。
     
    除此之外,我认为它可以变得更简洁,但这是迟早的事
     
    干得好
     
  • 回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-6 14:29:06 | 显示全部楼层
    一点也不坏。
     
    代替(getreal),我更喜欢:
     
    它强制用户进行正确的输入:
    (initget 7)强制输入非负、非零和非零
    (getdist)允许以十进制和/或当前单位设置拾取点和键盘输入
     
    -大卫
    回复

    使用道具 举报

    5

    主题

    34

    帖子

    29

    银币

    初来乍到

    Rank: 1

    铜币
    25
    发表于 2022-7-6 14:31:38 | 显示全部楼层
    谢谢大家的指点,我会做一些修补。
     
    Buzzard这更符合逻辑,但我想在关闭快照之前选择IP。我只是把它们关掉,因为每个人似乎都这么做。
     
    我有李(命令行…)在那里,但当我运行测试时,我遇到了问题,最终使用了(命令“pline”…)而是使用前缀。我将进一步研究错误处理程序和IF语句。
     
    David Bethel(initget 7)我到现在还没有遇到“和(getdist)我没有选择,因为我眨眼的思维都是公制的,因为我早就忘记了其他度量单位。不过,这将使它更便于用户使用。
     
    另一方面:代码是否必须与左边距对齐,或者漂亮的锯齿形外观是否也可以工作?
    但是
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 14:35:02 | 显示全部楼层
     
    LISP解释器(解释您在机器对话中所写内容的东西)不关心代码中的空白(空白)。
     
    我发现当代码缩进时更容易阅读,即。
     
    1. (if (setq pt (getpoint "\nSelect a Point: "))
    2. (progn  ; <<-- Indent as IF statement isn't closed
    3.    (setq a ...  ; <<-- Indent as Progn statement isn't closed
    回复

    使用道具 举报

    5

    主题

    34

    帖子

    29

    银币

    初来乍到

    Rank: 1

    铜币
    25
    发表于 2022-7-6 14:39:11 | 显示全部楼层
    顺便说一句,我还希望启用捕捉,以便在插入时可以捕捉到任何对象。创建窗扇之前,请关闭捕捉。
     
    1. (defun DTR (a) (* PI (/ a 180.0)))
    2. (defun C:SASH1 (/ IP P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16
    3.                  HEIGHT WIDTH GRT GL1 GL2 RW1 BORA HEAD STILE OLDSNAP OLDBLIP OLDLIGHT)
    4. ; lisp routine to draw basic casement sash
    5. ; by Rob-GB
    6. (setq OLDSNAP (getvar "OSMODE"))
    7. (setq OLDBLIP (getvar "BLIPMODE"))
    8. (setq OLDLIGHT (getvar "HIGHLIGHT"))
    9. (setvar "CMDECHO" 0)
    10. (setvar "BLIPMODE" 0)
    11. (setq HEIGHT (getreal "\nEnter height of sash : "))
    12. (setq WIDTH (getreal "\nEnter Width of sash : "))
    13. (setq BORA (getreal "\nEnter Bottom Rail : "))
    14. (setq HEAD (getreal "\nEnter Top Rail : "))
    15. (setq STILE (getreal "\nEnter Stile : "))
    16. (setq GRT (getreal "\nEnter Glass Rebate : "))
    17. [color=red](setq IP (getpoint "\nInsertion Point: "))            ;Move insertion point prompt here[/color]
    18. [color=red](setvar "OSMODE" 0)                                   ;Snap mode moved here[/color]
    19. ;Basic dims required
    20. (setq GL1 (- HEIGHT (+(- HEAD GRT)(- BORA GRT))))
    21. (setq GL2 (- WIDTH (* 2 (- STILE GRT))))
    22. (setq RW1 (- WIDTH (* 2 STILE)))
    23. ; PLOT POINTS
    24. (setq P1 (POLAR IP (DTR 90.0) HEIGHT))
    25. (setq P2 (POLAR P1 (DTR 0.0) STILE))
    26. (setq P3 (POLAR P2 (DTR 0.0) RW1))
    27. (setq P4 (POLAR P3 (DTR 0.0) STILE))
    28. (setq P5 (POLAR P4 (DTR 270.0) HEIGHT))
    29. (setq P6 (POLAR P5 (DTR 180.0) STILE))
    30. (setq P7 (POLAR P6 (DTR 180.0) RW1))
    31. (setq P8 (POLAR P3 (DTR 270.0) HEAD))
    32. (setq P9 (POLAR P8 (DTR 180.0) RW1))
    33. (setq P10 (POLAR P6 (DTR 90.0) BORA))
    34. (setq P11 (POLAR P10 (DTR 180.0) RW1))
    35. (setq P12 (POLAR P7 (DTR 90.0) (- BORA GRT)))
    36. (setq P13 (POLAR P12 (DTR 180.0) GRT))
    37. (setq P14 (POLAR P13 (DTR 90.0) GL1))
    38. (setq P15 (POLAR P14 (DTR 0.0) GL2))
    39. (setq P16 (POLAR P15 (DTR 270.0) GL1))
    40. ;points plotted
    41. (command "PLINE" IP P1 P2 P3 P4 P5 P6 P7 IP ""); outside drawn
    42. (command "PLINE" P2 P7 "")
    43. (command "PLINE" P3 P6 "")
    44. (command "PLINE" P8 P9 "")
    45. (command "PLINE" P10 P11 "")
    46. (command "PLINE" P13 P14 P15 P16 P13 "")
    47. (setvar "OSMODE" OLDSNAP)
    48. (setvar "BLIPMODE" OLDBLIP)
    49. (setvar "HIGHLIGHT" OLDLIGHT)
    50. (princ)
    51. );defun
    回复

    使用道具 举报

    32

    主题

    1166

    帖子

    1146

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    159
    发表于 2022-7-6 14:43:06 | 显示全部楼层
     
    这些错误会告诉你出了什么问题,以及你需要修复什么。
     
    例如,我通常是这样解释它们的:
     
    1. (defun DTR (a) (* PI (/ a 180.0)))
    2. (defun C:SASH1 (/ IP P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16
    3.                  HEIGHT WIDTH GRT GL1 GL2 RW1 BORA HEAD STILE OLDSNAP OLDBLIP OLDLIGHT)
    4. ; lisp routine to draw basic casement sash
    5. ; by Rob-GB
    6. (setq OLDSNAP (getvar "OSMODE"))
    7. (setq OLDBLIP (getvar "BLIPMODE"))
    8. (setq OLDLIGHT (getvar "HIGHLIGHT"))
    9. (setvar "CMDECHO" 0)
    10. (setvar "BLIPMODE" 0)
    11. [color=red](setvar "OSMODE" 575) ;Set object snap to end, mid, cen, node, qua, int and nea on[/color]
    12. (setq HEIGHT (getreal "\nEnter height of sash : "))
    13. (setq WIDTH (getreal "\nEnter Width of sash : "))
    14. (setq BORA (getreal "\nEnter Bottom Rail : "))
    15. (setq HEAD (getreal "\nEnter Top Rail : "))
    16. (setq STILE (getreal "\nEnter Stile : "))
    17. (setq GRT (getreal "\nEnter Glass Rebate : "))
    18. [color=red](setq IP (getpoint "\nInsertion Point: "))            ;Move insertion point prompt here[/color]
    19. [color=red](setvar "OSMODE" 0)                                   ;Snap mode moved here[/color]
    20. ;Basic dims required
    21. (setq GL1 (- HEIGHT (+(- HEAD GRT)(- BORA GRT))))
    22. (setq GL2 (- WIDTH (* 2 (- STILE GRT))))
    23. (setq RW1 (- WIDTH (* 2 STILE)))
    24. ; PLOT POINTS
    25. (setq P1 (POLAR IP (DTR 90.0) HEIGHT))
    26. (setq P2 (POLAR P1 (DTR 0.0) STILE))
    27. (setq P3 (POLAR P2 (DTR 0.0) RW1))
    28. (setq P4 (POLAR P3 (DTR 0.0) STILE))
    29. (setq P5 (POLAR P4 (DTR 270.0) HEIGHT))
    30. (setq P6 (POLAR P5 (DTR 180.0) STILE))
    31. (setq P7 (POLAR P6 (DTR 180.0) RW1))
    32. (setq P8 (POLAR P3 (DTR 270.0) HEAD))
    33. (setq P9 (POLAR P8 (DTR 180.0) RW1))
    34. (setq P10 (POLAR P6 (DTR 90.0) BORA))
    35. (setq P11 (POLAR P10 (DTR 180.0) RW1))
    36. (setq P12 (POLAR P7 (DTR 90.0) (- BORA GRT)))
    37. (setq P13 (POLAR P12 (DTR 180.0) GRT))
    38. (setq P14 (POLAR P13 (DTR 90.0) GL1))
    39. (setq P15 (POLAR P14 (DTR 0.0) GL2))
    40. (setq P16 (POLAR P15 (DTR 270.0) GL1))
    41. ;points plotted
    42. (command "PLINE" IP P1 P2 P3 P4 P5 P6 P7 IP ""); outside drawn
    43. (command "PLINE" P2 P7 "")
    44. (command "PLINE" P3 P6 "")
    45. (command "PLINE" P8 P9 "")
    46. (command "PLINE" P10 P11 "")
    47. (command "PLINE" P13 P14 P15 P16 P13 "")
    48. (setvar "OSMODE" OLDSNAP)
    49. (setvar "BLIPMODE" OLDBLIP)
    50. (setvar "HIGHLIGHT" OLDLIGHT)
    51. (princ)
    52. );defun

     
    这应该足以为你指明正确的方向
    回复

    使用道具 举报

    32

    主题

    1166

    帖子

    1146

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    159
    发表于 2022-7-6 14:45:42 | 显示全部楼层
    谢谢Buzzard。
     
    如果例程允许(getdist)部分,那么这当然是非常有意义的,这将从快照打开中受益!
    Lisp程序的迷雾正在变成一种短暂的喘息(我希望如此)。
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 14:47:58 | 显示全部楼层
    至于SNAP和其他系统变量,我只会尽可能晚地更改它们,并尽快将其重新打开。这意味着,如果没有错误处理程序,您的代码不太可能与sys vars发生冲突。
     
    所以在这种情况下,我会:
     
    1. malformed list  =  Missed right parenthesis ")"
    2. extra right paren  =  Extra Right parenthesis ")"
    3. too few arguments  =  A function doesn't have all the necessary information to run.
    4. too many arguments  =  A function has been given too much information
    5. bad argument type: stringp/numberp/etc =  A function has been provided with the wrong type of argument (i.e. try at the command line: (rtos "2")

     
    因为这些只需要为“命令”调用更改。
     
    或者:
     
    1. (setvar "CMDECHO" 0) (setvar "OSMODE" 0)
    2. (command "PLINE" IP P1 P2 P3 P4 P5 P6 P7 IP ""); outside drawn
    3. (command "PLINE" P2 P7 "")
    4. (command "PLINE" P3 P6 "")
    5. (command "PLINE" P8 P9 "")
    6. (command "PLINE" P10 P11 "")
    7. (command "PLINE" P13 P14 P15 P16 P13 "")
    8. (setvar "OSMODE" OLDSNAP)
    9. (setvar "BLIPMODE" OLDBLIP)
    10. (setvar "HIGHLIGHT" OLDLIGHT)
    11. (princ)
    12. );defun

     
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-5 02:56 , Processed in 0.358957 second(s), 72 queries .

    © 2020-2025 乐筑天下

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