明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3040|回复: 13

[已解答] 弯头绘制程序,输入I系列直径(小数点)时出错求指导

[复制链接]
发表于 2014-5-26 11:34:12 | 显示全部楼层 |阅读模式
  1. (defun C:yj_wt ()
  2.   (setvar "osmode" 0)
  3.   (setq p0 (getpoint "\n set basepoint:"))
  4.   (setq p1 (getpoint p0 "\n input zhijing:"))
  5.   (setq tt (getdist p1 "\n input bihou:"))
  6.   (setq ang (angle p0 p1))
  7.   (setq l (distance p0 p1))
  8.   (yj_wtsj l)
  9.   (setq p00 (polar p0 ang  (+ A (/ l 2))))
  10.   (setq p2 (polar p0 ang (* 0.5 l)))
  11.   (setq p3 (polar p2 (- ang (/ pi 4)) (* (sqrt 2) A)))
  12.   (setq p6 (polar p0 ang tt))
  13.   (setq p7 (polar p1 ang (* tt -1)))
  14.   (setq p4 (polar p00 (- ang (/ pi 2)) (- A (/ l 2))))
  15.   (setq p5 (polar p00 (- ang (/ pi 2)) (+ A (/ l 2))))
  16.   (setq p8 (polar p4 (- ang (/ pi 2)) tt))
  17.   (setq p9 (polar p5 (+ ang (/ pi 2)) tt))

  18.   (command "_.line" p0 p1 "")
  19.   (command "_.line" p4 p5 "")
  20.   (command "_.arc" "c" p00 p1 p4)
  21.   (command "_.arc" "c" p00 p0 p5)
  22.   (command "_.arc" "c" p00 p6 p9)
  23.   (command "_.arc" "c" p00 p7 p8)
  24.   (command "_.arc" "c" p00 p2 p3)



  25. (print)
  26. )


  27. (defun yj_wtsj (x)   
  28. (setq data21 '(
  29. (  l   DN   A  )
  30. (
  31. (  32  25  25  )
  32. (  33.7  25  25  )
  33. (  38  32  32  )
  34. (  42.4  32  32  )
  35. (  45  40  38  )
  36. (  48.3  40  38  )
  37. (  57  50  51  )
  38. (  60.3  50  51  )
  39. (  73  65  64  )
  40. (  76  65  64  )
  41. (  88.9  80  76  )
  42. (  89  80  76  )
  43. (  101.6  90  89  )
  44. (  108  100  102  )
  45. (  114.3  100  102  )
  46. (  133  125  127  )
  47. (  141.3  125  127  )
  48. (  159  150  152  )
  49. (  168.3  150  152  )
  50. (  219  200  203  )
  51. (  219.1  200  203  )
  52. (  273  250  254  )
  53. (  273  250  254  )
  54. (  323.9  300  305  )
  55. (  325  300  305  )
  56. (  355.6  350  356  )
  57. (  377  350  356  )
  58. (  406.4  400  406  )
  59. (  426  400  406  )
  60. (  457  450  457  )
  61. (  480  450  457  )
  62. (  508  500  508  )
  63. (  530  500  508  )
  64. (  559  550  559  )
  65. (  610  600  610  )
  66. (  630  600  610  )
  67.   )   
  68.                )      
  69.   )   
  70. (setq blm (car data21)   
  71.        sjz (cadr data21)
  72. )
  73. (mapcar 'set blm (assoc x sjz));从数据表中取出数据对l、DN、A进行赋值

  74. (princ)
  75. )
发表于 2014-5-26 13:47:12 | 显示全部楼层
本帖最后由 liu22737 于 2014-5-26 13:58 编辑

没时间搞懂你的程式,不过你的表有问题
可以把表换一下
(assoc x sjz);assoc是按点对表的第一位提取的,X必须于第一位对应
   如果X是序号可以用 NTH 提取

(setq data21(list
(list  'l   'DN   'A  )
'(
(  32  25  25  )
(  33.7  25  25  )
(  38  32  32  )
(  42.4  32  32  )
(  45  40  38  )
(  48.3  40  38  )
(  57  50  51  )
(  60.3  50  51  )
(  73  65  64  )
(  76  65  64  )
(  88.9  80  76  )
(  89  80  76  )
(  101.6  90  89  )
(  108  100  102  )
(  114.3  100  102  )
(  133  125  127  )
(  141.3  125  127  )
(  159  150  152  )
(  168.3  150  152  )
(  219  200  203  )
(  219.1  200  203  )
(  273  250  254  )
(  273  250  254  )
(  323.9  300  305  )
(  325  300  305  )
(  355.6  350  356  )
(  377  350  356  )
(  406.4  400  406  )
(  426  400  406  )
(  457  450  457  )
(  480  450  457  )
(  508  500  508  )
(  530  500  508  )
(  559  550  559  )
(  610  600  610  )
(  630  600  610  )
  )   
               )      
  )   
发表于 2014-5-26 14:24:31 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-5-26 14:32 编辑

  1. (defun yj_wtsj (x)
  2.   (SETQ x(assoc x'((  32  25  25  )
  3.                                   (  33.7  25  25  )
  4.                                   (  38  32  32  )
  5.                                   (  42.4  32  32  )
  6.                                   (  45  40  38  )
  7.                                   (  48.3  40  38  )
  8.                                   (  57  50  51  )
  9.                                   (  60.3  50  51  )
  10.                                   (  73  65  64  )
  11.                                   (  76  65  64  )
  12.                                   (  88.9  80  76  )
  13.                                   (  89  80  76  )
  14.                                   (  101.6  90  89  )
  15.                                   (  108  100  102  )
  16.                                   (  114.3  100  102  )
  17.                                   (  133  125  127  )
  18.                                   (  141.3  125  127  )
  19.                                   (  159  150  152  )
  20.                                   (  168.3  150  152  )
  21.                                   (  219  200  203  )
  22.                                   (  219.1  200  203  )
  23.                                   (  273  250  254  )
  24.                                   (  273  250  254  )
  25.                                   (  323.9  300  305  )
  26.                                   (  325  300  305  )
  27.                                   (  355.6  350  356  )
  28.                                   (  377  350  356  )
  29.                                   (  406.4  400  406  )
  30.                                   (  426  400  406  )
  31.                                   (  457  450  457  )
  32.                                   (480  450  457  )
  33.                                   (  508  500  508  )
  34.                                   (  530  500  508  )
  35.                                   (  559  550  559  )
  36.                                   (  610  600  610  )
  37.                                   (  630  600  610  ))))
  38. (mapcar 'set (LIST 'l 'DN 'A)(IF x x'(NIL NIL NIL)))
  39. ;;如果输入的X找不到将 l dn a 均赋为空,如果需要赋为0或者别的,可以把'(nil nil nil)相应的修改一下
  40.   )

另外,此处给L dn a赋了值,但调用该子程序后一直没用到DN?不清楚你这些数据的意义

 楼主| 发表于 2014-5-26 16:02:57 | 显示全部楼层
llsheng_73 发表于 2014-5-26 14:24
另外,此处给L dn a赋了值,但调用该子程序后一直没用到DN?不清楚你这些数据的意义

是个绘制弯头的程序,好多程序都是用DN,找到L与A的值,但这里暂时用不到,所以没DN了。。
把这个子函数替换后还是不可以使用,你直径输入114.3试试。。
 楼主| 发表于 2014-5-26 16:06:47 | 显示全部楼层
liu22737 发表于 2014-5-26 13:47
没时间搞懂你的程式,不过你的表有问题
可以把表换一下
(assoc x sjz);assoc是按点对表的第一位提取的, ...

失败了,第一列数据是管子的外径,在运行后输入第一列中的数据,输整数的话没问题,输小数的话就提示参数类型错误。
发表于 2014-5-26 16:22:42 | 显示全部楼层
梦里水香 发表于 2014-5-26 16:06
失败了,第一列数据是管子的外径,在运行后输入第一列中的数据,输整数的话没问题,输小数的话就提示参数 ...

(setq l (distance p0 p1))返回值与表对应不上,表内是整数,L是实数,
 楼主| 发表于 2014-5-26 21:22:23 | 显示全部楼层
liu22737 发表于 2014-5-26 16:22
(setq l (distance p0 p1))返回值与表对应不上,表内是整数,L是实数,

可能是主函数里用的自定义函数用错了或是摆错位置了吧。。
因为加载子函数后查询!A值都是正确的,就是运行主函数后第一列小数对应的A值出不来,第一列整数对应的A值都没错。
纠结好几天了。。
发表于 2014-5-26 21:50:20 | 显示全部楼层
梦里水香 发表于 2014-5-26 21:22
可能是主函数里用的自定义函数用错了或是摆错位置了吧。。
因为加载子函数后查询!A值都是正确的,就是运 ...

(YJ_WTSJ 219.1)
(219.1 200 203)
_$ l
219.1
_$ dn
200
_$ a
203
_$ (YJ_WTSJ 33.7)
(33.7 25 25)
_$ l
33.7
_$ dn
25
_$ a
25
_$
 楼主| 发表于 2014-5-26 22:01:45 | 显示全部楼层
llsheng_73 发表于 2014-5-26 21:50
(YJ_WTSJ 219.1)
(219.1 200 203)
_$ l

对啊,就是这样,单独运行子命令是正确。
发表于 2014-5-26 22:21:07 | 显示全部楼层
(yj_wtsj l)
改为
(yj_wtsj(rtos L 2 0))

再把表内第一位改为整数加引号
例(  114.3  100  102  )改为(  “114” 100  102  )

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-19 18:42 , Processed in 0.194555 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表