找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8535|回复: 16

[研讨] 多段线自相交(自相交返回T)

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-11-23 09:08:38 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 /db_自贡黄明儒_ 于 2013-11-23 09:09 编辑

  1. ;;多段线自相交(自相交返回T),封闭也为自相交
  2. ;;(LPintersSelf (car (entsel)))
  3. (defun LPintersSelf (en / ENT LEN1 LEN2 OBJ PTS)
  4.   (setq ent (entget en))
  5.   (setq pts (vl-remove-if-not '(lambda (x) (= (car x) 10)) ent))
  6.   (setq Len1 (- (length (mapcar 'cdr pts)) 2))
  7.   (setq obj (vlax-ename->vla-object en))
  8.   (setq pts (vla-intersectwith obj obj 0))
  9.   (setq Len2 (vlax-safearray->list (vlax-variant-value pts)))
  10.   (setq len2 (/ (length len2) 3))
  11.   (not(equal len1 len2))
  12. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2688个

财富等级: 家财万贯

发表于 2013-11-23 10:05:43 | 显示全部楼层
黄大侠又出新作了?顶一个!试用了下,觉得还应该再加以改进,无自相交而封闭的多段线也返回T;
还有,最好还是在开头加上(vl-load-com)这句。

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-23 10:15:54 | 显示全部楼层
顶点数  (cdr (assoc 90 elst))

点评

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-11-23 10:31:20 | 显示全部楼层
st788796 发表于 2013-11-23 10:15
顶点数  (cdr (assoc 90 elst))
  1. ;;多段线自相交(自相交返回T),封闭也为自相交
  2. ;;(LPintersSelf (car (entsel)))
  3. (defun LPintersSelf (en / LEN1 LEN2 OBJ PTS)
  4.   (setq Len1 (- (cdr (assoc 90 (entget en))) 2))
  5.   (setq obj (vlax-ename->vla-object en))
  6.   (setq pts (vla-intersectwith obj obj 0))
  7.   (setq Len2 (vlax-safearray->list (vlax-variant-value pts)))
  8.   (setq len2 (/ (length len2) 3))
  9.   (not (equal len1 len2))
  10. )

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-23 10:33:17 | 显示全部楼层

len1 为什么 - 2?

点评

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-11-23 10:52:20 | 显示全部楼层

Vla-intersectwith得到的点不包括起点和终点

点评

狂刀是这样写的 http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=465506&pid=2275085  详情 回复 发表于 2013-11-23 10:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-23 10:56:44 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-11-23 10:52
Vla-intersectwith得到的点不包括起点和终点

狂刀是这样写的
http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=465506&pid=2275085

点评

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-11-23 11:02:19 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2013-11-23 15:24 编辑


原来早就有了,还是狂刀{:soso_e179:}

  1. ;;[功能] 多段线自相交
  2. ;; (plinsp (car(entsel)))
  3. (defun plinsp (en / FLAG LAPT N O PTS PTS1 STPT)
  4.   ;;52.1 [功能] 3D点->2D点 By Caoyin
  5.   (defun 3d->2d (3dpt)
  6.     (mapcar '+ 3dpt '(0. 0.))
  7.   )
  8.   ;;52.4 [功能] 3D点列表->2D点列表
  9.   (defun 3dlist->2dlist (3dplist)
  10.     (mapcar '3d->2d 3dplist)
  11.   )
  12.   ;;52.5 [功能] 对表分段
  13.   ;;(xl_div lst nom)表分段. -> 返回 分段的表.   ------by 无痕.2004.1
  14.   ;; lst = 表,nom = 分段的子表元素个数(从1开始计).
  15.   ;;示例 (xl_div '(1 2 3 4 5 6 7 8 9) 3) -> ((1 2 3) (4 5 6) (7 8 9))
  16.   (defun xl-div (lst x / lst2)
  17.     (foreach n lst
  18.       (if (and lst2 (/= x (length (car lst2))))
  19. (setq lst2 (cons (append (car lst2) (list n)) (cdr lst2)))
  20. (setq lst2 (cons (list n) lst2))
  21.       )
  22.     )
  23.     (reverse lst2)
  24.   )
  25.   ;;164.3 [功能] 多段线端点列表
  26.   ;;示例(HH:PtLists (car (entsel)))
  27.   (defun HH:PtLists (en)
  28.     (mapcar 'cdr
  29.      (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))
  30.     )
  31.   )
  32.   ;;
  33.   ;;(setq en (car (entsel)))
  34.   (setq o (vlax-ename->vla-object en))
  35.   (setq n (vlax-get o 'closed))
  36.   (cond ((equal n 0)
  37.   (setq laPt (vlax-curve-getEndPoint en))
  38.   (setq stPt (vlax-curve-getStartPoint en))
  39.   (setq pts (vlax-invoke o 'intersectwith o 0))
  40.   (setq pts (3dlist->2dlist (xl-div pts 3)))
  41.   (SETQ PTS1 (HH:PtLists EN))
  42.   (foreach i pts
  43.     (if (member i PTS1)
  44.       (setq flag T)
  45.     )
  46.   )
  47.   (or
  48.     flag
  49.     (/= (vlax-curve-getParamAtPoint en laPt)
  50.         (vlax-curve-getendparam en)
  51.     )
  52.     (/= (vlax-curve-getParamAtPoint en stPt)
  53.         (vlax-curve-getstartparam en)
  54.     )
  55.     (< (vlax-curve-getendparam en)
  56.        (+ 1 (/ (length pts) 3))
  57.     )   
  58.   )
  59. )
  60. (T nil)
  61.   )
  62. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2688个

财富等级: 家财万贯

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2013-11-23 21:53:38 | 显示全部楼层
本帖最后由 aeo 于 2013-11-23 21:56 编辑

所有交点都在端点上就是 不自相交吗??
那我画一个8字呢?中间相X的地方刚好也是一个端点的情况呢?

点评

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-11-23 22:02:16 | 显示全部楼层
多段线有顶点重复的情况是不适用的!

点评

aeo
不重复呀,X的交叉的地方只是某一条是端点,另一条划过.  详情 回复 发表于 2013-11-23 23:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2013-11-23 23:17:12 | 显示全部楼层
牢固 发表于 2013-11-23 22:02
多段线有顶点重复的情况是不适用的!

不重复呀,X的交叉的地方只是某一条是端点,另一条划过.

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-24 07:47:04 来自手机 | 显示全部楼层
aeo 发表于 2013-11-23 23:17
不重复呀,X的交叉的地方只是某一条是端点,另一条划过.

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-11-25 09:56:52 | 显示全部楼层
aeo 发表于 2013-11-23 21:53
所有交点都在端点上就是 不自相交吗??
那我画一个8字呢?中间相X的地方刚好也是一个端点的情况呢?

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 00:45 , Processed in 0.255051 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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