找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 17880|回复: 42

[原创] 【炫翔】批量矩形偏移端点连线(大部分已注释)

[复制链接]

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-7-15 14:48:12 | 显示全部楼层 |阅读模式

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

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

×
1.gif
  1. ;作者:炫翔 QQ:2363673534  网盘地址:http://xuanxiang.ys168.com
  2. (defun c:xx (/ i s1 ss)
  3.   (setq ss (ssget ":s" '((0 . "*LWPOLYLINE")));只选取矩形
  4.   i -1;初始化一个值
  5.   )
  6.   (while (setq s1 (ssname ss (setq i (1+ i))));遍历选择集的每一个图元
  7.     (REC2PT4 s1 20);对每一个图元进行处理
  8.   )
  9. )

  10. ;偏移,端点连线子函数
  11. ;S1为图元名  dist  为偏移的距离
  12. (DEFUN REC2PT4 (S1 dist / p0 p1 p11 p3 p33 p7 p77 p9 p99 pts1 pts2 s2 x y)
  13.   (SETQ P1 (xx-en-9pt S1 1);矩形的左下点
  14.   P3 (xx-en-9pt S1 3);矩形的右下点
  15.   P7 (xx-en-9pt S1 7);矩形的左上点
  16.   P9 (xx-en-9pt S1 9);矩形的右上点
  17.   P0 (xx-en-9pt S1 5);矩形的中点
  18.   )
  19.   (SETQ PTS1(list P1 P3 P7 P9));将点组合成一个表
  20.   (command "_.OFFSET" dist S1 p0 "")
  21.   (SETQ S2(ENTLAST))
  22.   (SETQ P11 (xx-en-9pt S2 1);矩形的左下点
  23.   P33 (xx-en-9pt S2 3);矩形的右下点
  24.   P77 (xx-en-9pt S2 7);矩形的左上点
  25.   P99 (xx-en-9pt S2 9);矩形的右上点
  26.   )
  27.   (SETQ PTS2(list P11 P33 P77 P99));将点组合成一个表
  28.   (mapcar '(lambda (x y) (xx-mk-pline2 x y)) PTS1 PTS2);分别对点表进行操作
  29. )


  30. ;生成一条两顶点多段线(多顶点类似)
  31. ;参数:pt1:起点,pt2:下一点
  32. ;(xx-mk-pline2 pt1 pt2)
  33. (defun xx-mk-pline2 (pt1 pt2)
  34. (if (and(= (type pt1) 'list)(= (type pt2) 'list))
  35.   (progn
  36.    (entmake
  37.       (list
  38.         '(0 . "lwpolyline")
  39.         '(100 . "AcDbEntity")
  40.         '(100 . "AcDbPolyline")
  41.         (cons 90 2) ;顶点数(一定要有的),例为2个顶点
  42.         (cons 10 pt1)
  43.         (cons 10 pt2)
  44.       )
  45.    )
  46.   )
  47.   (princ "\n xx-mk-pline2 错了!")
  48. )
  49. )


  50. ;获取对象的9点坐标
  51. ;7 8 9
  52. ;4 5 6
  53. ;1 2 3
  54. (defun xx-en-9pt (s1 mode / dx dy point pointmax pointmin x1 x2 y1 y2)
  55. (cond
  56.    ((and (= (type s1) 'ENAME)(= (type mode) 'INT))(setq s1 (vlax-ename->vla-object s1)))
  57.    ((and (= (type s1) 'vla-object)(= (type mode) 'INT))(setq s1 s1))
  58.    (t (princ "\n xx-en--9pt  错了!")(quit))
  59. )
  60.    (vla-getboundingbox s1 'minpoint 'maxpoint)
  61.    (setq pointmax (vlax-safearray->list maxpoint);取得第9点
  62.          pointmin (vlax-safearray->list minpoint);取得第1点
  63.               x1  (car pointmin)
  64.               x2  (car pointmax)
  65.               y1  (cadr pointmin)
  66.               y2  (cadr pointmax)
  67.               dx  (/ (- x2 x1) 2.0)
  68.               dy  (/ (- y2 y1) 2.0)
  69.    )
  70.    (cond ((= mode 1) (setq point pointmin))
  71.          ((= mode 2) (setq point (list (+ x1 dx) y1 0.0)))
  72.          ((= mode 3) (setq point (list x2 y1 0.0)))
  73.          ((= mode 4) (setq point (list x1 (+ y1 dy)0.0)))
  74.          ((= mode 5) (setq point (list (+ x1 dx) (+ y1 dy)0.0)))
  75.          ((= mode 6) (setq point (list x2 (+ y1 dy)0.0)))
  76.          ((= mode 7) (setq point (list x1 y2 0.0)))
  77.          ((= mode 8) (setq point (list (+ x1 dx) y2 0.0)))
  78.          ((= mode 9) (setq point pointmax))
  79.          (t (setq point pointmin))
  80.    )
  81.    point
  82. )

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-7-15 15:04:09 | 显示全部楼层
偏移距离要是很大,是不是要出错?

点评

未有任何考虑判断因素,偏移超过了,当然会出错的  发表于 2013-7-15 15:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-15 15:43:43 | 显示全部楼层
运行后有时结果正常,有时结果不正常,是错误的。错误概率有50%

点评

截图或演示,我这正常,应该跟捕捉有关,我对象捕捉关掉试试  发表于 2013-7-15 15:45

评分

参与人数 1D豆 +3 收起 理由
炫翔 + 3 认真学习奖

查看全部评分

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

使用道具 举报

已领礼包: 308个

财富等级: 日进斗金

发表于 2013-7-15 15:58:44 | 显示全部楼层
获取图元-->遍历-->计算中点-->计算节点坐标-->偏移对象-->获取新图元坐标-->两图元坐标间匹配连线-->循环-->ok:lol
3.gif

点评

这个更厉害!赞一个!  详情 回复 发表于 2013-7-15 17:28

评分

参与人数 1D豆 +3 收起 理由
炫翔 + 3 交流奖

查看全部评分

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-15 16:37:26 | 显示全部楼层
对自交线或者距离超大的时候会出现退化现象,节点数会不等的
  1. (defun c:tt (/ ss dis e pts0 pts1)
  2.   (if (and (setq ss (ssget '((0 . "*polyline"))))
  3.     (setq dis (getdist "\noffset distance: "))
  4.       )
  5.     (progn
  6.       (xdrx_setsstodb ss 0)
  7.       (while (setq e (xdrx_getentdata 0))
  8. (setq pts0 (xdrx_entity_getstretchpoint e))
  9. (vla-offset (vlax-ename->vla-object e) dis)
  10. (setq pts1 (xdrx_entity_getstretchpoint (entlast)))
  11. (if (= (length pts0) (length pts1))
  12.    (apply 'xdrx_line_make
  13.    (mapcar '(lambda (x y) (list x y)) pts0 pts1)
  14.    )
  15. )
  16.       )
  17.     )
  18.   )
  19.   (princ)
  20. )

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 918个

财富等级: 财运亨通

发表于 2013-7-15 17:01:13 | 显示全部楼层
再加强下功能吧,两条连线之间画垂线,可以选择等距或者等分
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-7-15 17:22:46 | 显示全部楼层
NET-JOB 发表于 2013-7-15 17:01
再加强下功能吧,两条连线之间画垂线,可以选择等距或者等分

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-7-15 17:28:39 | 显示全部楼层
仲文玉 发表于 2013-7-15 15:58
获取图元-->遍历-->计算中点-->计算节点坐标-->偏移对象-->获取新图元坐标-->两图元坐标间匹配连线-->循环- ...

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-7-15 17:35:07 | 显示全部楼层
q3_2006 发表于 2013-7-15 17:31
期待,只能矩形真的不太有通用性!

习惯太差,明白了,知道如何扩展了,谢谢!

评分

参与人数 1D豆 +3 收起 理由
炫翔 + 3 上进奖

查看全部评分

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

使用道具 举报

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

使用道具 举报

发表于 2013-7-15 17:41:18 | 显示全部楼层
st788796 发表于 2013-7-15 16:37
对自交线或者距离超大的时候会出现退化现象,节点数会不等的

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 04:26 , Processed in 0.204146 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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