[求助]删除列表中的相同元素LstDelSame没作用?[自己解决了]
本帖最后由 作者 于 2007-12-2 9:41:51 编辑 <br /><br /> <p>;;;----通用函数-----<br/>;;选择集->图元名表<br/>(defun ss->elst (ss / elst)<br/> (setq i 0)<br/> (repeat (sslength ss)<br/> (setq elst (cons (ssname ss i) elst)<br/> i (1+ i)<br/> )<br/> )<br/> (reverse elst)<br/>)</p><p>;;;删除列表中的相同元素(保留一个)并返回新表<br/>(defun LstDelSame (lst / x nl)<br/> (foreach x lst<br/> (if (not (member x nl))<br/> (setq nl (cons x nl))<br/> )<br/> )<br/> (setq nl (reverse nl))<br/> nl<br/>)</p><p>(defun c:tt (/ ELST O1 O2 P PLST PLST0 SS)<br/> (princ "\n选择所有的交线.")<br/> (setq ss (ssget (list (cons 0 "*POLYLINE,LINE"))))<br/> (setq elst (ss->elst ss))<br/> (foreach e elst<br/> (setq o1 (vlax-ename->vla-object e))<br/> (foreach e elst<br/> (setq o2 (vlax-ename->vla-object e))<br/> (setq p (vlax-invoke o1 'intersectwith o2 acextendnone))<br/> (setq plst0 (cons p plst0))<br/> )<br/> )<br/> (setq plst2 (vl-remove nil (LstDelSame plst0)))<br/>)</p><p><font color="#f70909">得到((29.0888 21.4991 0.0) (33.789 15.9458 0.0) (29.0888 21.4991 0.0) <br/>(33.789 15.9458 0.0))</font></p><p><font color="#f70909">得到的任意线的交点表,是有重复的点. LstDelSame 没作用...</font></p><p>----------------------------------------------------------------------------------------------------------</p><p><font color="#2222dd">可是:</font></p><p><font color="#2222dd">(LstDelSame '((29.0888 21.4991 0.0) (33.789 15.9458 0.0) (29.0888 21.4991 0.0) <br/>(33.789 15.9458 0.0)))</font></p><p><font color="#2222dd">得到((29.0888 21.4991 0.0) (33.789 15.9458 0.0)) 又是对的....</font></p><p><font color="#2222dd">(setq aaa '((29.0888 21.4991 0.0) (33.789 15.9458 0.0) (29.0888 21.4991 0.0) <br/>(33.789 15.9458 0.0)))</font></p><p><font color="#2222dd">(LstDelSame aaa)</font></p><p><font color="#2222dd">得到((29.0888 21.4991 0.0) (33.789 15.9458 0.0)) 也是对的....</font></p><p><br/></p><p></p><p></p> <p>直接输入当然对了。</p><p></p><p><font color="#f70909">得到((29.0888 21.4991 0.0) (33.789 15.9458 0.0) (29.0888 21.4991 0.0) <br/>(33.789 15.9458 0.0))</font></p><p><font color="#f70909">得到的任意线的交点表,是有重复的点. LstDelSame 没作用...</font></p><p><font color="#f70909">-》因为有微小误差,可能是点本身误差,也可能是浮点误差。如果不是完全相等,member是不起作用的。</font></p><p><font color="#f70909">虽然显示是(29.0888 21.4991 0.0) ,但可能是29.08883 只是cad显示不全,并不说明完全相等。</font></p><p><font color="#f70909">建议用equal,设定误差范围。</font><br/></p> <p><font color="#000000">equal,版主说的,我想过了...</font></p><p><font color="#000000">可是脑子转不过弯来...</font></p><p><font color="#000000">那个坦白说,不会写...版主能直接帮忙把</font></p><p><a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=64501">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=64501</a></p><p>这个主题的问题解决一下...谢谢....</p><p></p> 我也是这个问题,楼主解决了吗,重复的点干不掉啊 (defun qly (point-list )(setq new-list nil)
(foreach point point-list
(setq found nil)
(foreach new-point new-list
(if (< (distance point new-point) 1)
(setq found t)
)
)
(if (not found)
(setq new-list (cons point new-list))
)
)
(reverse new-list)
)
页:
[1]