找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: pezyl

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

[复制链接]

已领礼包: 41个

财富等级: 招财进宝

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

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-15 12:21:54 | 显示全部楼层

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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-15 12:46:04 | 显示全部楼层
本帖最后由 pezyl 于 2017-6-15 13:37 编辑

好了好了,谢谢N版耐心帮忙,谢谢,来天津的话请您喝酒吃饭,嘿嘿。
1、尽可能多的支持各种曲线要怎么改?
2、代码拾取到曲线后不需要空格或者回车确认了,选中某一个图元即为确认,操作完一条曲线程序还可以接着点选操作
3、进行到选方向这一步,按ESC取消不了,直接也画出了孔
4、现在的起点终点是由线属性决定的,能不能鼠标点选时靠哪个端点近就把此端点当作曲线的起点

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-15 13:58:43 | 显示全部楼层
本帖最后由 newer 于 2017-6-15 14:00 编辑

能用就好,

你都要适合什么曲线?  对于不是直线的,你鼠标确定镜像方向会有困惑,可能就不能通过鼠标来确定方向了。

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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-15 14:51:32 | 显示全部楼层
本帖最后由 pezyl 于 2017-6-15 14:53 编辑

QQ截图20170615144553.jpg

1、直线,多段线,弧线,样条曲线
2、绿色孔和洋红色孔就是方向选择不一样的区别,不是镜像,而是偏移在曲线的哪一侧
3、选择曲线时,点选位置离曲线两个端点哪个近就当作曲线起点开始排孔
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-15 15:13:07 | 显示全部楼层

下面图片的箭头位置的地方,上下不对了吧,两边的连线应该垂直于曲线吧

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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-15 15:23:13 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-15 17:36:43 | 显示全部楼层
本帖最后由 newer 于 2017-6-15 21:06 编辑

重写了,拷贝下面回去试试

1、支持LINE,ARC,LWPOLYLINE,CIRCLE,SPLINE,ELLIPSE
2、支持取消3、拾取点靠近哪边,从哪边开始
4、支持选中实体后不用回车

如果成了,麻烦做下各种曲线的不同条件的动画贴上来。

  1. (defun c:tt (/ dist e epa ept g i info key len msg my_err p pa pt pts pts2
  2.                pts3 spa spt ss temp test tf v1 v2 val x y
  3.             )
  4.   (defun _init ()
  5.     (if (not #xd_var_bukong_fs)
  6.       (setq #xd_var_bukong_fs "0")
  7.     )
  8.     (if (not #xd_var_bukong_yuankong)
  9.       (setq #xd_var_bukong_yuankong "0")
  10.     )
  11.     (if (not #xd_var_bukong_start)
  12.       (setq #xd_var_bukong_start 50)
  13.     )
  14.     (if (not #xd_var_bukong_end)
  15.       (setq #xd_var_bukong_end 50)
  16.     )
  17.     (if (not #xd_var_bukong_radius)
  18.       (setq #xd_var_bukong_radius 10)
  19.     )
  20.     (if (not #xd_var_bukong_konggap)
  21.       (setq #xd_var_bukong_konggap 50)
  22.     )
  23.     (if (not #xd_var_bukong_offset)
  24.       (setq #xd_var_bukong_offset 30)
  25.     )
  26.     (if (not #xd_var_bukong_divide)
  27.       (setq #xd_var_bukong_divide 3)
  28.     )
  29.     (if (not #xd_var_bukong_dist)
  30.       (setq #xd_var_bukong_dist 500)
  31.     )
  32.   )
  33.   (defun _keyword (key)
  34.     (cond
  35.       ((= key "B")
  36.         (if (= #xd_var_bukong_fs "0")
  37.           (if (setq val (getreal (xdrx_prompt "\n圆孔距离<"
  38.                                               #xd_var_bukong_dist ">:" t
  39.                                  )
  40.                         )
  41.               )
  42.             (setq #xd_var_bukong_dist val)
  43.           )
  44.           (if (setq val (getint (xdrx_prompt "\n等分数<"
  45.                                              #xd_var_bukong_divide ">:" t
  46.                                 )
  47.                         )
  48.               )
  49.             (setq #xd_var_bukong_divide val)
  50.           )
  51.         )
  52.       )
  53.       ((= key "Y")
  54.         (xdrx_initget "0 1")
  55.         (if (setq val (getkword (xdrx_prompt "\n圆孔样式[单圆(0)/双圆(1)]<"
  56.                                              (if (= #xd_var_bukong_yuankong
  57.                                                     "0"
  58.                                                  )
  59.                                                "0"
  60.                                                "1"
  61.                                              ) ">:" t
  62.                                 )
  63.                       )
  64.             )
  65.           (setq #xd_var_bukong_yuankong val)
  66.         )
  67.       )
  68.       ((= key "S")
  69.         (if (setq val (getreal (xdrx_prompt "\n起点距离<"
  70.                                             #xd_var_bukong_start ">:" t
  71.                                )
  72.                       )
  73.             )
  74.           (setq #xd_var_bukong_start val)
  75.         )
  76.       )
  77.       ((= key "E")
  78.         (if (setq val (getreal (xdrx_prompt "\n端点距离<" #xd_var_bukong_end
  79.                                             ">:" t
  80.                                )
  81.                       )
  82.             )
  83.           (setq #xd_var_bukong_end val)
  84.         )
  85.       )
  86.       ((= key "D")
  87.         (if (= #xd_var_bukong_yuankong "1")
  88.           (progn
  89.             (if (setq val (getreal (xdrx_prompt "\n双孔间距<"
  90.                                                 #xd_var_bukong_konggap ">:"
  91.                                                 t
  92.                                    )
  93.                           )
  94.                 )
  95.               (setq #xd_var_bukong_konggap val)
  96.             )
  97.           )
  98.           (princ "\n当前样式是单圆,不能设置孔距.")
  99.         )
  100.       )
  101.       ((= key "H")
  102.         (if (setq val (getreal (xdrx_prompt "\n圆偏移线距离<"
  103.                                             #xd_var_bukong_offset ">:" t
  104.                                )
  105.                       )
  106.             )
  107.           (setq #xd_var_bukong_offset val)
  108.         )
  109.       )
  110.       ((= key "O")
  111.         (if (setq val (getreal (xdrx_prompt "\n孔径<" #xd_var_bukong_radius
  112.                                             ">:" t
  113.                                )
  114.                       )
  115.             )
  116.           (setq #xd_var_bukong_radius val)
  117.         )
  118.       )
  119.     )
  120.     (_prompt)
  121.   )
  122.   (defun _prompt ()
  123.     (xdrx_initget "B Y S E O D H")
  124.     (xdrx_prompt "\n当前设置: *分布-按" (if (= #xd_var_bukong_fs "0")
  125.                                           (xdrx_prompt "距离*[/圆孔距离("
  126.                                                        #xd_var_bukong_dist
  127.                                                        ")" t
  128.                                           )
  129.                                           (xdrx_prompt "等分*[等分数(" #xd_var_bukong_divide
  130.                                                        ")" t
  131.                                           )
  132.                                         ) "/圆孔样式[" (if (= #xd_var_bukong_yuankong
  133.                                                               "0"
  134.                                                            )
  135.                                                          "单圆"
  136.                                                          "双圆"
  137.                                                        ) ")/起点距离("
  138.                  #xd_var_bukong_start ")/终点距离(" #xd_var_bukong_end
  139.                  ")/偏移距离(" #xd_var_bukong_offset ")/孔径("
  140.                  #xd_var_bukong_radius ")]"
  141.     )
  142.   )
  143.   (defun _initget ()
  144.     (if (= #xd_var_bukong_fs "0")
  145.       (setq info "\n拾取直线[距离(B)/圆孔(Y)/起点(S)/终点(E)/孔径(O)/孔距(D)/偏移(H)]<退出>:")
  146.       (setq info "\n拾取直线[等分数(B)/圆孔(Y)/起点(S)/终点(E)/孔径(O)/孔距(D)/偏移(H)]<退出>:")
  147.     )
  148.     (xdrx_initget "B Y S E O D H")
  149.     (setq tf t)
  150.     (while (and
  151.              tf
  152.              (setq e (xdrx_entsel info '((0 . "LINE,LWPOLYLINE,ARC,SPLINE,CIRCLE,ELLIPSE"))))
  153.            )
  154.       (cond
  155.         ((= (type e) 'STR)
  156.           (_keyword e)
  157.         )
  158.         ((= (type e) 'LIST)
  159.           (setq tf nil)
  160.         )
  161.       )
  162.     )
  163.     e
  164.   )
  165.   (defun _getpts (/ i pa p pts)
  166.     (setq i 0)
  167.     (xdge::entity:make g)
  168.     (while (setq p (xdrx_curve_getpointatdist (entlast) (* i #xd_var_bukong_dist)))
  169.       (setq pts (cons p pts)
  170.             i (1+ i)
  171.       )
  172.     )
  173.     (setq pts (cons (xdrx_curve_getendpoint (entlast)) pts))
  174.     (xdrx_entity_delete (entlast))
  175.     (reverse pts)
  176.   )
  177.   (defun _getpoints ()
  178.     (setq g (xdge::constructor e)
  179.           len (xdge::getpropertyvalue g "length")
  180.           test (xdge::getpropertyvalue g "paramof" pt)
  181.           spa (xdge::getpropertyvalue g "paramof" (setq spt
  182.                                                         (xdrx_curve_getpointatdist e #xd_var_bukong_start)
  183.                                                   )
  184.               )
  185.           epa (xdge::getpropertyvalue g "paramof" (setq ept
  186.                                                         (xdrx_curve_getpointatdist e
  187.                                                                                    (- len #xd_var_bukong_end)
  188.                                                         )
  189.                                                   )
  190.               )
  191.     )
  192.     (if (> (xdrx_curve_getdistatpoint e pt) (/ len 2.0))
  193.       (progn
  194.         (setq temp spa
  195.               spa epa
  196.               epa temp
  197.         )
  198.         (xdge::setpropertyvalue g "reverseparam")
  199.       )
  200.     )
  201.     (xdge::setpropertyvalue g "setinterval" spa epa)
  202.     (if (= #xd_var_bukong_fs "0")
  203.       (progn
  204.         (setq pts (_getpts))
  205.       )
  206.       (progn
  207.         (setq pts (xdge::getpropertyvalue g "getsamplepoints" (1+ #xd_var_bukong_divide)))
  208.       )
  209.     )
  210.     (xdge::free g)
  211.     pts
  212.   )
  213.   (defun _drawcircle (pts /)
  214.     (defun _drawcircle1 ()
  215.       (xdrx_setmark)
  216.       (mapcar
  217.         '(lambda (x)
  218.            (setq v1 (xdrx_curve_getfirstderiv e x)
  219.                  v2 (xdrx_vector_perpvector v1)
  220.                  dist (xdrx_curve_getdistatpoint e x)
  221.            )
  222.            (if (= #xd_var_bukong_yuankong "1")
  223.              (progn
  224.                (setq pts2 (list (xdrx_curve_getpointatdist e (- dist
  225.                                                                 (/ #xd_var_bukong_konggap
  226.                                                                    2.0
  227.                                                                 )
  228.                                                              )
  229.                                 ) (xdrx_curve_getpointatdist e (+ dist
  230.                                                                   (/ #xd_var_bukong_konggap
  231.                                                                      2.0
  232.                                                                   )
  233.                                                                )
  234.                                   )
  235.                           )
  236.                )
  237.              )
  238.              (progn
  239.                (setq pts2 (list x))
  240.              )
  241.            )
  242.            (mapcar
  243.              '(lambda (y)
  244.                 (xdrx_circle_make (mapcar
  245.                                     '+
  246.                                     y
  247.                                     (xdrx_vector_product v2 (if (=
  248.                                                                    (rem i 2)
  249.                                                                    1
  250.                                                                 )
  251.                                                               (- #xd_var_bukong_offset)
  252.                                                               #xd_var_bukong_offset
  253.                                                             )
  254.                                     )
  255.                                   ) #xd_var_bukong_radius
  256.                 )
  257.               )
  258.              pts2
  259.            )
  260.            pts3
  261.          )
  262.         pts
  263.       )
  264.       (setq ss (xdrx_getss))
  265.     )
  266.     (setq i 0)
  267.     (setq ss (_drawcircle1))
  268.     (princ "\n")
  269.     (while (and
  270.              (xdrx_initget "F")
  271.              (setq tf (getkword "\r确定方向[翻转(F)]<结束>:"))
  272.            )
  273.       (cond
  274.         ((and
  275.            (= (type tf) 'STR)
  276.            (= tf "F")
  277.          )
  278.           (xdrx_entity_delete ss)
  279.           (setq i (1+ i))
  280.           (_drawcircle1)
  281.         )
  282.       )
  283.     )
  284.   )
  285.   (defun my_err (msg)
  286.     (princ (strcat "\nERROR:" msg))
  287.     (xdrx_entity_delete ss)
  288.     (setq *error* nil)
  289.     (xdrx_end)
  290.   )
  291.   (xdrx_begin)
  292.   (setq *error* my_err)
  293.   (xdrx_initget "0 1")
  294.   (_init)
  295.   (if (setq val (getkword (xdrx_prompt "\n输入分布方式[距离(0)/等分(1)]<"
  296.                                        #xd_var_bukong_fs ">:" t
  297.                           )
  298.                 )
  299.       )
  300.     (setq #xd_var_bukong_fs val)
  301.   )
  302.   (_prompt)
  303.   (if (setq e (_initget))
  304.     (progn
  305.       (setq pt (cadr e)
  306.             e (car e)
  307.       )
  308.       (setq pts (_getpoints))
  309.       (setq ss (_drawcircle pts))
  310.     )
  311.   )
  312.   (setq *error* nil)
  313.   (xdrx_end)
  314.   (princ)
  315. )


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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-15 19:51:26 | 显示全部楼层
本帖最后由 pezyl 于 2017-6-15 19:54 编辑

运行不起来,到了拾取直线的时候,点选任何曲线都提示:ERROR:参数类型错误: numberp: nil
好像是到这步停住了
  (defun my_err (msg)
    (princ (strcat "\nERROR:" msg))
    (xdrx_entity_delete ss)
    (setq *error* nil)
    (xdrx_end)
  )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-15 21:07:30 | 显示全部楼层

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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-16 08:55:22 | 显示全部楼层

完全可以正常使用了,十分十分感谢!演示如下: 1.gif

为了更便捷的使用,再厚颜求个改进
1、现在偏移方向的确定是按键[F]控制的,能不能改为拾取到曲线后,靠鼠标左键确认,左键点在曲线哪一侧孔就画在哪一侧;
2、求加上起点和终点尺寸标注,用当前标注样式就行。



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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-16 09:07:46 | 显示全部楼层

上面和你说了,如果你要支持任意曲线,那么是不好用鼠标确定位置的

下面图
QQ截图20170616090336.png

你没法通过鼠标告诉哪边是上面,哪边是下面, 除非只判断头两个点的连线,但这样,就要求你鼠标要在开始段的附近,用时候反而别扭了。

就输入F吧,平时左手放键盘上,食指就在上面,按着方便。

画尺寸的,对任意曲线的,弧线的,SPLINE的,圆的,你怎么标注?

你画个各种曲线的标注的图贴上来,一个曲线标注的截取一个大图,别像上面的图太小,看不清。

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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-16 09:10:16 | 显示全部楼层

借本帖请问N版,我要在二维平面得到矩形的长宽数据,(xdrx_getpropertyvalue x "boundingbox"),这句要怎么改啊?现在的是包围框的长宽,矩形成角度放的就跟实际长宽数据不一样了


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

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

 楼主| 发表于 2017-6-16 09:36:14 | 显示全部楼层

1、嗯,我考虑不周,您说的问题确实存在,习惯着用F了。
2、标注主要是直线,多线段和弧线和样条曲线,封闭曲线就不需要了。
1.jpg 2.jpg 3.jpg



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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-16 10:37:00 | 显示全部楼层

(xdrx_getpropertyvalue e "boundingbox") 如果不给参数,是包围盒的X方向平行于坐标系的X轴。你给个方向向量参数,就返回平行于矩形的包围了

矩形的第一点p1,第二点p2
xdir = p2 - p1

  1. (setq xdir (mapcar '- p2 1))


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 07:18 , Processed in 0.515541 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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