明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: qinleilei

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

[复制链接]
 楼主| 发表于 2016-7-20 08:09:40 | 显示全部楼层
陨落 发表于 2016-7-19 22:21
还可以优化,可以再缩短大概一半的运行时间

怎么优化? 大师帮忙支个招。我写的那个就是运算时间太久了,所以想屏弃掉
 楼主| 发表于 2016-7-20 09:30:50 | 显示全部楼层
kozmosovia 发表于 2016-7-19 13:59
(Defun _Filter(ss)
(setq i -1)
(repeat (sslength ss)


返回的表就真的没有发现怎么区分同心圆的。大师麻烦你帮我看看


本帖子中包含更多资源

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

x
发表于 2016-7-20 11:20:12 | 显示全部楼层
之前的代码直接在论坛里打的。这个直接返回非同心圆的选择集

  1. (Defun _Filter (ss / I RTN S10 SN VAL SS1)
  2.   (setq i -1)
  3.   (repeat (sslength ss)
  4.     (setq sn  (ssname ss (setq i (1+ i)))
  5.           s10 (vl-prin1-to-string (cdr (assoc 10 (entget sn))))
  6.     )
  7.     (if        (null (setq val (cdr (assoc s10 rtn))))
  8.       (setq rtn (cons (list s10 sn) rtn))
  9.       (setq rtn (subst (cons s10 (cons sn val)) (assoc s10 rtn) rtn))
  10.     )
  11.   )
  12.   (setq        rtn (mapcar 'cdr rtn)
  13.         rtn (vl-remove-if '(lambda (x) (cdr x)) rtn)
  14.         rtn (mapcar 'car rtn)
  15.         ss1 (ssadd)
  16.   )
  17.   (mapcar '(lambda (x) (ssadd x ss1)) rtn)
  18.   ss1
  19. )

点评

很给力! 太感谢大师了!  发表于 2016-7-20 13:27

评分

参与人数 1明经币 +1 收起 理由
qinleilei + 1 赞一个!

查看全部评分

 楼主| 发表于 2016-7-20 18:21:14 | 显示全部楼层
kozmosovia 发表于 2016-7-20 11:20
之前的代码直接在论坛里打的。这个直接返回非同心圆的选择集

这个要怎么给圆心坐标加个容差值呢?忽略Z坐标值
发表于 2016-7-20 20:56:30 | 显示全部楼层
(setq sn  (ssname ss (setq i (1+ i)))
           s10  (cdr (assoc 10 (entget sn)))
           s10  (list (car s10)(cadr s10))
           s10 (vl-prin1-to-string s10)
    )
 楼主| 发表于 2016-7-20 21:14:35 | 显示全部楼层
kozmosovia 发表于 2016-7-20 20:56
(setq sn  (ssname ss (setq i (1+ i)))
           s10  (cdr (assoc 10 (entget sn)))
           s10  ...

你这个只是忽略了Z坐标值,并没有加容差呀
,我的意思是2个圆 坐标值在容差之内,就默认它是同心园
发表于 2016-7-21 08:37:34 | 显示全部楼层
你自己将圆心XY坐标数字转成容差需要的字符串即可。原理一样
发表于 2016-7-21 17:45:12 | 显示全部楼层
本帖最后由 llsheng_73 于 2016-7-24 21:58 编辑

  1. (defun tt(n f / e p s i l)
  2.   (if(setq i 0 f(if f'(1 1 1)'(1 1))s(ssget'((0 . "CIrcle"))))
  3.     (progn
  4.       (repeat(sslength s)
  5.         (setq e(ssname s i)
  6.               p(mapcar'(lambda(x)(rtos x 2 n))(mapcar'*(cdr(assoc 10(entget e)))f))
  7.               l(cons(list p e)l)i(1+ i)))
  8.       (mapcar'(lambda(x)(if(assoc(car x)(vl-remove x l))(setq s(ssdel(cadr x)s))))l)
  9.      s)))


(TT 3 T);;考虑圆心高程,用3位小数限定精度
(TT 5 nil);;忽略圆心高程,用5位小数限定精度

回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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