找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: grs432

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

[复制链接]
 楼主| 发表于 2014-11-21 12:28:33 | 显示全部楼层
st788796 发表于 2014-11-21 11:51
首先,没有这样画过,只是凭自己想象出的操作模式写的程序,和实际应用肯定有距离

再者,你把实际中所 ...

另外,此次工具从开始我都是以通过多段线的顶点这个思路来统计经过块的数量,,那么有多段线经过多少个块的算法吗??且可以将块名和块的数量也打包在组中。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-11-21 12:42:04 来自手机 | 显示全部楼层
成组了,实体都有还愁数量和名称!

点评

不是,以前成组只是多段线在组里了,我这次说的是多段线经过的块,块的不在组内。我了解组内的东西是好统计的。  详情 回复 发表于 2014-11-21 13:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-21 13:31:31 | 显示全部楼层
iLisp 发表于 2014-11-21 12:42
成组了,实体都有还愁数量和名称!

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-21 16:27:59 | 显示全部楼层
grs432 发表于 2014-11-21 13:31
不是,以前成组只是多段线在组里了,我这次说的是多段线经过的块,块的不在组内。我了解组内的东西是好统 ...

你试试这个选择一个回路上的块自动连线,对有尖角的地方会有交叉
算法虽不高效,数量不多的时候能够接受
  1. (defun c:tt (/ _path ss p lst nl)
  2.   (defun _Path (pts p / ptl)
  3.     (setq pts (vl-remove p pts)
  4.           ptl (list p)
  5.     )
  6.     (while pts
  7.       (setq
  8.         p (car
  9.             (vl-sort
  10.               pts
  11.               '(lambda (x1 x2)
  12.                  (< (distance (car ptl) x1) (distance (car ptl) x2))
  13.                )
  14.             )
  15.           )
  16.       )
  17.       (setq ptl (cons p ptl))
  18.       (setq pts (vl-remove p pts))
  19.     )
  20.     (reverse ptl)
  21.   )
  22.   (if (and (setq ss (ssget '((0 . "insert"))))
  23.            (setq p (getpoint "\n起点: "))
  24.       )
  25.     (progn
  26.       (setq lst        (mapcar        '(lambda (x)
  27.                            (xdrx_getpropertyvalue x "position")
  28.                          )
  29.                         (xdrx_pickset->ents ss)
  30.                 )
  31.             nl        (_path lst p)
  32.       )
  33.       (apply 'xdrx_polyline_make nl)
  34.     )
  35.   )
  36.   (princ)
  37. )

点评

这个自动连线的我试了,块与块的自动连线没有问题。。但是一般连线的话,都是规则的多段线弧线,且是隔1个块连1个块的。  详情 回复 发表于 2014-11-24 09:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-21 17:05:25 | 显示全部楼层
画线的时候把块也选上,要求选点是 块的插入点 且这个插入点处要有实体(块为圆,中心为插入点时无法选中)
支持回退
  1. (defun c:tt (/ p pts p d pl pl1 p1 str tf blk ss blst)
  2.   (while (progn
  3.            (initget 128 "U")
  4.            (setq p (if pts
  5.                      (getpoint (car pts) "\n下一点[回退(U)]: ")
  6.                      (getpoint "\n起点: ")
  7.                    )
  8.            )
  9.          )
  10.     (if        (listp p)
  11.       (progn
  12.         (setq pts (cons p pts))
  13.         (if
  14.           (and (setq ss (xdrx_pickset_getatpoint p '((0 . "insert"))))
  15.                (setq blk
  16.                       (car (vl-remove-if-not
  17.                              '(lambda (x)
  18.                                 (equal p
  19.                                        (xdrx_getpropertyvalue x "position")
  20.                                 )
  21.                               )
  22.                              (xdrx_pickset->ents ss)
  23.                            )
  24.                       )
  25.                )
  26.           )
  27.            (setq blst (cons blk blst))
  28.         )
  29.         (if (= (length pts) 2)
  30.           (progn
  31.             (setq p (getpoint (apply 'xdrx_line_midp pts) "\n弦高: ")
  32.                   d (* 2 (xdrx_point_dist2line p (cadr pts) (car pts)))
  33.             )
  34.             (setq pl (xdrx_polyline_make (cadr pts) (car pts)))
  35.             (xdrx_polyline_setbulgeat pl 0 (/ d (apply 'distance pts)))
  36.           )
  37.         )
  38.         (if (and pl (> (length pts) 2))
  39.           (progn
  40.             (setq n (xdrx_polyline_numverts pl))
  41.             (xdrx_polyline_setpointat pl (1- n) (car pts))
  42.             (xdrx_polyline_addvertexat pl (1- n) (cadr pts))
  43.             (xdrx_polyline_setbulgeat
  44.               pl
  45.               (- n 2)
  46.               (/ d (distance (cadr pts) (caddr pts)))
  47.             )
  48.             (xdrx_polyline_setbulgeat
  49.               pl
  50.               (1- n)
  51.               (/ d (distance (car pts) (cadr pts)))
  52.             )
  53.           )
  54.         )
  55.       )
  56.       (cond
  57.         ((and pl (= (xdrx_polyline_numverts pl) 2))
  58.          (xdrx_entity_delete pl)
  59.          (setq pl nil)
  60.          (setq pts (cdr pts))
  61.         )
  62.         ((= (length pts) 1)
  63.          (setq pts nil)
  64.         )
  65.         (t
  66.          (xdrx_polyline_removevertexat
  67.            pl
  68.            (1- (xdrx_polyline_numverts pl))
  69.          )
  70.          (setq pts (cdr pts))
  71.         )
  72.       )
  73.     )
  74.   )
  75.   (if (and pl
  76.            (if (setq p (getpoint "\n引出点<回车端点>: "))
  77.              (progn
  78.                (setq tf nil)
  79.                p
  80.              )
  81.              (setq tf t
  82.                    p  (xdrx_curve_getendpoint pl)
  83.              )
  84.            )
  85.            (setq p1 (getpoint p "\n标注点: "))
  86.            (setq str (getstring "\n回路编号: "))
  87.       )
  88.     (progn
  89.       (setq
  90.         txt (xdrx_text_make p1 (strcase str) (getvar "textsize") 0.0)
  91.         pl1 (xdrx_polyline_make p p1)
  92.       )
  93.       (xdrx_polyline_setbulgeat pl1 0 0.5)
  94.       (if tf
  95.         (progn
  96.           (xdrx_curve_join pl pl1)
  97.           (xdrx_group_make "*" pl txt blst)
  98.         )
  99.         (xdrx_group_make "*" pl txt pl1 blst)
  100.       )
  101.     )
  102.   )
  103.   (princ)
  104. )

点评

我现在有个思路,可以更方便一些,希望st88796您考虑一下。 就是在支持回退的那个程序中,,在最后引出标注前加入1个识别块名的命令, 就是用鼠标再点任意1个连线经过的块,取它的名称,再引出标注,将回路和  详情 回复 发表于 2014-11-25 11:19
试过回退功能,,真的很棒的。。 如果在画回路号时能每画1个回路,回路的尾号可以自动增加就好了。。 如画AL1-WL01 ,,AL1-WL02,。。。。。AL1-WL10 要换成AL2-WL01,AL2-WL02,。。。。。AL2-WL10。 其实  详情 回复 发表于 2014-11-24 10:05
可以搜索“最小覆盖路径”问题及算法,正向找还要反向检查无交叉  详情 回复 发表于 2014-11-21 21:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-11-21 21:41:18 来自手机 | 显示全部楼层
本帖最后由 iLisp 于 2014-11-21 21:59 编辑
st788796 发表于 2014-11-21 17:05
画线的时候把块也选上,要求选点是 块的插入点 且这个插入点处要有实体(块为圆,中心为插入点时无法选中) ...


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

使用道具 举报

 楼主| 发表于 2014-11-24 09:59:12 | 显示全部楼层
st788796 发表于 2014-11-21 16:27
你试试这个选择一个回路上的块自动连线,对有尖角的地方会有交叉
算法虽不高效,数量不多的时候能够接受 ...

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

使用道具 举报

 楼主| 发表于 2014-11-24 10:05:38 | 显示全部楼层
st788796 发表于 2014-11-21 17:05
画线的时候把块也选上,要求选点是 块的插入点 且这个插入点处要有实体(块为圆,中心为插入点时无法选中) ...

试过回退功能,,真的很棒的。。
如果在画回路号时能每画1个回路,回路的尾号可以自动增加就好了。。
如画AL1-WL01  ,,AL1-WL02,。。。。。AL1-WL10    要换成AL2-WL01,AL2-WL02,。。。。。AL2-WL10。
其实效果和前缀编号的程序一样。指定1个前缀,就自动增加。

另外,还有上次说的,组内的统计的是(回路号  数量),不知道能否增加块名?  组内的统计为(回路号   块名  数量)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-24 10:19:48 来自手机 | 显示全部楼层
grs432 发表于 2014-11-24 10:05
试过回退功能,,真的很棒的。。
如果在画回路号时能每画1个回路,回路的尾号可以自动增加就好了。。
...

用哪个继续写呢?

点评

块自动连线的那个就算了,不讨论了,那个没有通用性,还是手动布置线吧,平时好多块不是常规布置。。 程序就在支持回退功能上写吧,我测试了,很好的。。 1、我觉得现在就支持回路编号自动增加。 2、组内统  详情 回复 发表于 2014-11-24 11:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-24 11:06:28 | 显示全部楼层
st788796 发表于 2014-11-24 10:19
用哪个继续写呢?


块自动连线的那个就算了,不讨论了,那个没有通用性,还是手动布置线吧,平时好多块不是常规布置。。

程序就在支持回退功能上写吧,我测试了,很好的。。
1、我觉得现在就支持回路编号自动增加。

2、组内统计那个帖子
组内统计把块名加入就足够用了。统计数据如下(回路号,线经过的块名,多段线顶点数量)

3、另外功能增强的工具
就是在原来打好的组中加入或减少多段线顶点,此功能是为了修改或增加作用的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-24 17:19:49 | 显示全部楼层

333.gif
我今天刚想试程序,,这CAD的组不能用了,不显示组了。。疯了的节奏。。
又出现下面这个对话框。。唉!造什么孽了。
QQ图片20141124171808.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-24 17:30:06 来自手机 | 显示全部楼层
ctrl + h 组开关,值为 1 是开

点评

问题解决了,谢谢st788796 [/backcolor] [/backcolor]程序减点测试完美,方便很多呀!差点瞬间的事呀! 通过这一轮的交流和问答,,真的是学到了好多的知识!再次感谢st788796 的帮助[/backcolor] [/back  详情 回复 发表于 2014-11-25 11:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-11-25 11:10:24 | 显示全部楼层
st788796 发表于 2014-11-24 17:30
ctrl + h 组开关,值为 1 是开

问题解决了,谢谢st788796     程序减点测试完美,方便很多呀!差点瞬间的事呀!


通过这一轮的交流和问答,,真的是学到了好多的知识!再次感谢st788796 的帮助


一步步接近了完美,,真的是好高兴呀!




现在真希望组内加线和组内统计加入块名(或文本标注名)的功能实现。


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

使用道具 举报

 楼主| 发表于 2014-11-25 11:19:18 | 显示全部楼层
st788796 发表于 2014-11-21 17:05
画线的时候把块也选上,要求选点是 块的插入点 且这个插入点处要有实体(块为圆,中心为插入点时无法选中) ...

我现在有个思路,可以更方便一些,希望st88796您考虑一下。


就是在支持回退的那个程序中,,在最后引出标注前加入1个识别块名的命令,
就是用鼠标再点任意1个连线经过的块,取它的名称,再引出标注,将回路和标注一起引出并打在组中。

这样子在组中就可以统计了。。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-25 12:33:28 来自手机 | 显示全部楼层
grs432 发表于 2014-11-25 11:19
我现在有个思路,可以更方便一些,希望st88796您考虑一下。



绘制过程有选取块功能,顶点数就是块数量,可以将块名记录到组内的,可以最后有个判断是否选择上了块而且选择的块是否一致,否则就提示指定块

初步加入odcl界面,可以管理多个前缀和编号,连续绘制编号自动+1,选点时也可以随时更改设置,主体已经完成,测试好后将发布插件

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 18:48 , Processed in 0.209472 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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