找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 412|回复: 7

[求助] 如何获取到不规则图形内的选择集呢

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2018-7-16 08:09:24 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-16 08:59:53 | 显示全部楼层
你选不来到就是你写的有问题,不贴代码,讨论不下去。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-16 10:12:14 | 显示全部楼层
newer 发表于 2018-7-16 08:59
你选不来到就是你写的有问题,不贴代码,讨论不下去。
  1. (defun c:xzn()
  2.    (command "explode" (car (entsel)) "")
  3.    (setq n (ssget "_p"))
  4.    (setq len (sslength n))
  5.    (setq i 0)
  6.    (setq lst (list))
  7.    (repeat len
  8.       (setq s1 (ssname n i))
  9.       (setq lx (cdr (assoc 0 (entget s1))))
  10.       (if (/= lx "LINE")
  11.           (progn
  12.               (setq s (vlax-ename->vla-object (cdr (assoc -1 (entget s1)))))
  13.               (setq end (vlax-curve-getEndParam s))
  14.               (setq star (vlax-curve-getStartParam s))
  15.               (setq p1 (vlax-curve-getPointAtParam s star))
  16.               (setq jg (/ (- end star) 20))
  17.               (setq lst (cons p1 lst))
  18.               (repeat 20
  19.                 (setq star (+ star jg))
  20.                 (setq p2 (vlax-curve-getPointAtParam s star))
  21.                 (setq lst (cons p2 lst))
  22.               )
  23.           )
  24.       )
  25.      (if (= lx "LINE")
  26.           (progn
  27.               (setq s (vlax-ename->vla-object (cdr (assoc -1 (entget s1)))))
  28.               (setq end (vlax-curve-getEndParam s))
  29.               (setq star (vlax-curve-getStartParam s))
  30.               (setq p1 (vlax-curve-getPointAtParam s star))
  31.               (setq p2 (vlax-curve-getPointAtParam s end))
  32.               (setq lst (cons p1 lst))
  33.               (setq lst (cons p2 lst))
  34.           )
  35.       )
  36.       (setq i (+ i 1))
  37.   )
  38. )

这是得到包围圈的点表,然后思路是分解多段线,求出每条边的点,弧线用多段线代替,得到后再用ssget,但是这个点表有重复的点,还不知道怎么去除的,大哥
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-16 15:47:31 | 显示全部楼层
newer 发表于 2018-7-16 08:59
你选不来到就是你写的有问题,不贴代码,讨论不下去。

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-7-16 20:22:44 | 显示全部楼层
本帖最后由 marting 于 2018-7-16 20:24 编辑
yigexinren 发表于 2018-7-16 10:12
这是得到包围圈的点表,然后思路是分解多段线,求出每条边的点,弧线用多段线代替,得到后再用ssget, ...

你每个循环里面,都添加了两个顶点,当然有重复了

你应该在循环前,先把起点保存到表
然后在循环里面,对LINE段,只把LINE的终点保存到表,就没重复点了。
对于ARC段,你保存除起点外的其他点到表。

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-17 10:00:54 | 显示全部楼层
marting 发表于 2018-7-16 20:22
你每个循环里面,都添加了两个顶点,当然有重复了

你应该在循环前,先把起点保存到表

嗯呢,谢谢,去重复部分已经完成了,不过因为点表可能是乱的出现了自相交,导致还是无法求出里面的选择集

点评

你是炸开的多段线,对于ARC,永远是逆时针的,所以,如果你的多段线里面有弧线而且是顺时针方向,那么你就得判断,反转下ARC的顶点表。 试试下面的  详情 回复 发表于 2018-7-17 11:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-17 11:57:38 | 显示全部楼层
yigexinren 发表于 2018-7-17 10:00
嗯呢,谢谢,去重复部分已经完成了,不过因为点表可能是乱的出现了自相交,导致还是无法求出里面的选择集

你是炸开的多段线,对于ARC,永远是逆时针的,所以,如果你的多段线里面有弧线而且是顺时针方向,那么你就得判断,反转下ARC的顶点表。

试试下面的

  1. (defun c:xzn ()
  2.   (command "explode" (car (entsel)) "")
  3.   (setq n (ssget "_p"))
  4.   (setq len (sslength n))
  5.   (setq i 0)
  6.   (setq lst (list (vlax-curve-getstartpoint (ssname n 0))))
  7.   (repeat len
  8.     (setq s1 (ssname n i))
  9.     (setq lx (cdr (assoc 0 (entget s1))))
  10.     (if (/= lx "LINE")
  11.       (progn (setq s (vlax-ename->vla-object (cdr (assoc -1 (entget s1)))))
  12.              (setq end (vlax-curve-getEndParam s))
  13.              (setq star (vlax-curve-getStartParam s))
  14.              (setq p1 (vlax-curve-getPointAtParam s star))
  15.              (setq jg (/ (- end star) 20))
  16.              (setq lst1 nil
  17.                    lst1 (cons p1 lst1)
  18.              )
  19.              (repeat 20
  20.                (setq star (+ star jg))
  21.                (setq p2 (vlax-curve-getPointAtParam s star))
  22.                (setq lst1 (cons p2 lst1))
  23.              )
  24.              (setq lst1 (reverse lst1))
  25.              (if (equal (car lst1) (car lst) 1e-3)
  26.                (setq lst (append (cdr (reverse lst1)) lst))
  27.                (setq lst (append (reverse (cdr (reverse lst1))) lst))
  28.              )
  29.       )
  30.     )
  31.     (if (= lx "LINE")
  32.       (progn (setq s (vlax-ename->vla-object (cdr (assoc -1 (entget s1)))))
  33.              (setq end (vlax-curve-getEndParam s))
  34.              (setq star (vlax-curve-getStartParam s))
  35.              (setq p1 (vlax-curve-getPointAtParam s star))
  36.              (setq p2 (vlax-curve-getPointAtParam s end))
  37.              (setq lst (cons p2 lst))
  38.       )
  39.     )
  40.     (setq i (+ i 1))
  41.   )
  42.   lst
  43. )


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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-17 20:56:42 | 显示全部楼层
newer 发表于 2018-7-17 11:57
你是炸开的多段线,对于ARC,永远是逆时针的,所以,如果你的多段线里面有弧线而且是顺时针方向,那么你 ...

谢谢大佬,我试了下您的代码,能用了。不过我昨天用的另一种方法,取出多段线的所有凸度和参数,然后弧线部分就把点加密。再通过参数点,取出点表,然后求出范围内的所有图元。不过能否帮我解决一下另外一个问题,就是我有一堆线,形成了网格,能否在网格的每个闭合区域,生成一个多段线啊。。。拜托了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 07:02 , Processed in 0.215371 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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