找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: grs432

[已解决] 块与块连线程序求助

[复制链接]
 楼主| 发表于 2014-11-25 14:25:56 | 显示全部楼层
st788796 发表于 2014-11-25 12:33
绘制过程有选取块功能,顶点数就是块数量,可以将块名记录到组内的,可以最后有个判断是否选择上了块而且 ...

对了,成组后,要向里面加入线的话,是不是也需要个程序!
减点的程序已在上边发了,测试过了,没有问题!{:soso_e113:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-25 14:34:39 来自手机 | 显示全部楼层
grs432 发表于 2014-11-25 14:25
对了,成组后,要向里面加入线的话,是不是也需要个程序!
减点的程序已在上边发了,测试过了,没有问题 ...

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-25 14:35:41 来自手机 | 显示全部楼层
grs432 发表于 2014-11-25 14:25
对了,成组后,要向里面加入线的话,是不是也需要个程序!
减点的程序已在上边发了,测试过了,没有问题 ...

加点可以和减点合成一个程序,实质多义线增删顶点,只不过增加一步计算特殊凸度

点评

挺期待您的程序的,想试试。导入EXCEL表格中应该不会很难吧!!!  详情 回复 发表于 2014-11-26 17:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-26 17:49:37 | 显示全部楼层
st788796 发表于 2014-11-25 14:35
加点可以和减点合成一个程序,实质多义线增删顶点,只不过增加一步计算特殊凸度

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-26 18:00:27 来自手机 | 显示全部楼层
grs432 发表于 2014-11-26 17:49
挺期待您的程序的,想试试。导入EXCEL表格中应该不会很难吧!!!

用XDGE解析库几句话而已,也有封装的lisp函数

点评

哦,我还是不太懂怎么用,只能期待您帮忙写的程序试试了!  详情 回复 发表于 2014-11-26 20:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-26 20:26:57 | 显示全部楼层
st788796 发表于 2014-11-26 18:00
用XDGE解析库几句话而已,也有封装的lisp函数


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-27 18:29:30 | 显示全部楼层
grs432 发表于 2014-11-26 20:26
哦,我还是不太懂怎么用,只能期待您帮忙写的程序试试了!

http://bbs.xdcad.net/thread-677386-1-1.html

试试这个绘制,如果运行正确给录个动画吧

点评

OK,程序试过了,以前我就了你演示的动画,我以为不太合适,但是一试才发现不一样了,现在但是还是没有取块名到组内的。。能在最后加入命令取一下回路线上的块吗?[attachimg]11649[/attachimg] 如果能将上图中的块  详情 回复 发表于 2014-11-27 23:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-27 23:33:12 | 显示全部楼层
本帖最后由 grs432 于 2014-11-27 23:37 编辑
st788796 发表于 2014-11-27 18:29
http://bbs.xdcad.net/thread-677386-1-1.html

试试这个绘制,如果运行正确给录个动画吧

OK,程序试过了,以前我就了你演示的动画,我以为不太合适,但是一试才发现不一样了,现在但是还是没有取块名到组内的。。能在最后加入命令取一下回路线上的块吗? 4444.gif
如果能将上图中的块名加入到组中就好了。
还有就是差增加回路的方式,开组---点以前线自动连续加线---关组。
下面我附了1个图  

副本.rar

297.99 KB, 下载次数: 6, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-28 14:22:31 | 显示全部楼层
grs432 发表于 2014-11-27 23:33
OK,程序试过了,以前我就了你演示的动画,我以为不太合适,但是一试才发现不一样了,现在但是还是没有取 ...

增删顶点
  1. (defun c:tt (/ _removevertexat _addvertexat e tf p key pr)
  2.   (defun _removevertexat (e p / n bulge p p1 p2 d)
  3.     (setq n (fix (xdrx_curve_getparamatpoint e p)))
  4.     (cond
  5.       ((zerop n)
  6.        (xdrx_polyline_removevertexat e 0)
  7.       )
  8.       ((= n (1- (xdrx_polyline_numverts e)))
  9.        (xdrx_polyline_removevertexat e (1- n))
  10.       )
  11.       (t
  12.        (setq bulge (xdrx_polyline_getbulgeat e n)
  13.              p           (xdrx_curve_getpointatparam e (+ n 0.5))
  14.              p1           (xdrx_polyline_getpointat e (1- n))
  15.              p2           (xdrx_polyline_getpointat e (1+ n))
  16.              d           (distance
  17.                      p
  18.                      (xdrx_line_midp
  19.                        (xdrx_polyline_getpointat e n)
  20.                        p2
  21.                      )
  22.                    )
  23.        )
  24.        (xdrx_polyline_removevertexat e n)
  25.        (xdrx_polyline_setbulgeat
  26.          e
  27.          (1- n)
  28.          (if (minusp bulge)
  29.            (- (/ (* 2.0 d) (distance p1 p2)))
  30.            (/ (* 2.0 d) (distance p1 p2))
  31.          )
  32.        )
  33.       )
  34.     )
  35.   )
  36.   (defun _addvertexat (e p / n p1 p2 pm d bulge p0)
  37.     (setq p0 (xdrx_curve_getclosestpoint e p)
  38.           n  (fix (xdrx_curve_getparamatpoint e p0))
  39.     )
  40.     (cond
  41.       ((zerop n)
  42.        (setq p1           (xdrx_curve_getstartpoint e)
  43.              p2           (xdrx_curve_getpointatparam e 1.0)
  44.              pm           (xdrx_curve_getpointatparam e 0.5)
  45.              d           (distance pm (xdrx_line_midp p1 p2))
  46.              bulge (xdrx_polyline_getbulgeat e 0)
  47.        )
  48.        (xdrx_polyline_setpointat e 0 p)
  49.        (xdrx_polyline_addvertexat e 0 p1)
  50.        (xdrx_polyline_setbulgeat
  51.          e
  52.          0
  53.          (if (minusp bulge)
  54.            (- (/ (* 2.0 d) (distance p p1)))
  55.            (/ (* 2.0 d) (distance p p1))
  56.          )
  57.        )
  58.        (xdrx_polyline_setbulgeat
  59.          e
  60.          1
  61.          (if (minusp bulge)
  62.            (- (/ (* 2.0 d) (distance p p2)))
  63.            (/ (* 2.0 d) (distance p p2))
  64.          )
  65.        )
  66.       )
  67.       ((= n (1- (xdrx_polyline_numverts e)))
  68.        (setq p1           (xdrx_curve_getendpoint e)
  69.              p2           (xdrx_curve_getpointatparam e (1- n))
  70.              pm           (xdrx_curve_getpointatparam e (- n 0.5))
  71.              d           (distance pm (xdrx_line_midp p1 p2))
  72.              bulge (xdrx_polyline_getbulgeat e 0)
  73.        )
  74.        (xdrx_polyline_setpointat e (1- n) p)
  75.        (xdrx_polyline_addvertexat e (- n 2) p1)
  76.        (xdrx_polyline_setbulgeat
  77.          e
  78.          (1- n)
  79.          (if (minusp bulge)
  80.            (- (/ (* 2.0 d) (distance p p1)))
  81.            (/ (* 2.0 d) (distance p p1))
  82.          )
  83.        )
  84.        (xdrx_polyline_setbulgeat
  85.          e
  86.          n
  87.          (if (minusp bulge)
  88.            (- (/ (* 2.0 d) (distance p p2)))
  89.            (/ (* 2.0 d) (distance p p2))
  90.          )
  91.        )
  92.       )
  93.       (t
  94.        (setq p1           (xdrx_polyline_getpointat e n)
  95.              p2           (xdrx_polyline_getpointat e (1+ n))
  96.              pm           (xdrx_curve_getpointatparam e (+ n 0.5))
  97.              d           (distance pm (xdrx_line_midp p1 p2))
  98.              bulge (xdrx_polyline_getbulgeat e n)
  99.        )
  100.        (xdrx_polyline_addvertexat e (1+ n) p)
  101.        (xdrx_polyline_setbulgeat
  102.          e
  103.          n
  104.          (if (minusp bulge)
  105.            (- (/ (* 2.0 d) (distance p p1)))
  106.            (/ (* 2.0 d) (distance p p1))
  107.          )
  108.        )
  109.        (xdrx_polyline_setbulgeat
  110.          e
  111.          (1+ n)
  112.          (if (minusp bulge)
  113.            (- (/ (* 2.0 d) (distance p p2)))
  114.            (/ (* 2.0 d) (distance p p2))
  115.          )
  116.        )
  117.       )
  118.     )
  119.   )
  120.   ;;main program
  121.   (if (setq e (car (xdrx_entsel "\n选择回路线: " '((0 . "lwpolyline")))))
  122.     (progn
  123.       (setq tf        t
  124.             key        "D"
  125.             pr        "\r"
  126.       )
  127.       (while tf
  128.         (initget 128 "A D")
  129.         (setq p
  130.                (getpoint (strcat pr "拾取点[删点(D)/增点(A)]<" key ">: "))
  131.         )
  132.         (cond
  133.           ((and (not (null p)) (listp p))
  134.            (if (= key "D")
  135.              (_removevertexat e p)
  136.              (_addvertexat e p)
  137.            )
  138.            (setq pr "\r")
  139.           )
  140.           ((= p "A") (setq key "A") (setq pr "\n"))
  141.           ((= p "D") (setq key "D") (setq pr "\n"))
  142.           (t (setq tf nil))
  143.         )
  144.       )
  145.     )
  146.   )
  147.   (princ)
  148. )

点评

[attachimg]11668[/attachimg] 现在测试增加和减少点上,在多段线中间加点和减点没有问题,不足之处是弧度与原来有不同,影响美观。 在头与尾部增加回路时会出问题,如上边动画所示。  详情 回复 发表于 2014-11-28 15:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-28 14:42:51 | 显示全部楼层
grs432 发表于 2014-11-27 23:33
OK,程序试过了,以前我就了你演示的动画,我以为不太合适,但是一试才发现不一样了,现在但是还是没有取 ...

http://bbs.xdcad.net/thread-677386-1-1.html

更新,将块名记录在 文字的扩展记录中

点评

有时候论坛上的程序会出现“错误: ADS 请求错误” 程序不执行,把CAD关了,重新打开再执行命令会好。。这是为什么??  详情 回复 发表于 2014-11-28 17:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-28 14:52:36 | 显示全部楼层
处理旧图,Pline 顶点数为经过的 图块数量(组内仅有文字和一条 Pline 时,数量为 顶点数 - 1,如果组内有文字和两条 pline 时,数量为第一个pline 线顶点数 -1)
  1. (defun c:tt (/ pl txt blk)
  2.   (if
  3.     (and (setq pl
  4.                 (car (xdrx_entsel "\n拾取回路Pline: " '((0 . "LWPOLYLINE")))
  5.                 )
  6.          )
  7.          (setq txt (car (xdrx_entsel "\n拾取回路编号: " '((0 . "*TEXT")))))
  8.          (setq blk (car (xdrx_entsel "\n拾取图块: " '((0 . "INSERT")))))
  9.     )
  10.      (progn
  11.        (xdrx_group_make "*" pl txt)
  12.        (xdrx_xdata_setbyproperty
  13.          txt
  14.          "XDCircuit"
  15.          "String"
  16.          (car (xdrx_getpropertyvalue blk "BlockTableRecord"))
  17.        )
  18.      )
  19.   )
  20.   (princ)
  21. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-28 15:12:12 | 显示全部楼层
配合上面程序的统计
  1. (defun c:tt (/ ss nl)
  2.   (if (setq ss (ssget '((0 . "text") (-3 ("XDCircuit")))))
  3.     (progn
  4.       (setq nl
  5.              (mapcar
  6.                '(lambda        (x / lst ll n)
  7.                   (if (setq lst        (vl-remove-if
  8.                                   '(lambda (a)
  9.                                      (/= (xdrx_getpropertyvalue a "IsA")
  10.                                          "AcDbGroup"
  11.                                      )
  12.                                    )
  13.                                   (XD::Obj:Reactors x)
  14.                                 )
  15.                       )
  16.                     (progn
  17.                       (setq
  18.                         ll (xdrx_pickset->ents
  19.                              (xdrx_getpropertyvalue
  20.                                (car lst)
  21.                                "allEntities"
  22.                              )
  23.                            )
  24.                         n  (xdrx_getpropertyvalue (car ll) "numVerts")
  25.                       )
  26.                       (list (xdrx_xdata_get x "XDCircuit")
  27.                             (xdrx_getpropertyvalue (cadr ll) "textstring")
  28.                             (if        (= (length ll) 3)
  29.                               n
  30.                               (1- n)
  31.                             )
  32.                       )
  33.                     )
  34.                   )
  35.                 )
  36.                (xdrx_pickset->ents ss)
  37.              )
  38.       )
  39.       (foreach x nl
  40.         (princ "\n")
  41.         (princ x)
  42.       )
  43.     )
  44.   )
  45.   (princ)
  46. )

点评

[attachimg]11669[/attachimg]统计上,在下边显示上没有问题,怎样加入转到EXCEL表中的功能,如果加入在CAD中列表和EXCEL表中2选1会更好。 论坛已发布了EXCEL的函数,但是我现在的水平还不知道怎样加入。有待于学习  详情 回复 发表于 2014-11-28 15:56
现在正在准备测试,,真心的感谢st788796版主的支持,如果有机会,一定要当面感谢!!! 我会努测试,将结果发到论坛上!!  详情 回复 发表于 2014-11-28 15:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-28 15:18:42 | 显示全部楼层
st788796 发表于 2014-11-28 15:12
配合上面程序的统计

现在正在准备测试,,真心的感谢st788796版主的支持,如果有机会,一定要当面感谢!!!{:soso_e100:}

我会努测试,将结果发到论坛上!!

点评

最起码做个漂亮的演示动画贴上来让大家看看。  详情 回复 发表于 2014-11-28 15:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-28 15:49:44 | 显示全部楼层
grs432 发表于 2014-11-28 15:18
现在正在准备测试,,真心的感谢st788796版主的支持,如果有机会,一定要当面感谢!!!
...

最起码做个漂亮的演示动画贴上来让大家看看。

点评

现在做的动画有点糙,,会在程序最后完美的时候统一做个各个动画,,现在在引出回路字体大小上还要调整一下,,要自己手动改,所以在动画上看不到,自己也是急于测试,,没有注意这方面,也是发完后才发现这个问题。  详情 回复 发表于 2014-11-28 16:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-28 15:50:28 | 显示全部楼层

555.gif
现在测试增加和减少点上,在多段线中间加点和减点没有问题,不足之处是弧度与原来有不同,影响美观。
在头与尾部增加回路时会出问题,如上边动画所示。

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 22:36 , Processed in 0.301706 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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