乐筑天下

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

[编程交流] 仍在学习,但现在试图做一个“L”形。

[复制链接]

71

主题

483

帖子

7

银币

中流砥柱

Rank: 25

铜币
765
发表于 2022-6-17 14:41:45 | 显示全部楼层 |阅读模式
感谢每一位帮助我最后一次尝试

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-6-17 18:19:13 | 显示全部楼层
嗨,这是一个简单的例子。不确定这是否是你所追求的 -
  1. ; Sample chart:
  2. ;
  3. ;   pt_legYaxis
  4. ;    |  | ipt_legYaxis
  5. ;    |  |
  6. ;    |  |
  7. ;    |  | ipt
  8. ;    |  |___________ ipt_legXaxis
  9. ; pt |________________ pt_legXaxis
  10. ;
  11. ;
  12. (defun C:BAA ( / pt LG1 LG2 THK1 pt_legYaxis pt_legXaxis ipt_legYaxis ipt_legXaxis ipt ) ; always localise your variables
  13.   
  14.   (if
  15.     (and ; code block that collects all the user's inputs
  16.       (setq pt (getpoint "Choose a starting point"))
  17.       (setq LG1 (getreal "How long is the 1st leg?"))
  18.       (setq LG2 (getreal "How long is the 2nd leg?"))
  19.       (setq THK1 (getreal "How thick is the member?"))
  20.     ); and
  21.     (progn ; code block that processes the inputs
  22.       (setq pt_legYaxis (mapcar '+ pt (list 0.0 LG1 0.0))) ; calculate the vertical leg by adding 'LG1' distance to 'pt's Y coordinate
  23.       (setq pt_legXaxis (mapcar '+ pt (list LG2 0.0 0.0))) ; calculate the horizontal leg by adding 'LG2' distance to 'pt's X coordinate
  24.       (setq ipt_legYaxis (mapcar '+ pt_legYaxis (list THK1 0.0 0.0))) ; calculate the inner top vertex by adding 'THK1' distance on 'ipt_legYaxis' s X coordinate
  25.       (setq ipt_legXaxis (mapcar '+ pt_legXaxis (list 0.0 THK1 0.0))) ; calculate the inner bottom vertex by adding 'THK1' distance on 'ipt_legXaxis' s Y coordinate
  26.       (setq ipt (mapcar '+ pt (list THK1 THK1 0.0))) ; calculate the inner intersection by adding 'THK1' distance on 'pt's X coordinate and Y coordinate
  27.       
  28.       (command "_.pline" pt pt_legXaxis ipt_legXaxis ipt ipt_legYaxis pt_legYaxis "c") ; invoke polyline command and order the point arguments to shape an outline
  29.     ); progn
  30.     (alert "User interrupted an input")
  31.   ); if
  32.   (princ)
  33. ); defun C:BAA
回复

使用道具 举报

71

主题

483

帖子

7

银币

中流砥柱

Rank: 25

铜币
765
发表于 2022-6-17 22:12:44 | 显示全部楼层
Grrr1337提供了一个很好的解决方案
如果需要,您可以更改输入
  1. (if (not AH:getvalsm)(load "Multi Getvals.lsp"))
  2. (setq ans (AH:getvalsm (list "Enter values " "1st leg Len " 10 9 "6" "2nd leg len" 10 9 "6" "Thickness " 10 9 "1" )))

回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-6-20 09:07:58 | 显示全部楼层
这个命令确实很神奇,我从检查每条线的作用中学到了很多,但我想知道是否有一种简单的方法来合并角度(正负90度)和角度外侧的圆角。我希望现在开始合并,以便以后我可以根据用户的输入进行更改。
非常感谢您的帮助和指导。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-6-20 11:11:05 | 显示全部楼层
你有你的“常规”点来描述形状,对于这样的重新计算,你可能需要一些点旋转和/或点反射子功能。
以下是来自快速Google搜索的几个链接:
旋转点列表
如何计算镜像点
对于我个人来说,要执行此类任务,我使用Lee Mac的Matrix变换函数(因为我不擅长数学):
矩阵变换函数
您的下一个目标是如何将它们合并到您的代码中,并决定使用哪种用户输入来绘制旋转/镜像形状。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-6-20 20:46:46 | 显示全部楼层
也许输入长度的-ve值可以使用GRRR码反转“L ”,但是需要改变几个值。如果Grrr不做第一,我会想一想。

回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2022-6-22 01:38:23 | 显示全部楼层
找到时间玩了一把,很抱歉Grrr迷失在pt名称中,接受负距离。
  1. ; Sample chart:
  2. ; Original code by Grrr
  3. ; Modified by Alanh to do 4 directions
  4. ;      pt2  pt3
  5. ;       |  |
  6. ;       |  |
  7. ;       |  |
  8. ;       |  | pt4
  9. ;       |  |___________ pt5
  10. ; pt1 |________________ pt6
  11. ;
  12. ;
  13. (defun C:BAA ( / oldsnap pt1 LG1 LG2 THK1 l1 l2 l3 l4 pt1 pt2 pt3 pt4 pt5 pt6) ; always localise your variables
  14. (defun l1 ( / )
  15. (setq pt2 (mapcar '+ pt1 (list 0.0 LG1 0.0))) ; calculate the vertical leg by adding 'LG1' distance to 'pt's Y coordinate
  16. (setq pt3 (mapcar '+ pt2 (list THK1 0.0 0.0))) ; calculate the inner top vertex by adding 'THK1' distance on 'ipt_legYaxis' s X coordinate
  17. (setq pt4 (mapcar '+ pt1 (list THK1 THK1 0.0))) ; calculate the inner intersection by adding 'THK1' distance on 'pt's X coordinate and Y coordinate
  18. (setq pt6 (mapcar '+ pt1 (list LG2 0.0 0.0))) ; calculate the horizontal leg by adding 'LG2' distance to 'pt's X coordinate
  19. (setq pt5 (mapcar '+ pt6 (list 0.0 THK1 0.0))) ; calculate the inner bottom vertex by adding 'THK1' distance on 'ipt_legXaxis' s Y coordinate
  20. (command "_.pline" pt1 pt2 pt3 pt4 pt5 pt6  "c")
  21. )
  22. (defun l2 ( / )
  23. (setq pt2 (mapcar '+ pt1 (list 0.0 LG1 0.0))) ; calculate the vertical leg by adding 'LG1' distance to 'pt's Y coordinate
  24. (setq pt3 (mapcar '+ pt2 (list THK1 0.0 0.0))) ; calculate the inner top vertex by adding 'THK1' distance on 'ipt_legYaxis' s X coordinate
  25. (setq pt4 (mapcar '+ pt1 (list THK1 (- THK1) 0.0))) ; calculate the inner intersection by adding 'THK1' distance on 'pt's X coordinate and Y coordinate
  26. (setq pt6 (mapcar '+ pt1 (list LG2 0.0 0.0))) ; calculate the horizontal leg by adding 'LG2' distance to 'pt's X coordinate
  27. (setq pt5 (mapcar '+ pt6 (list 0.0 (- THK1) 0.0))) ; calculate the inner bottom vertex by adding 'THK1' distance on 'ipt_legXaxis' s Y coordinate
  28. (command "_.pline" pt1 pt2 pt3 pt4 pt5 pt6  "c")
  29. )
  30. (defun l3 ( / )
  31. (setq pt2 (mapcar '+ pt1 (list 0.0 LG1 0.0))) ; calculate the vertical leg by adding 'LG1' distance to 'pt's Y coordinate
  32. (setq pt3 (mapcar '+ pt2 (list (- THK1) 0.0 0.0))) ; calculate the inner top vertex by adding 'THK1' distance on 'ipt_legYaxis' s X coordinate
  33. (setq pt4 (mapcar '+ pt1 (list (- THK1) THK1 0.0))) ; calculate the inner intersection by adding 'THK1' distance on 'pt's X coordinate and Y coordinate
  34. (setq pt6 (mapcar '+ pt1 (list LG2 0.0 0.0))) ; calculate the horizontal leg by adding 'LG2' distance to 'pt's X coordinate
  35. (setq pt5 (mapcar '+ pt6 (list 0.0 THK1 0.0))) ; calculate the inner bottom vertex by adding 'THK1' distance on 'ipt_legXaxis' s Y coordinate
  36. (command "_.pline" pt1 pt2 pt3 pt4 pt5 pt6  "c")
  37. )
  38. (defun l4 (  / )
  39. (setq pt2 (mapcar '+ pt1 (list 0.0 LG1 0.0))) ; calculate the vertical leg by adding 'LG1' distance to 'pt's Y coordinate
  40. (setq pt3 (mapcar '+ pt2 (list (- THK1) 0.0 0.0))) ; calculate the inner top vertex by adding 'THK1' distance on 'ipt_legYaxis' s X coordinate
  41. (setq pt4 (mapcar '+ pt1 (list (- THK1) (- THK1) 0.0))) ; calculate the inner intersection by adding 'THK1' distance on 'pt's X coordinate and Y coordinate
  42. (setq pt6 (mapcar '+ pt1 (list LG2 0.0 0.0))) ; calculate the horizontal leg by adding 'LG2' distance to 'pt's X coordinate
  43. (setq pt5 (mapcar '+ pt6 (list 0.0 (- THK1) 0.0))) ; calculate the inner bottom vertex by adding 'THK1' distance on 'ipt_legXaxis' s Y coordinate
  44. (command "_.pline" pt1 pt2 pt3 pt4 pt5 pt6  "c")
  45. )
  46. (if (not AH:getvalsm)(load "Multi Getvals.lsp"))
  47. (if (= (setq  pt1 (getpoint "Choose a starting point")) nil)
  48. (alert "User interrupted an input")
  49. (progn
  50.   (setq ans (AH:getvalsm (list "Enter values " "Height  " 6 5 "100" "Length " 6 5 "150" "Thick " 6 5 "10" )))
  51.   (setq LG1 (atof (nth 0 ans)) lG2 (atof (nth 1 ans)) THK1 (atof (nth 2 ans)))
  52.   (setq oldsnap (getvar 'osmode))
  53.   (setvar 'osmode 0)
  54.   (cond
  55.     ((and (> lg1 0.0)(> LG2 0.0))(L1))
  56.     ((and ( LG2 0.0))(L2))
  57.     ((and (> lg1 0.0)((defun C:BAA ( / pt LG1 LG2 THK1 pty ptx ipty iptx ipt dtr) ; Localizes the variables.
  58. (setq CL (getvar "clayer")); Gets the current layer.
  59.         
  60. (command "layer" "m" "0" "c" 4 "" "l" "continuous" "" nil); Creates and sets layer 0.
  61. (setq lm (getvar "limcheck")); Gets the current limit setting.
  62. (setvar "limcheck" 0); Sets limits to 0 or off.
  63. (defun dtr (x); Defines the degrees to radians. Remember to change it back.
  64. (* pi (/ x 180.0)); Angle divided by 180, then total is multiplied by Pi.
  65. ); Closes Rad function.
  66.         (if
  67.                 (and
  68.                         (setq pt (getpoint "Please choose a start?")); Bottom left starting point of leg.
  69.                                 (setq LG1 (getreal "Please enter the 1st leg length?")); Vertical leg length.
  70.                                         (setq LG2 (getreal "Please enter the 2nd leg length?")); horizontal leg length.
  71.                                                 (setq THK1 (getreal "How thick is the member?")); Thickness of the angle member.
  72.                                                         ); Closes and
  73.                                                                 (progn ; code block that processes the inputs
  74.                                                                         (setq pty (polar '+ pt (dtr 0.0 LG1 0.0))) ; Outside of vertical leg.
  75.                                                                 (setq ptx (polar '+ pt (dtr LG2 0.0 0.0))) ; Outside of horizontal leg.
  76.                                                         (setq ipty (polar '+ pty (dtr THK1 0.0 0.0))) ; Inside of vertical leg.
  77.                                                 (setq iptx (polar '+ ptx (dtr 0.0 THK1 0.0))) ; Inside horizontal leg.
  78.                                         (setq ipt (polar '+ pt (dtr THK1 THK1 0.0))) ; Inside intersection.
  79.                                 (command "pline" pt ptx iptx ipt ipty pty "c") ; Polyline to make the angle.
  80.                                                                 ); Closes progn
  81.         ); Closed if
  82. (command "layer" "s" cl ""); To set layer back to original.
  83. (setvar "limcheck" lm); To reset limit to starting limit.
  84. ); Closes defun
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-6-23 15:08:46 | 显示全部楼层
您当前代码的问题是您试图向“dtr”函数传递太多参数。
小提示,有些有简单的标准约定(它们可能看起来很小,但以后会对您有帮助)。
1。用“;”注释函数结尾;_
"字符串。
2。你可以排列你的行内注释以便于阅读(如果你使用文本编辑器并且可以控制它,我倾向于使用第57列)。
3。我在我的评论前加一个破折号,这样我就可以知道新的评论(句子/陈述)从哪里开始。
  1. ;; -X-          This code does not work          -X-
  2. (defun C:BAA ( / pt LG1 LG2 THK1 pty ptx ipty iptx ipt dtr) ; -Localizes the variables.
  3.   (setq CL (getvar "clayer"))                           ; -Gets the current layer.
  4.   (command "layer" "m" "0" "c" 4 "" "l" "continuous" "" nil); -Creates and sets layer 0.
  5.   (setq lm (getvar "limcheck"))                         ; -Gets the current limit setting.
  6.   (setvar "limcheck" 0)                                 ; -Sets limits to 0 or off.
  7.   (defun dtr (x)                                        ; -Defines the degrees to radians. Remember
  8.                                                         ;  to change it back.
  9.     (* pi (/ x 180.0))                                  ; -Angle divided by 180, then total
  10.                                                         ;  is multiplied by Pi.
  11.     );_ defun
  12.   (if
  13.     (and
  14.       (setq pt (getpoint "Please choose a start?"))     ; -Bottom left starting point of leg.
  15.       (setq LG1 (getreal "Please enter the 1st leg length?")); -Vertical leg length.
  16.       (setq LG2 (getreal "Please enter the 2nd leg length?")); -Horizontal leg length.
  17.       (setq THK1 (getreal "How thick is the member?"))  ; -Thickness of the angle member.
  18.       );_ and
  19.     (progn                                              ; -code block that processes the inputs
  20.       (setq pty (polar '+ pt (dtr 0.0 LG1 0.0)))        ; -Outside of vertical leg.
  21.       (setq ptx (polar '+ pt (dtr LG2 0.0 0.0)))        ; -Outside of horizontal leg.
  22.       (setq ipty (polar '+ pty (dtr THK1 0.0 0.0)))     ; -Inside of vertical leg.
  23.       (setq iptx (polar '+ ptx (dtr 0.0 THK1 0.0)))     ; -Inside horizontal leg.
  24.       (setq ipt (polar '+ pt (dtr THK1 THK1 0.0)))      ; -Inside intersection.
  25.       (command "pline" pt ptx iptx ipt ipty pty "c")    ; -Polyline to make the angle.
  26.       );_ progn
  27.     );_ if
  28.   (command "layer" "s" cl "")                           ; -To set layer back to original.
  29.   (setvar "limcheck" lm)                                ; -To reset limit to starting limit.
  30.   );_ defun
回复

使用道具 举报

4

主题

44

帖子

38

银币

初来乍到

Rank: 1

铜币
23
发表于 2022-6-23 19:57:12 | 显示全部楼层
你看过我的第6篇文章中的所有代码了吗?它是全4方向的“L”。只需确保多个Getvals。lsp位于support path或Appload add to Startup Suite中,它在启动时加载。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 09:58:49 | 显示全部楼层
有没有一个好的方法可以让它不需要“多GETVALS”LISP就能工作?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 14:41 , Processed in 0.555490 second(s), 72 queries .

© 2020-2025 乐筑天下

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