qinleilei 发表于 2016-7-20 08:09:40

陨落 发表于 2016-7-19 22:21 static/image/common/back.gif
还可以优化,可以再缩短大概一半的运行时间

怎么优化? 大师帮忙支个招。我写的那个就是运算时间太久了,所以想屏弃掉

qinleilei 发表于 2016-7-20 09:30:50

kozmosovia 发表于 2016-7-19 13:59 static/image/common/back.gif
(Defun _Filter(ss)
(setq i -1)
(repeat (sslength ss)



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


kozmosovia 发表于 2016-7-20 11:20:12

之前的代码直接在论坛里打的。这个直接返回非同心圆的选择集
(Defun _Filter (ss / I RTN S10 SN VAL SS1)
(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 s10 sn) rtn))
      (setq rtn (subst (cons s10 (cons sn val)) (assoc s10 rtn) rtn))
    )
)
(setq        rtn (mapcar 'cdr rtn)
        rtn (vl-remove-if '(lambda (x) (cdr x)) rtn)
        rtn (mapcar 'car rtn)
        ss1 (ssadd)
)
(mapcar '(lambda (x) (ssadd x ss1)) rtn)
ss1
)

qinleilei 发表于 2016-7-20 18:21:14

kozmosovia 发表于 2016-7-20 11:20 static/image/common/back.gif
之前的代码直接在论坛里打的。这个直接返回非同心圆的选择集

这个要怎么给圆心坐标加个容差值呢?忽略Z坐标值

kozmosovia 发表于 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)
    )

qinleilei 发表于 2016-7-20 21:14:35

kozmosovia 发表于 2016-7-20 20:56 static/image/common/back.gif
(setq sn(ssname ss (setq i (1+ i)))
         s10(cdr (assoc 10 (entget sn)))
         s10...

你这个只是忽略了Z坐标值,并没有加容差呀
,我的意思是2个圆 坐标值在容差之内,就默认它是同心园

kozmosovia 发表于 2016-7-21 08:37:34

你自己将圆心XY坐标数字转成容差需要的字符串即可。原理一样

llsheng_73 发表于 2016-7-21 17:45:12

本帖最后由 llsheng_73 于 2016-7-24 21:58 编辑

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

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

页: 1 2 [3]
查看完整版本: 如何在圆选择集中高效的分离出同心圆