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位小数限定精度