乐筑天下

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

[编程交流] Lisp制作矩形

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:54:22 | 显示全部楼层 |阅读模式
你好
我制作了一个名为Beam的Lisp文件。lsp,它正在生成矩形,但无法生成圆;
  1. (defun c:beam (/ width height UpperBarsDia LowBarDia p1 oldsnap oldortho newortho p2 p3 p4 )
  2. (if (< (setq width (cond ((getdist(strcat"\nSpecify beam Width <min 100>:")))))
  3.    (* 50 2))
  4. (progn
  5.        (alert "Width of beam must be minimum 150")
  6.        (c:beam)))
  7. (if (< (setq height (cond ((getdist(strcat"\nSpecify beam Height <min 100>: ")))))
  8. (* 50 2))
  9.   (progn
  10.    (alert "Height of Beam must be minimum 150")
  11.    (exit))
  12.           (princ))
  13. (initget "2 3 4")
  14. (setq UpperBarsQTY (getkword "\nSpecify number of Upper Bars <2 3 4>:")); Upper side Bars quantity
  15. (setq UpDia (getint"\nSpecify Upper Bars Diameter:")
  16. UpRad (/ UpDia 2))                                                  ; Upper Bars Diameter  
  17. (setq p1 (getpoint"\nSpecify Point:"))
  18. (setq oldsnap (getvar "osmode"))
  19. (setq oldortho (getvar "orthomode"))
  20. (setq newsnap (setvar "osmode" 0))
  21. (setq newortho (setvar "orthomode" 0))
  22. (setq p2 (polar p1 (dtr 0.0) width))
  23. (setq p3 (polar p2 (dtr -90.0) height))
  24. (setq p4 (polar  p3 (dtr -180) width))
  25.   (small_rect)
  26.   (command "_pline" p1 "_w" 0 0 p2 p3 p4 "_c" ""
  27.    "_pline" st st1 st2 st3 "_c" "")
  28. (setvar "osmode" oldsnap)
  29. (setvar "orthomode" oldortho)
  30. (princ)
  31.   (cond
  32.    ((eq UpperBarsQTY 2)(1Circle)(4Circle))
  33.    ((eq UpperBarsQTY 3)(1Circle)(CenterCircle)(4Circle))
  34.    ((eq UpperBarsQTY 4)(1Circle)(2Circle)(3Circle)(4Circle)))
  35. (setq off 25.0
  36.   st (list (+ (car p1) off)
  37.            (- (cadr p1) off)
  38.           )
  39.   st1(polar st 0.0 (- width (* off 2)))
  40.   st2(polar st1 (dtr -90) (- height (* off 2)))
  41.   st3(polar st2 (dtr -180) (- width (* off 2)))
  42.   )
  43.   (setq Dist1 (distance st st1)
  44. Center (/ Dis1 2)
  45. Qrtr (/ dist 4)
  46. Qrtr2 (* Qrtr 2))
  47. (setq 1CirLoc (list(+ (car st)UpRad)(-(cadr st)UpRad))
  48. CenterCircleLoc(list(-(+ (car st)Center)UpRad)(- (cadr st) UpRad))
  49. 2CirLoc (list(-(+ (car st)Qrtr)UpRad)(- (cadr st) UpRad))
  50. 3CirLoc (list(-(+ (car st) Qrtr2)UpRad)(- (cadr st) UpRad))
  51. 4CirLoc (list (-(+ (car st)Dist1)UpRad)(-(cadrst)UpRad)))
  52. )
  53. ;----------------------------------------------------------------------------------------
  54. (defun DTR (ang)(* pi (/ ang 180.0)))
  55. ;----------------------------------------------------------------------------------------
  56. (defun 1Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 1CirLoc )(cons 40 UpRad)))(princ))      
  57. (defun CenterCircle()(entmake (list '(0 . "CIRCLE")(cons 10 CenterCircleLoc)(cons 40 LowRad)))(princ))
  58. (defun 2Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 2CirLoc)(cons 40 LowRad)))(princ))
  59. (defun 3Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 3CirLoc)(cons 40 LowRad)))(princ))
  60. (defun 4Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 4CirLoc)(cons 40 LowRad)))(princ))
  61. ;----------------------------------------------------------------------------------------
  62. (defun small_rect ()
  63.        (setq off 25.0
  64.   st (list (+ (car p1) off)
  65.            (- (cadr p1) off)
  66.           )
  67.   st1(polar st 0.0 (- width (* off 2)))
  68.   st2(polar st1 (dtr -90) (- height (* off 2)))
  69.   st3(polar st2 (dtr -180) (- width (* off 2)))
  70.   ))

 
任何帮助都将不胜感激。
我的问候。
萨尔瓦特
115427hiu8frqct19fi8il.jpg
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 11:11:38 | 显示全部楼层
好的,试试这个:
刚意识到你想把主打杆放在上面,我就把它们放在了底部——但你可以根据需要进行调整。(仅梁钢筋位于顶部-非常奇怪!)
你的马镫角没有弯曲,所以我添加了它们。
我还添加了一个名为“cover”的变量,该变量在绘制钢筋截面时至关重要。
还有其他方面可以改进,但这只是一个开始。。。。
 
hth公司
小鱼
 
  1. (defun c:beam (/ width height UpperBarsDia LowBarDia
  2. p1 oldsnap oldortho newortho
  3. p2 p3 p4 cover Pt1 Pt2
  4. Pt3 Pt4 cpt1 Pt5 Pt6 Pt7
  5. Pt8 Pt9 Pt10 Pt11 Pt12 cpt2
  6. cover cpt3 cpt4 Pt14 Pt15 Pt16
  7. Pt17 cpt1a cpt1b cpt1c e1 e2 e3 e4 e5 e6 e7 e8
  8. )
  9. (if (< (setq width (cond ((getdist(strcat"\nSpecify beam Width <min 100>:")))))
  10. (* 50 2))
  11. (progn
  12. (alert "Width of beam must be minimum 150")
  13. (c:beam)))
  14. (if (< (setq height (cond ((getdist(strcat"\nSpecify beam Height <min 100>: ")))))
  15. (* 50 2))
  16. (progn
  17. (alert "Height of Beam must be minimum 150")
  18. (exit))
  19. (princ))
  20. (initget "2 3 4")
  21. (setq UpperBarsQTY (getkword "\nSpecify number of Upper Bars <2 3 4>:")); Upper side Bars quantity
  22. (setq UpDia (getint"\nSpecify Upper Bars Diameter: "))
  23. (setq cover (getint"\nSpecify cover: "))
  24. (setq UpRad (/ UpDia 2)) ; Upper Bars Diameter
  25. (setq p1 (getpoint"\nSpecify Point:"))
  26. (setq oldsnap (getvar "osmode"))
  27. (setq oldortho (getvar "orthomode"))
  28. (setq newsnap (setvar "osmode" 0))
  29. (setq newortho (setvar "orthomode" 0))
  30. (setq p2 (polar p1 (dtr 0.0) width))
  31. (setq p3 (polar p2 (dtr -90.0) height))
  32. (setq p4 (polar p3 (dtr -180) width))
  33. (small_rect)
  34. (command "layer" "make" "Concrete" "ltype" "continuous" "" "color" "yellow" "" "")
  35. (command "layer" "set" "Concrete" "")
  36. (command "_pline" p1 "_w" 0 0 p2 p3 p4 "_c" ""
  37. ;;; "_pline" st st1 st2 st3 "_c" ""
  38. )
  39. (setvar "osmode" oldsnap)
  40. (setvar "orthomode" oldortho)
  41. ;;; (princ)
  42. ;----------------
  43. ;Calculate points
  44. ;----------------
  45. ;Rebar bottom Rhs
  46. (setq Pt1 (polar p4 (* 0.5 pi) (+ cover (/ UpDia 2)));beam edge lhs
  47. Pt2 (polar Pt1 0 cover);tangent point top Lhs
  48. cpt1 (polar Pt2 0 (/ UpDia 2));centrepoint of main bar
  49. pt3 (polar p4 0 (+ cover (/ UpDia 2)));beam edge bottom
  50. Pt4 (polar Pt3 (* 0.5 pi) cover);tangent point bottom Lhs
  51. ;Rebar bottom Lhs
  52. Pt5 (polar p3 (* 0.5 pi) (+ cover (/ UpDia 2)));beam edge Rhs
  53. Pt6 (polar Pt5 pi cover);tangent point top Rhs
  54. cpt2(polar Pt6 pi (/ UpDia 2));centrepoint of main bar
  55. pt7 (polar p3 pi (+ cover (/ UpDia 2)));beam edge bottom
  56. Pt8 (polar Pt7 (* 0.5 pi) cover);tangent point bottom Rhs
  57. ;Rebar Top Rhs
  58. Pt9 (polar p1 (* 1.5 pi) (+ cover (/ UpDia 2)));beam edge lhs
  59. Pt10 (polar Pt9 0 cover);tangent point top Lhs
  60. cpt3 (polar Pt10 0 (/ UpDia 2));centrepoint of main bar
  61. pt11 (polar p1 0 (+ cover (/ UpDia 2)));beam edge bottom
  62. Pt12 (polar Pt11 (* 1.5 pi) cover);tangent point bottom Lhs
  63. ;Rebar Top Lhs
  64. Pt13 (polar p2 (* 1.5 pi) (+ cover (/ UpDia 2)));beam edge lhs
  65. Pt14 (polar Pt13 pi cover);tangent point top Lhs
  66. cpt4 (polar Pt14 pi (/ UpDia 2));centrepoint of main bar
  67. pt15 (polar p2 pi (+ cover (/ UpDia 2)));beam edge bottom
  68. Pt16 (polar Pt15 (* 1.5 pi) cover);tangent point bottom Lhs
  69. CornerBarDist (Distance cpt1 cpt2);Distance between to main bars
  70. cpt1a (polar cpt1 0 (/ CornerBarDist 2));middle bar centrepoint
  71. cpt1b (polar cpt1 0 (/ CornerBarDist 3));first middle main bar
  72. cpt1c (polar cpt1 0 (*(/ CornerBarDist 3)2));second middle main bar
  73. );setq
  74. ;---------------
  75. ;Draw components
  76. ;---------------
  77. ;Draw stirrup
  78. (command "layer" "make" "Main Rebar" "ltype" "continuous" "" "color" "cyan" "" "")
  79. (command "layer" "set" "Main Rebar" "")
  80. (cond ((= UpperBarsQTY "2")
  81. (progn
  82. (command "circle" cpt2 (/ UpDia 2) "");Draw rhs main bar
  83. (command "circle" cpt1 (/ UpDia 2) "");Draw lhs main bar
  84. ))
  85. ( (= UpperBarsQTY "3")
  86. (progn
  87. (command "circle" cpt2 (/ UpDia 2) "");Draw rhs main bar
  88. (command "circle" cpt1 (/ UpDia 2) "");Draw lhs main bar
  89. (command "circle" cpt1a (/ UpDia 2) "");Draw centre main bar
  90. ))
  91. ((= UpperBarsQTY "4")
  92. (progn
  93. (command "circle" cpt2 (/ UpDia 2) "");Draw rhs main bar
  94. (command "circle" cpt1 (/ UpDia 2) "");Draw lhs main bar
  95. (command "circle" cpt1b (/ UpDia 2) "");Draw first middle main bar
  96. (command "circle" cpt1c (/ UpDia 2) "");Draw second middle main bar
  97. ))
  98. );cond
  99. ;Draw stirrup
  100. (command "layer" "make" "Stirrup" "ltype" "continuous" "" "color" "green" "" "")
  101. (command "layer" "set" "Stirrup" "")
  102. (command "ARC" Pt2 "e" Pt4 cpt1);left curve of stirrup
  103. (setq e1 (entlast))
  104. (command "ARC" Pt8 "e" Pt6 cpt2);right curve of stirrup
  105. (setq e2 (entlast))
  106. (command "ARC" Pt12 "e" Pt9 cpt3);right curve of stirrup
  107. (setq e3 (entlast))
  108. (command "ARC" Pt14 "e" Pt16 cpt4);right curve of stirrup
  109. (setq e4 (entlast))
  110. (command "PLINE" Pt4 Pt8 "")
  111. (setq e5 (entlast))
  112. (command "PLINE" Pt2 Pt10 "")
  113. (setq e6 (entlast))
  114. (command "PLINE" Pt6 Pt14 "")
  115. (setq e7 (entlast))
  116. (command "PLINE" Pt16 Pt12 "")
  117. (setq e8 (entlast))
  118. (command "_.PEDIT" e5 "JOIN" e5 e2 e3 e4 e1 e6 e7 e8 "" "");make stirrup single a pline
  119. ;;; (cond
  120. ;;; ((eq UpperBarsQTY 2)(1Circle)(4Circle))
  121. ;;; ((eq UpperBarsQTY 3)(1Circle)(CenterCircle)(4Circle))
  122. ;;; ((eq UpperBarsQTY 4)(1Circle)(2Circle)(3Circle)(4Circle)))
  123. ;;; (setq off 25.0
  124. ;;; st (list (+ (car p1) off)
  125. ;;; (- (cadr p1) off)
  126. ;;; )
  127. ;;; st1(polar st 0.0 (- width (* off 2)))
  128. ;;; st2(polar st1 (dtr -90) (- height (* off 2)))
  129. ;;; st3(polar st2 (dtr -180) (- width (* off 2)))
  130. ;;; )
  131. ;;; (setq Dist1 (distance st st1)
  132. ;;; Center (/ Dis1 2)
  133. ;;; Qrtr (/ dist 4)
  134. ;;; Qrtr2 (* Qrtr 2))
  135. ;;; (setq 1CirLoc (list(+ (car st)UpRad)(-(cadr st)UpRad))
  136. ;;; CenterCircleLoc(list(-(+ (car st)Center)UpRad)(- (cadr st) UpRad))
  137. ;;; 2CirLoc (list(-(+ (car st)Qrtr)UpRad)(- (cadr st) UpRad))
  138. ;;; 3CirLoc (list(-(+ (car st) Qrtr2)UpRad)(- (cadr st) UpRad))
  139. ;;; 4CirLoc (list (-(+ (car st)Dist1)UpRad)(-(cadrst)UpRad)))
  140. (princ)
  141. )
  142. ;----------------------------------------------------------------------------------------
  143. (defun DTR (ang)(* pi (/ ang 180.0)))
  144. ;----------------------------------------------------------------------------------------
  145. ;;; (defun 1Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 1CirLoc )(cons 40 UpRad)))(princ))
  146. ;;; (defun CenterCircle()(entmake (list '(0 . "CIRCLE")(cons 10 CenterCircleLoc)(cons 40 LowRad)))(princ))
  147. ;;; (defun 2Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 2CirLoc)(cons 40 LowRad)))(princ))
  148. ;;; (defun 3Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 3CirLoc)(cons 40 LowRad)))(princ))
  149. ;;; (defun 4Circle ()(entmake (list '(0 . "CIRCLE")(cons 10 4CirLoc)(cons 40 LowRad)))(princ))
  150. ;----------------------------------------------------------------------------------------
  151. (defun small_rect ()
  152. (setq off 25.0
  153. st (list (+ (car p1) off)
  154. (- (cadr p1) off)
  155. )
  156. st1(polar st 0.0 (- width (* off 2)))
  157. st2(polar st1 (dtr -90) (- height (* off 2)))
  158. st3(polar st2 (dtr -180) (- width (* off 2)))
  159. ))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 11:37:15 | 显示全部楼层
 
非常感谢您对我的lisp文件所做的辛勤工作。
我的Lisp程序的姿势将使一个梁的钢筋向上和向下,以及,我没有包括他们,因为我失去了在开始,我集中在用户输入,阻止我达到它的最后,使低下降酒吧的功能,这就是为什么你说这是非常奇怪,但它不是在现实中。
 
你的lisp给了我帮助,但我仍在努力,以获得lisp的最佳性能。
 
再次感谢您的善意帮助。
你的
塔瓦特
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

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

铜币
275
发表于 2022-7-6 11:42:50 | 显示全部楼层
不客气,很乐意帮忙。
 
更多建议-由于您有许多输入变量,最好创建一个对话框,而不是命令行驱动的提示。
-您应该在其中一个上角显示箍筋的末端。
 
旧金山
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 12:05:19 | 显示全部楼层
你好
 
我确实同意你的建议,我以前确实想过这一点,但处理DCL会增加更多功能,这是时间问题。
 
我很快就会用DCL试试。
 
谢谢你的关心
塔瓦特
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 12:31 , Processed in 0.578712 second(s), 76 queries .

© 2020-2025 乐筑天下

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