找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3232|回复: 53

[已解决] [已解决]申请指定间距排孔程序

[复制链接]

已领礼包: 41个

财富等级: 招财进宝

发表于 2017-6-3 19:25:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 pezyl 于 2017-6-16 22:07 编辑

看到N版的  指定距离间隔批量插点(http://bbs.xdcad.net/thread-706983-1-1.html) 帖子,刚好手头有个类似的工作要做,无奈编程完全不会,特申请编程,谢谢大家。

无标题.png

求个程序

I     需求:曲线给定偏移量,鼠标点选偏移方向,在偏移后的位置

      一、指定起点和终点,中间剩余长度按由起点开始按指定间距取点

      二、指定起点和终点,中间剩余长度按指定数量均分取点

      在起点终点和这些均分或间距点上,1、批量画指定直径大小的单圆  或 2、批量画指定直径大小和孔间距的两个圆(两圆连线中点在取点上)。

II    具体步骤:输入命令-----选择曲线或[设置S/设置SS](点选位置离哪头近哪头就为起点)-----鼠标指定偏移方向(相对于曲线)-----完成排孔

      在[设置SS]时指定: 1、排列方式(按间距还是均分)   2、偏移量   3、孔径   4、孔间距(为0或直接回车时画单孔)   这些为基本固定不改的参数

      在[设置S]时指定:   1、起点   2、终点(为0或直接回车时不需要终点)   3、间距或是均分数量

      设置数据能记忆,下次开CAD可以沿用最近一次的设置数据。

III   直线弧线多段线,样条曲线?不知道能不能实现,最好能不改变对象捕捉点。               

      程序提供4套命令tt1 tt2 tt3 tt4,实现同样的功能,记忆不同的参数数据,这样就不用每次都修改数据。     

      比较啰嗦了,谢谢各位!

找到个下图的加工孔程序,操作步骤类似我的需求,很是方便,命令是tt1。 4.gif

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-6-3 22:44:22 | 显示全部楼层
本帖最后由 Lispboy 于 2017-6-3 22:46 编辑

1、第二个图,下排的是不是拷贝的第一个图,忘记改了? 位置没对上和上边标注那排2、最左边那个单独的一个的,怎么来的?
2、第一个图也不是单圆啊?

如果图不对了,重新更新下图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-4 09:49:22 | 显示全部楼层

谢谢您,之前的图是有歧义,更新了下图形和说明。书到用时方恨少,惭愧,只好做伸手族了。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2017-6-4 13:47:34 | 显示全部楼层
支持支持!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-6-4 16:58:10 | 显示全部楼层
本帖最后由 csharp 于 2017-6-4 17:40 编辑

大致这样写

  1. (defun c:tt (/ p1 p2 sd ed kw dis r _getdivpts _getpts _mkcir pts)
  2.   (defun _getdivpts (p1 p2 sd ed n / an d d1 d0 pts)
  3.     (setq an (angle p1 p2)
  4.           d  (distance p1 p2)
  5.           d1 (- d sd ed)
  6.     )
  7.     (if        (> d1 0.0)
  8.       (progn
  9.         (setq d0 sd
  10.               d2 (/ d1 n)
  11.         )
  12.         (repeat        (1+ n)
  13.           (setq        pts (cons (polar p1 an d0) pts)
  14.                 d0  (+ d0 d2)
  15.           )
  16.         )
  17.       )
  18.     )
  19.     pts
  20.   )
  21.   (defun _getpts (p1 p2 sd ed dis / an d d1 tf pts)
  22.     (setq an (angle p1 p2)
  23.           d  (distance p1 p2)
  24.           d1 (- d sd ed)
  25.     )
  26.     (if        (> d1 0.0)
  27.       (progn
  28.         (setq tf t)
  29.         (while tf
  30.           (setq        pts (cons (polar p1 an sd) pts)
  31.                 p1  (car pts)
  32.                 sd  dis
  33.           )
  34.           (if (< (distance p1 p2) dis)
  35.             (setq tf nil)
  36.           )
  37.         )
  38.         (cons (polar p2 (+ an pi) ed) pts)
  39.       )
  40.     )
  41.   )
  42.   (defun _mkcir        (pts r)
  43.     (foreach x pts
  44.       (entmake (list '(0 . "circle") (cons 10 x) (cons 40 r)))
  45.     )
  46.   )
  47.   (if (not #draw_mode)
  48.     (setq #draw_mode "1")
  49.   )
  50.   (if (not #circle_readius)
  51.     (setq #circle_readius 1.0)
  52.   )
  53.   (if
  54.     (and (setq p1 (getpoint "\nFirst Point: "))
  55.          (setq p2 (getpoint p1 "\nSecond Point: "))
  56.          (if
  57.            (setq
  58.              sd        (getdist
  59.                   p1
  60.                   (if #start_dist
  61.                     (strcat "\nstart dist<" (rtos #start_dist 2 2) ">: ")
  62.                     "\nstart dist: "
  63.                   )
  64.                 )
  65.            )
  66.             (setq #start_dist sd)
  67.             (setq sd #start_dist)
  68.          )
  69.          sd
  70.          (if (setq ed
  71.                     (getdist p2
  72.                              (if #end_dist
  73.                                (strcat "\nend dist<" (rtos #end_dist 2 2) ">: ")
  74.                                "\nend dist: "
  75.                              )
  76.                     )
  77.              )
  78.            (setq #end_dist ed)
  79.            (setq ed #end_dist)
  80.          )
  81.          ed
  82.     )
  83.      (progn
  84.        (setq r
  85.               (getdist p1
  86.                        (if #circle_readius
  87.                          (strcat "\n半径<" (rtos #circle_readius 2 2) ">: ")
  88.                          "\n半径: "
  89.                        )
  90.               )
  91.        )
  92.        (if r
  93.          (setq #circle_readius r)
  94.          (setq r #circle_readius)
  95.        )
  96.        (initget "1 2")
  97.        (setq
  98.          kw (getkword
  99.               (strcat "绘制方式[等分(1)/等距(2)]<" #draw_mode ">: ")
  100.             )
  101.        )
  102.        (if (null kw)
  103.          (setq kw "1")
  104.        )
  105.        (setq #draw_mode kw)
  106.        (if (= #draw_mode "1")
  107.          (progn
  108.            (setq
  109.              n (getint
  110.                  (if #divide_num
  111.                    (strcat "\n输入等分数量<" (itoa #divide_num) ">: ")
  112.                    "\n输入等分数量: "
  113.                  )
  114.                )
  115.            )
  116.            (if n
  117.              (setq #divide_num n)
  118.              (setq n #divide_num)
  119.            )
  120.            (if n
  121.              (progn
  122.                (entmake (list '(0 . "line") (cons 10 p1) (cons 11 p2)))
  123.                (if (setq pts (_getdivpts p1 p2 sd ed n))
  124.                  (_mkcir pts r)
  125.                )
  126.              )
  127.            )
  128.          )
  129.          (progn
  130.            (setq
  131.              dis (getdist p1
  132.                           (if #space_dist
  133.                             (strcat "\n距离<" (itoa #space_dist) ">: ")
  134.                             "\n距离: "
  135.                           )
  136.                  )
  137.            )
  138.            (if dis
  139.              (setq #divide_num n)
  140.              (setq n #divide_num)
  141.            )
  142.            (if dis
  143.              (progn
  144.                (entmake (list '(0 . "line") (cons 10 p1) (cons 11 p2)))
  145.                (if (setq pts (_getpts p1 p2 sd ed dis))
  146.                  (_mkcir pts r)
  147.                )
  148.              )
  149.            )
  150.          )
  151.        )
  152.      )
  153.   )
  154.   (princ)
  155. )

参数太多的时候用界面更方便

  1. (defun c:holes/Form2#OnInitialize (/)
  2.   (dcl-MessageBox
  3.     "To Do: code must be added to event handler\r\nc:holes/Form2#OnInitialize"
  4.     "To do"
  5.   )
  6. )
  7. (defun c:holes/Form2/PickStartDist#OnClicked (/)
  8.   (dcl-MessageBox
  9.     "To Do: code must be added to event handler\r\nc:holes/Form2/PickStartDist#OnClicked"
  10.     "To do"
  11.   )
  12. )
  13. (defun c:holes/Form2/PickEndDist#OnClicked (/)
  14.   (dcl-MessageBox
  15.     "To Do: code must be added to event handler\r\nc:holes/Form2/PickEndDist#OnClicked"
  16.     "To do"
  17.   )
  18. )
  19. (defun c:holes/Form2/PickRadius#OnClicked (/)
  20.   (dcl-MessageBox
  21.     "To Do: code must be added to event handler\r\nc:holes/Form2/PickRadius#OnClicked"
  22.     "To do"
  23.   )
  24. )
  25. (defun c:holes/Form2/PickCircleDist#OnClicked (/)
  26.   (dcl-MessageBox
  27.     "To Do: code must be added to event handler\r\nc:holes/Form2/PickCircleDist#OnClicked"
  28.     "To do"
  29.   )
  30. )
  31. (defun c:holes/Form2/PickMargin#OnClicked (/)
  32.   (dcl-MessageBox
  33.     "To Do: code must be added to event handler\r\nc:holes/Form2/PickMargin#OnClicked"
  34.     "To do"
  35.   )
  36. )
  37. (defun c:holes/Form2/IsDived#OnClicked (Value /)
  38.   (dcl-MessageBox
  39.     "To Do: code must be added to event handler\r\nc:holes/Form2/IsDived#OnClicked"
  40.     "To do"
  41.   )
  42. )
  43. (defun c:holes/Form2/IsOmetry#OnClicked        (Value /)
  44.   (dcl-MessageBox
  45.     "To Do: code must be added to event handler\r\nc:holes/Form2/IsOmetry#OnClicked"
  46.     "To do"
  47.   )
  48. )
  49. (defun c:holes/Form2/IsSingleCirle#OnClicked (Value /)
  50.   (dcl-MessageBox
  51.     "To Do: code must be added to event handler\r\nc:holes/Form2/IsSingleCirle#OnClicked"
  52.     "To do"
  53.   )
  54. )
  55. (defun c:holes/Form2/IsDoubleCirle#OnClicked (Value /)
  56.   (dcl-MessageBox
  57.     "To Do: code must be added to event handler\r\nc:holes/Form2/IsDoubleCirle#OnClicked"
  58.     "To do"
  59.   )
  60. )
  61. (defun c:holes/Form2/Draw#OnClicked (/)
  62.   (dcl-MessageBox
  63.     "To Do: code must be added to event handler\r\nc:holes/Form2/Draw#OnClicked"
  64.     "To do"
  65.   )
  66. )
  67. (defun c:holedraw (/ str)
  68.   (setq        str '("YWt6A0hPAAAdeIVCBuKT5SMSaitquYElpJMuyCYuet+kuyxeFheXabt5LT1baJd5I85kM85TEz9W"
  69.               "7qwsQGwGv/o65WZta93RWECG//ch70kDv5Z991FApglsOwZOuPYssUfFpecFGEXFFQnJxRsIzaOH"
  70.               "kcMNGZigjeUNmKKl9OfFTfYDNHCfRvAcdllvfg7Daladc1SkrvZ4St9vi6b4H4TQ2xSzpv9opBTc"
  71.               "k5OK0DtBE3GuxSgKdeuJrQldA0ne6wAR8mAU+CVi6OQiyONAs8oxQ6uU2UnJpjJbokhhX4SlDtJT"
  72.               "gBDuw5SXEVUoXbpZx3KC1PprPm8cUcDYIwozHWbbI9IBb/JreoZK0onrQNuKJ9sZ6oA7lzc90WO6"
  73.               "bc4FynCI5yrdZbmuP+G9ZtkxQatH8s0qsQQ5y4fErL/+15HWjK00JdSAS9LyiTDS5dIgar2PzFC2"
  74.               "lrWVeHPri1M08ozrCIcbqDV8zYUN/4vrI1CLwS6ENdtBKYRh5pMrZX0kipiewGnTkfOhHhPIpQbn"
  75.               "yDyiPCYaw8j2nAhk+wAyvHRnAytHiQarX8AxCpoItAZznHarQnbVOouP2RRyQCiEbdtBLISWEnm2"
  76.               "Oyc56mDjw6a+4UI+uSuHVTTB2KTBR6VhLwOp0FFjgMWkgUnqZAT9pIHoA0As4L649B67AQykqRNA"
  77.               "gxAlDVtVFvCJsZklBNNVtDhBLUgs2MrIpx045d8wOrZCXEqiPUrqORfF44DwvoS4QOnlAhBbCEWi"
  78.               "/q2Iqc4AJWMJ6yMgPyUo8dMFxoKjp9Dy4KlEJbGOj4jUwIYrpwfzIwDktcUSYxiD0hwX8azjNJEo"
  79.               "JA3LNyPh/c0Zbp3SNNr1zczgZl3jOrBmC5AfXBlgyC9x6RPebpPcM6c7ZufLdc/NUA3iDBdpDIOY"
  80.               "04sv0SUVXE2PEc23Ec1fQKRd3OGqknutH9Aw8xvDrHBYgZgAVsgTIbRL3Y0bDPvT6R5g8sjUjTa4"
  81.               "lh2UQmKyoPi3kneo8VU4FOug3PCB46xw2EnNINFmpRTpgQsff+ah37BJM6GenEtn4bXNspn+FIHs"
  82.               "rAM0cVfThwAxl+kMYhhz5bl1D5P5OxELo3GIroMePv4XN7l5oS7CNcf9iVjGncuQ4EUZaLJRRWbR"
  83.               "/kmtIb0ahD3mMiD8SQ2FHkyp8KKEp04iAKiJ76Q5zCsp9KDc51aR3i7a43zvd1z9fe3jmlO5GlUj"
  84.               "PFBVFTGMOo0dWqbpdXzsO9ypH2yOeDJ84Ll8Qv8+G21I1AA3/e4oxnbXj/Q6mUj2+o8Wh1waG+OW"
  85.               "utI6WuRit1NVhY36ax/dOc/NKetpTlUTNuHrungPMc68BdFrk7QFUvFBrjjFGi5E2+PIMRwCQIfx"
  86.               "MMaWjo1hDu2odu3KX5pIUDXugabmNIBd78eGB+5qJprdQ1qk63knmJKqdkPIia0IDOHrv/L2LpUZ"
  87.               "OtxE+Wfv0qJ7gvI2nxs6qPaItPZKGUxdrHXp6SBskoWd05fXPLb3Ivs3i3lO1+L+SQtTTtdlPhAD"
  88.               "0Zrhg+L2ycGarKvcw9YWtFprHGn09PANv6BtPfs+O2cyVOB15ioScgYtX4l6eWvFni3vCSqOr2Bq"
  89.               "k+AznQ6CasSWiEmUsdi7pOM5kqZ47dkOXs3P3ZoYaK8S5OLxYUWYSAiaqCj34AUbNVEHtf3KQz9x"
  90.               "lY22kraGUPyy8NJ4Cg4D8wtk5+NVjpgskPlwUHFfyQCKgdASD+T34a83TzwDPsop+qTmt3YLQSJy"
  91.               "aJPwIkLOZpyt6FqPlzwZMr2Ona3qnK2FO8WdrQqCLnidLY8lAAJkq0fyMc2ceYOGys6cLVhEdMQV"
  92.               "yKCct6cQdDz4TjC/tucSsa8J4uXgtPlHhNkeDCXbgp5TBg3rkQ2Kd4xGnxoNijBNxlkYmKc+KfYI"
  93.               "Dy9kI569x2LHihItb5KzeVSGYZ3iKpIpKqpa93B17vTUmtXCnDgOMU6/BSm6RDXRkvRB2jiWWL+B"
  94.               "TU7g98tUTGWSGUrsGEqat7C/6NJHIKby+JnU0cfzu7EV2rafA9wjYlD1CZOtqvN5A3hjMR1/GgvD"
  95.               "JmBMJuN0/djfhoLbvmFhE8cWKXDbSkOQTOY7bzBpH2hboSn2G/sFAfsmHxsvxgjHFtHn+PgysEq2"
  96.               "ZFStUWmBCoC+toqqqzuPAQ2Mwpa/Y1nP46LD9KKEJQFLMvTgTFqkm1fp2IHalgW12qDMc7aVR/kC"
  97.               "jeiA4r18B7WL3MPCm8gyBLUPxsObmqpxUWr0ySJ07ZXA/reb2P5JCcJyvLejO4agTKHCW8GAfbY0" "rAg=")
  98.   )
  99.   (dcl-project-import str)
  100.   (dcl-form-show holes/form2)
  101.   (princ)
  102. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-4 19:18:09 | 显示全部楼层
本帖最后由 pezyl 于 2017-6-5 06:49 编辑

谢谢您的热心。不过这个对话框文件怎么用我不知道,简单试了上面的代码,没达到我要的效果。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-7 16:50:05 | 显示全部楼层

请问您上面的程序和下面的界面怎么结合起来用啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-8 19:23:35 | 显示全部楼层
本帖最后由 newer 于 2017-6-15 12:21 编辑

试试

等分圆孔-距离.gif

下面代码在 XDRX API 2017.0608+版本执行

  1. (defun c:tt (/ e epa g i key len origin p pa pts pts1 spa ss v1 val x xAxis)
  2.   (defun _init ()
  3.     (if (not #xd_var_bukong_fs)
  4.       (setq #xd_var_bukong_fs "0")
  5.     )
  6.     (if (not #xd_var_bukong_yuankong)
  7.       (setq #xd_var_bukong_yuankong "0")
  8.     )
  9.     (if (not #xd_var_bukong_start)
  10.       (setq #xd_var_bukong_start 50)
  11.     )
  12.     (if (not #xd_var_bukong_end)
  13.       (setq #xd_var_bukong_end 50)
  14.     )
  15.     (if (not #xd_var_bukong_radius)
  16.       (setq #xd_var_bukong_radius 10)
  17.     )
  18.     (if (not #xd_var_bukong_konggap)
  19.       (setq #xd_var_bukong_konggap 50)
  20.     )
  21.     (if (not #xd_var_bukong_offset)
  22.       (setq #xd_var_bukong_offset 30)
  23.     )
  24.     (if (not #xd_var_bukong_divide)
  25.       (setq #xd_var_bukong_divide 3)
  26.     )
  27.     (if (not #xd_var_bukong_dist)
  28.       (setq #xd_var_bukong_dist 500)
  29.     )
  30.   )
  31.   (defun _keyword (key)
  32.     (cond
  33.       ((= key "B")
  34.         (if (= #xd_var_bukong_fs "0")
  35.           (if (setq val (getreal (xdrx_prompt "\n圆孔距离<"
  36.                                               #xd_var_bukong_dist ">:" t
  37.                                  )
  38.                         )
  39.               )
  40.             (setq #xd_var_bukong_dist val)
  41.           )
  42.           (if (setq val (getint (xdrx_prompt "\n等分数<"
  43.                                              #xd_var_bukong_divide ">:" t
  44.                                 )
  45.                         )
  46.               )
  47.             (setq #xd_var_bukong_divide val)
  48.           )
  49.         )
  50.       )
  51.       ((= key "Y")
  52.         (xdrx_initget "0 1")
  53.         (if (setq val (getkword (xdrx_prompt "\n圆孔样式[单圆(0)/双圆(1)]<"
  54.                                              (if (= #xd_var_bukong_yuankong
  55.                                                     "0"
  56.                                                  )
  57.                                                "0"
  58.                                                "1"
  59.                                              ) ">:" t
  60.                                 )
  61.                       )
  62.             )
  63.           (setq #xd_var_bukong_yuankong val)
  64.         )
  65.       )
  66.       ((= key "S")
  67.         (if (setq val (getreal (xdrx_prompt "\n起点距离<"
  68.                                             #xd_var_bukong_start ">:" t
  69.                                )
  70.                       )
  71.             )
  72.           (setq #xd_var_bukong_start val)
  73.         )
  74.       )
  75.       ((= key "E")
  76.         (if (setq val (getreal (xdrx_prompt "\n端点距离<" #xd_var_bukong_end
  77.                                             ">:" t
  78.                                )
  79.                       )
  80.             )
  81.           (setq #xd_var_bukong_end val)
  82.         )
  83.       )
  84.       ((= key "D")
  85.         (if (= #xd_var_bukong_yuankong "1")
  86.           (progn
  87.             (if (setq val (getreal (xdrx_prompt "\n双孔间距<"
  88.                                                 #xd_var_bukong_konggap ">:"
  89.                                                 t
  90.                                    )
  91.                           )
  92.                 )
  93.               (setq #xd_var_bukong_konggap val)
  94.             )
  95.           )
  96.           (princ "\n当前样式是单圆,不能设置孔距.")
  97.         )
  98.       )
  99.       ((= key "H")
  100.         (if (setq val (getreal (xdrx_prompt "\n圆偏移线距离<"
  101.                                             #xd_var_bukong_offset ">:" t
  102.                                )
  103.                       )
  104.             )
  105.           (setq #xd_var_bukong_offset val)
  106.         )
  107.       )
  108.       ((= key "O")
  109.         (if (setq val (getreal (xdrx_prompt "\n孔径<" #xd_var_bukong_radius
  110.                                             ">:" t
  111.                                )
  112.                       )
  113.             )
  114.           (setq #xd_var_bukong_radius val)
  115.         )
  116.       )
  117.     )
  118.     (_prompt)
  119.   )
  120.   (defun _prompt ()
  121.     (xdrx_initget "B Y S E O D H")
  122.     (xdrx_prompt "\n当前设置: *分布-按" (if (= #xd_var_bukong_fs "0")
  123.                                           (xdrx_prompt "距离*[/圆孔距离("
  124.                                                        #xd_var_bukong_dist
  125.                                                        ")" t
  126.                                           )
  127.                                           (xdrx_prompt "等分*[等分数(" #xd_var_bukong_divide
  128.                                                        ")" t
  129.                                           )
  130.                                         ) "/圆孔样式[" (if (= #xd_var_bukong_yuankong
  131.                                                               "0"
  132.                                                            )
  133.                                                          "单圆"
  134.                                                          "双圆"
  135.                                                        ) ")/起点距离("
  136.                  #xd_var_bukong_start ")/终点距离(" #xd_var_bukong_end
  137.                  ")/偏移距离(" #xd_var_bukong_offset ")/孔径("
  138.                  #xd_var_bukong_radius ")]"
  139.     )
  140.   )
  141.   (defun _initget ()
  142.     (if (= #xd_var_bukong_fs "0")
  143.       (xdrx_initssget "\n拾取直线[距离(B)/圆孔(Y)/起点(S)/终点(E)/孔径(O)/孔距(D)/偏移(H)]<退出>:"
  144.                       "B Y S E O D H" "" "_keyword"
  145.       )
  146.       (xdrx_initssget "\n拾取直线[等分数(B)/圆孔(Y)/起点(S)/终点(E)/孔径(O)/孔距(D)/偏移(H)]<退出>:"
  147.                       "B Y S E O D H" "" "_keyword"
  148.       )
  149.     )
  150.   )
  151.   (defun _getpts (/ i pa p pts)
  152.     (setq i 0)
  153.     (xdge::entity:make g)
  154.     (while (setq p (xdrx_curve_getpointatdist (entlast) (* i #xd_var_bukong_dist)))
  155.       (setq pts (cons p pts)
  156.             i (1+ i)
  157.       )
  158.     )
  159.     (setq pts (cons (xdrx_curve_getendpoint (entlast)) pts))
  160.     (xdrx_entity_delete (entlast))
  161.     (reverse pts)
  162.   )
  163.   (defun _getpoints ()
  164.     (setq g (xdge::constructor e)
  165.           len (xdge::getpropertyvalue g "length")
  166.           spa (xdge::getpropertyvalue g "paramof"
  167.                                       (xdrx_curve_getpointatdist e #xd_var_bukong_start)
  168.               )
  169.           epa (xdge::getpropertyvalue g "paramof"
  170.                                       (xdrx_curve_getpointatdist e
  171.                                                                  (- len #xd_var_bukong_end)
  172.                                       )
  173.               )
  174.     )
  175.     (xdge::setpropertyvalue g "setinterval" spa epa)
  176.     (if (= #xd_var_bukong_fs "0")
  177.       (progn
  178.         (setq pts (_getpts))
  179.       )
  180.       (progn
  181.         (setq pts (xdge::getpropertyvalue g "getsamplepoints" (1+ #xd_var_bukong_divide)))
  182.       )
  183.     )
  184.     (xdge::free g)
  185.     pts
  186.   )
  187.   (defun _drawcircle (pts)
  188.     (setq origin (car pts)
  189.           xAxis (xdrx_vector_normalize (mapcar
  190.                                          '-
  191.                                          (cadr pts)
  192.                                          (car pts)
  193.                                        )
  194.                 )
  195.     )
  196.     (setq pts (xdrx_points_offset #xd_var_bukong_offset pts))
  197.     (if (= #xd_var_bukong_yuankong "1")
  198.       (progn
  199.         (setq v1 (xdrx_vector_product xAxis (/ #xd_var_bukong_konggap 2.0)))
  200.         (setq pts (apply
  201.                     'append
  202.                     (mapcar
  203.                       '(lambda (x)
  204.                          (list (mapcar
  205.                                  '+
  206.                                  x
  207.                                  v1
  208.                                ) (mapcar
  209.                                    '-
  210.                                    x
  211.                                    v1
  212.                                  )
  213.                          )
  214.                        )
  215.                       pts
  216.                     )
  217.                   )
  218.         )
  219.       )
  220.     )
  221.     (xdrx_setmark)
  222.     (mapcar
  223.       '(lambda (x)
  224.          (xdrx_circle_make x #xd_var_bukong_radius)
  225.        )
  226.       pts
  227.     )
  228.     (setq ss (xdrx_getss))
  229.     (XD::Drag:MirrorByQuadrant "\n移动鼠标确定方向:" ss origin 2 xAxis ""
  230.                                0.1
  231.     )
  232.   )
  233.   (xdrx_begin)
  234.   (_init)  (xdrx_initget "0 1")
  235.   (if (setq val (getkword (xdrx_prompt "\n输入分布方式[距离(0)/等分(1)]<"
  236.                                        #xd_var_bukong_fs ">:" t
  237.                           )
  238.                 )
  239.       )
  240.     (setq #xd_var_bukong_fs val)
  241.   )
  242.   (_prompt)
  243.   (_initget)
  244.   (xdrx_initget "B Y S E O D H")
  245.   (if (and
  246.         (setq ss (xdrx_ssget ":E:P" '((0 . "LINE"))))
  247.         (setq e (ssname ss 0))
  248.       )
  249.     (progn
  250.       (setq pts (_getpoints))
  251.       (setq pts1 (_drawcircle pts))
  252.     )
  253.   )
  254.   (xdrx_end)
  255.   (princ)
  256. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 09:06:03 | 显示全部楼层

谢谢N版,按您的代码进行到   “拾取直线”  之后没有 “移动鼠标确定方向”的操作提示,但你的GIF演示有。已经装好XDRX API 0608。另外程序能适用各种多段线弧线样条曲线吗?通用性会更好

1.gif






论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-9 09:36:53 | 显示全部楼层
本帖最后由 newer 于 2017-6-9 09:39 编辑

下载最新的XDRX API 2017.0608版本。
你画的直线,确定能被设置的那些长度分割? 别是直线太小了

你想适用其他的曲线,把代码里面的 '((0 . "LINE")) 改成 '((0 . "*LINE,ARC"))就行了。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-9 12:26:59 | 显示全部楼层

你安装了晓东工具箱了吧? 旧版的工具箱有个函数和函数库冲突了,你下载下附件,解压缩,拷贝到工具箱的LISP目录覆盖,在重启CAD

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:xdtb_main.rar 
下载次数:5  文件大小:600.38 KB 
下载权限: 不限 以上  [免费赚D豆]


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 14:12:50 | 显示全部楼层

确定尺寸足够分格
我一开始没有装晓东工具箱,只装了XDRX API 2017.0608后来我看用不了,又试着装上了晓东工具箱,不过也是一样的问题,把xdtb_main替换掉也没用。



1.gif


顺便反馈个bug,AutoCAD  2008只装XDRX API会出现了右侧的屏幕菜单,选项里关了之后再新建还是会自动出现,关不掉。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-9 15:37:34 | 显示全部楼层

布孔.gif


在2007,2008都试了,没问题。

API和通用函数库是昨天更新的,2017.06.08, 你是刚下载的吗?

你执行完,ZOOM E下,看看圆是不是画别的地方了? 不应该。

你执行下下面代码,看是否在屏幕选点处画了个十字虚线?

  1. (defun c:tt1 ()
  2.     (if (setq p (getpoint "\n拾取点<退出>:"))
  3.         (xd::doc:drawcrosshair (trans p 1 0) 0.0 0.1)
  4.     )
  5.     (princ)
  6. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 15:49:09 | 显示全部楼层

是新下载的,6.8号的,而且在同事电脑上的2014也是一样的情况,拾取直线后没有后续操作了

ZOOM E后没有画圆。

执行代码后点选处画有十字虚线。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-9 21:15:39 | 显示全部楼层
本帖最后由 newer 于 2017-6-9 21:16 编辑

在2010,2016的机器也试了,没问题,

我把代码重新编辑贴了下,你重新拷贝下8楼的代码回去加载,如果还执行不了,就是你那的事了。

布孔-2.gif

布孔-2016.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-18 20:29 , Processed in 0.270734 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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