乐筑天下

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

[编程交流] 卡在空调和汽车上

[复制链接]

52

主题

156

帖子

104

银币

后起之秀

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

铜币
260
发表于 2022-7-5 23:11:51 | 显示全部楼层 |阅读模式
我正在尝试编写一个程序来绘制屋顶板条。当在AutoCAD绘图上从左向右单击时,我能够使程序工作,但我想我会在程序中编写一些代码,用户可以从右向左进行选择。
我尝试使用CAR获取x坐标,然后比较它们,并根据x是否大于或小于单击点来设置屋顶板条的角度。
这是我到目前为止编写的完整代码。
我很确定这与COND函数有关,因为在我介绍它之前,程序已经运行了。
 
 
  1. (defun d2r (a)
  2. (* pi (/ a 180))
  3. )
  4. (defun r2d (a)
  5. (* 180.0 (/ a pi))
  6. )
  7. (defun c:rbt ()
  8. (getVariables-Elevation-WDE)   
  9. (getInput-RoofBattenTile)
  10. (setVariables-Elevation-WDE)
  11. (ANGset)  
  12. ;(processInput-RoofBattenTile)
  13. )
  14. (defun getInput-RoofBattenTile ();/ IP SP TP SH MDF ND
  15. (setq IP (getpoint "\nPick Insertion Point << "))
  16. (setq SP (getpoint IP "\nPick or Enter Width << "))
  17. )
  18. (defun ANGset ()
  19. (setq x-checkIP (list (car IP)))
  20. (setq x-checkSP (list (car SP)))
  21. (cond
  22. ((< x-checkIP x-checkSP)
  23.    (setq ANG (angle IP SP))
  24.    (setq ANG (r2d ANG))
  25.    (setq ANG+180 (+ 180 ANG))
  26.    (processInput-RoofBattenTile)
  27.    )
  28. ((> x-checkIP x-checkSP)
  29.    (setq ANG (angle IP SP))
  30.    (setq ANG (r2d ANG))
  31.    (setq ANG (+ ANG 180))
  32.    (setq ANG+180 (+ 360 ANG))
  33.    (processInput-RoofBattenTile)
  34.    )
  35. )
  36. )
  37. (defun processInput-RoofBattenTile ()
  38. ;(setq ANG     (angle IP SP))
  39. ;(setq ANG     (r2d ANG))  
  40. ;(setq ANG+180 (- 360 ANG))  
  41. (setq width (distance IP SP))
  42. ;Roof Battens
  43. (setq Batten-P1  (polar IP (d2r (+ ANG 0)) 55))
  44. (setq Batten-P2  (polar Batten-P1 (d2r (+ ANG 0)) 70))
  45. (setq Batten-P3  (polar Batten-P2 (d2r (+ ANG 90)) 35))
  46. (setq Batten-P3A (polar Batten-P3 (d2r (+ ANG 90)) 35))
  47. (setq Batten-P4  (polar Batten-P3 (d2r (+ ANG 180)) 70))
  48. (setq Batten-P4A (polar Batten-P4 (d2r (+ ANG 90)) 35))
  49. (setq Batten-P5  (polar SP (d2r (+ ANG 180)) 65))
  50. (setq Batten-P6  (polar Batten-P5 (d2r (+ ANG 180)) 70))
  51. (setq Batten-P7  (polar Batten-P6 (d2r (+ ANG 90)) 35))
  52. (setq Batten-P8  (polar Batten-P7 (d2r (+ ANG 0)) 70))
  53. ;Batten UCS for array
  54. (setq BattenUCS  (* ANG -1))
  55. ;Batten Spacing
  56. (setq BattenCtrs 330)
  57. (setq BattenDist   (distance IP SP))
  58. (setq BattenSpace1 (/ BattenDist BattenCtrs))
  59. (setq BattenSpace (+ (fix BattenSpace1) 1))
  60. (setq BattenSpace-1 (- BattenSpace 1))  
  61. (setq WidthDivide (/ Width BattenSpace-1))
  62. (CheckBatten)  
  63. )
  64. (defun CheckBatten ()
  65. (if (< WidthDivide 330)
  66. (progn
  67.    (alert "Less than 330 ctrs")(DrawObject-RoofBattenTile<330)
  68.    )
  69. (progn
  70.    (alert "More than 330 ctrs")(DrawObject-RoofBattenTile>330)
  71.    )
  72. )
  73. )
  74. (defun DrawObject-RoofBattenTile<330 ()
  75. (command
  76. "cecolor" "yellow"
  77. ;Roof Battens
  78. "pline" Batten-P1 Batten-P2 Batten-P3 Batten-P4 "c"
  79. "ucs" "z" BattenUCS
  80. "-array" "last" "" "r" "1" BattenSpace BattenCtrs
  81. "ucs" ""
  82. "pline" Batten-P4 Batten-P3 Batten-P3a Batten-P4a "c"
  83. "cecolor" "8"
  84. "line" Batten-P1 Batten-P3 ""
  85. "ucs" "z" BattenUCS
  86. "-array" "last" "" "r" "1" BattenSpace BattenCtrs
  87. "ucs" ""
  88. "line" Batten-P2 Batten-P4 ""
  89. "ucs" "z" BattenUCS
  90. "-array" "last" "" "r" "1" BattenSpace BattenCtrs
  91. "ucs" ""
  92. "line" Batten-P4 Batten-P3A ""
  93. "line" Batten-P3 Batten-P4A ""
  94. ;Last Batten
  95. ;"cecolor" "yellow"
  96. ;"pline" Batten-P5 Batten-P6 Batten-P7 Batten-P8 "c"
  97. ;"cecolor" "8"
  98. ;"line" Batten-P5 Batten-P7 ""
  99. ;"line" Batten-P6 Batten-P8 ""
  100. ;Roof Tile
  101. "-insert" "RoofTile" Batten-P3 "" "" ANG+180
  102. "ucs" "z" BattenUCS
  103. "-array" "last" "" "r" "1" BattenSpace BattenCtrs
  104. "erase" "p" ""
  105. "ucs" ""
  106. ;"-insert" "RoofTile" Batten-P8 "" "" ANG+180
  107. )
  108. (restore)
  109. )
  110. (defun DrawObject-RoofBattenTile>330 ()
  111. (command
  112. "cecolor" "yellow"
  113. ;Roof Battens
  114. "pline" Batten-P1 Batten-P2 Batten-P3 Batten-P4 "c"
  115. "ucs" "z" BattenUCS
  116. "-array" "last" "" "r" "1" BattenSpace-1 BattenCtrs
  117. "ucs" ""
  118. "pline" Batten-P4 Batten-P3 Batten-P3a Batten-P4a "c"
  119. "cecolor" "8"
  120. "line" Batten-P1 Batten-P3 ""
  121. "ucs" "z" BattenUCS
  122. "-array" "last" "" "r" "1" BattenSpace-1 BattenCtrs
  123. "ucs" ""
  124. "line" Batten-P2 Batten-P4 ""
  125. "ucs" "z" BattenUCS
  126. "-array" "last" "" "r" "1" BattenSpace-1 BattenCtrs
  127. "ucs" ""
  128. "line" Batten-P4 Batten-P3A ""
  129. "line" Batten-P3 Batten-P4A ""
  130. ;Last Batten
  131. "cecolor" "yellow"
  132. "pline" Batten-P5 Batten-P6 Batten-P7 Batten-P8 "c"
  133. "cecolor" "8"
  134. "line" Batten-P5 Batten-P7 ""
  135. "line" Batten-P6 Batten-P8 ""
  136. ;Roof Tile
  137. "-insert" "RoofTile" Batten-P3 "" "" ANG+180
  138. "ucs" "z" BattenUCS
  139. "-array" "last" "" "r" "1" BattenSpace-1 BattenCtrs
  140. "erase" "p" ""
  141. "ucs" ""
  142. "-insert" "RoofTile" Batten-P8 "" "" ANG+180
  143. )
  144. (restore)
  145. )
  146. (defun getVariables-Elevation-WDE ()
  147. (command "undo" "mark")
  148. (command "undo" "begin")
  149. (setq temperr *error*)
  150. (setq *error* CCerror)   
  151. (setq CColdlayer (getvar "clayer"))
  152. (setq CColdpickbox (getvar "pickbox"))
  153. (setq CColdcmdecho (getvar "cmdecho"))
  154. (setq CColdosmode (getvar "osmode"))
  155. (setq CColdorthomode (getvar "orthomode"))
  156. (setvar "cmdecho" 0)
  157. (setvar "orthomode" 1)
  158. )
  159. (defun setVariables-Elevation-WDE ()
  160. (setvar "pickbox" 0)
  161. (setvar "osmode" 0)
  162. (setvar "blipmode" 0)
  163. )
  164. (defun Restore ()
  165. (setvar "clayer" CColdlayer)
  166. (setvar "pickbox" CColdpickbox)
  167. (setvar "cmdecho" CColdcmdecho)
  168. (setvar "osmode" CColdosmode)
  169. (setvar "orthomode" CColdorthomode)
  170. (command "undo" "end")
  171. ;(command "undo" "mark")   
  172. (princ)
  173. )
  174. (defun CCerror (CCerrmsg)
  175. (setq *error* temperror)
  176. (setvar "osmode"  CColdosmode)
  177. (setvar "pickbox" CColdpickbox)
  178. (setvar "cmdecho" CColdcmdecho)
  179. (setvar "clayer" CColdlayer)
  180. (setvar "orthomode" CColdorthomode)
  181. (command "undo" "back")   
  182. (command "undo" "end")
  183. (command "undo" "mark")  
  184. (prompt "\nCommand Cancelled°... ") ;inform user
  185.   (princ)
  186. (princ)
  187. )

点是一个列表,CAR将返回其第一个元素,即X坐标。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:34:31 | 显示全部楼层
谢谢你。它现在(有点)起作用了。我只需要设置角度,使其正确绘制。但是删除列表确实有帮助,谢谢
回复

使用道具 举报

52

主题

156

帖子

104

银币

后起之秀

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

铜币
260
发表于 2022-7-5 23:54:11 | 显示全部楼层
只是对住房问题做了一点评论,为什么不考虑哪条路是向内的呢?这样做并不重要,因为你总是向内画。我的做法是,即使在顶部选择右侧,也总是选择左侧,然后比较两端的距离,确定哪一个是左端,这很简单。当你在接近终点时,画线的方向是什么并不重要。
 
  1. (setq x-checkIP [color=red][s](list[/s][/color] (car IP)[color=red][s])[/s][/color])
  2. (setq x-checkSP [color=red][s](list[/s][/color] (car SP)[color=red][s])[/s][/color])
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:16:29 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:37 , Processed in 0.506666 second(s), 60 queries .

© 2020-2025 乐筑天下

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