明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: qinleilei

[已解答] 如何在圆选择集中高效的分离出同心圆

[复制链接]
发表于 2016-7-18 22:37:33 | 显示全部楼层
本帖最后由 陨落 于 2016-7-19 12:48 编辑

(defun delsames(ss tol)
(setq list1 (ss->list ss)
      list2 nil)
  (while (>(length list1) 0)
    (setq en1(car list1)
          centernow (center en1)
          ensame (vl-remove-if-not '(lambda(x)(equal (center x)centernow tol))list1)
          list1(vl-remove-if '(lambda(x)(equal (center x)centernow tol))list1)
          list2(cons (car ensame)list2)
  )
    )
  list2
  )
(defun center(en)
(cdr (assoc 10(entget en)))
)
(defun SS->LIST (SS)
   (if ss
  (vl-remove-if-not '(lambda(x) (= (type X) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
     nil)
   )
消除同心圆,凡是同心圆,任意保留一个,返回删除后的图元列表
ss是选择集,必须是圆的选择集,tol是容差
处理5200个大约50s
可以继续写保留最大半径那个
发表于 2016-7-19 00:28:45 | 显示全部楼层
既然是同心圆,肯定是大圆包小圆。我的想法是选择大圆,然后以大圆为边界建立选择集(只选圆对象),看看选择集是否存在,存在则为同心圆
发表于 2016-7-19 08:52:48 | 显示全部楼层
zjlszw 发表于 2016-7-19 00:28
既然是同心圆,肯定是大圆包小圆。我的想法是选择大圆,然后以大圆为边界建立选择集(只选圆对象),看看选 ...

同心和包含不等价
发表于 2016-7-19 10:01:37 | 显示全部楼层
其实你安装CAD时添加ET工具。然后ET工具里有一个消重图元(overkill)的功能,你读一下那个源码就能搞定了。
----------------
读代码初期很痛苦,但后期是很快乐的。。
发表于 2016-7-19 11:56:44 | 显示全部楼层
先排序 后 比较分类
发表于 2016-7-19 13:59:42 | 显示全部楼层
(Defun _Filter(ss)
(setq i -1)
(repeat (sslength ss)
   (setq sn (ssname ss (setq i (1+ i)))
            s10 (vl-prin1-to-string (cdr (assoc 10 (entget sn))))
    )
    (if (null (setq val (cdr (assoc s10 rtn))))
        (Setq rtn (cons (list (cons s10 sn)) rtn))
        (setq rtn (subst (cons s10 (cons sn val)) (assoc s10 rtn) rtn))
    )
)
rtn
)
发表于 2016-7-19 22:21:53 | 显示全部楼层
陨落 发表于 2016-7-18 22:37
(defun delsames(ss tol)
(setq list1 (ss->list ss)
      list2 nil)

还可以优化,可以再缩短大概一半的运行时间
 楼主| 发表于 2016-7-20 08:06:37 | 显示全部楼层
kozmosovia 发表于 2016-7-19 13:59
(Defun _Filter(ss)
(setq i -1)
(repeat (sslength ss)

大师,你这个程序的返回值是 实体名 表,
这些表的实体名  没有区分 同心 于不同心的

点评

圆心一样的圆在同一个子表里,所有只有一个实体的子表里面的,都是非同心圆  发表于 2016-7-20 08:14
 楼主| 发表于 2016-7-20 08:07:16 | 显示全部楼层
kozmosovia 发表于 2016-7-19 13:59
(Defun _Filter(ss)
(setq i -1)
(repeat (sslength ss)

大师,你这个程序的返回值是 实体名 表,
这些表的实体名  没有区分 同心 于不同心的
 楼主| 发表于 2016-7-20 08:08:56 | 显示全部楼层
陨落 发表于 2016-7-19 22:21
还可以优化,可以再缩短大概一半的运行时间

怎么优化? 大师帮忙支个招。我写的那个就是运算时间太久了,所以想屏弃掉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 23:50 , Processed in 0.180446 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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