lisp找出表里的重复,去除重复,删除单一单独,二个半圆变整圆lsp

  • A+
所属分类:CAD二次开发 未分类

cad里面的图形有的是用别的3D软件导出来的,圆就是半圆或者多个圆弧组成,想要通过代码实现半圆变成整圆。首先我们要找到圆弧的圆心,和圆弧的半径,只要圆心和半径有两个以上是相同,就说明是半圆组成的。比如一个腰圆,或是倒角圆弧,圆弧的中心都不相同。只要把这部分过滤掉,得到的就是相同的,最后在把相同的只保留一个即可,(删除相同的即可)

下面的写好的。去除相同的和去除只有一个的


;找出表里的重复,去除重复,去除只有一个的 huojibk.com
(defun re_cfff(b0 / b2 b3 kk b0 b1 h bcc k m lstr lst_en Lst_new)
;b0 表格式(((2 5 0.0) 10.0 ) ((2 5 0.0) 10.0 ) ((12 5 0.0) 10.0 ));结果((2 5 0.0) 10.0 )
(setq k 0)
(setq bcc (length b0))
(while (> bcc k)
(setq m 0)
(setq h 0)

(setq b3 b0)
(setq B1 (nth k b0))
(while (/= kk nil)
;(setq b2(nth m b3))
(setq kk (member B1 b3))
(IF(/= kk nil)
(progn
(IF (>= h 1);去除单独的
(setq lstr(append lstr(list b1)))
)
(setq h (1+ h))
)

)
(setq b3 (cdr kk))
(setq m (1+ m))
)

(setq k (1+ K))
(setq kk 1)
)

(while lstr
(setq lst_en (nth 0 lstr)
lst_new (append lst_new (list lst_en))
lstr (vl-remove lst_en lstr));会移除与lst_en重复的元素
)
lst_new
)

复制

源码

这样就会得到一个圆心坐标和半径的表,在分别在坐标点上画圆即可。

如果还想把处理的对象选中或者删除,就在表后面加一个对象参数,如(assoc 5 ee1)

最后在通过这个值选中图元即可。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: