carrot1983 发表于 2007-11-30 18:09:00

[求助]删除列表中的相同元素LstDelSame没作用?[自己解决了]

本帖最后由 作者 于 2007-12-2 9:41:51 编辑 <br /><br /> <p>;;;----通用函数-----<br/>;;选择集-&gt;图元名表<br/>(defun ss-&gt;elst&nbsp;(ss / elst)<br/>&nbsp; (setq i 0)<br/>&nbsp; (repeat (sslength ss)<br/>&nbsp;&nbsp;&nbsp; (setq elst (cons (ssname ss i) elst)<br/>&nbsp;&nbsp; i&nbsp;&nbsp;&nbsp; (1+ i)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (reverse elst)<br/>)</p><p>;;;删除列表中的相同元素(保留一个)并返回新表<br/>(defun LstDelSame (lst / x nl)<br/>&nbsp; (foreach x lst<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;(not (member x nl))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq nl (cons x nl))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (setq nl (reverse nl))<br/>&nbsp; nl<br/>)</p><p>(defun c:tt (/ ELST O1 O2 P PLST PLST0 SS)<br/>&nbsp; (princ "\n选择所有的交线.")<br/>&nbsp; (setq ss (ssget (list (cons 0 "*POLYLINE,LINE"))))<br/>&nbsp; (setq elst (ss-&gt;elst ss))<br/>&nbsp; (foreach e elst<br/>&nbsp;&nbsp;&nbsp; (setq o1 (vlax-ename-&gt;vla-object e))<br/>&nbsp;&nbsp;&nbsp; (foreach e elst<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq o2 (vlax-ename-&gt;vla-object e))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p (vlax-invoke o1 'intersectwith o2 acextendnone))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq plst0 (cons p plst0))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (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>

无痕 发表于 2007-11-30 18:44:00

<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>

carrot1983 发表于 2007-12-1 09:33:00

<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>

183017064 发表于 2024-12-2 11:00:25

我也是这个问题,楼主解决了吗,重复的点干不掉啊

183017064 发表于 2024-12-2 15:42:12

(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]
查看完整版本: [求助]删除列表中的相同元素LstDelSame没作用?[自己解决了]