查找零长度PLine。。
嘿伙计们,你会如何过滤掉并找到一条零长度的pline??
我有几张从Microstation转换过来的图纸,当我运行Eduard的“FLAT.lsp”来展平这个东西时,我得到了一个约25.563245e27的零长度PLine。。。距离很远,我的画在黑屏上变成了两个点。
我想在末尾添加一段代码,简单地过滤掉并找到一条愚蠢的零长度pline,然后删除它。
任何帮助都将不胜感激。谢谢 也许是类似的?
(defun c:FindZeroLengthPlines ( / i ss e zro )
(if (setq i -1 zro (ssadd) ss (ssget "_X" '((0 . "LWPOLYLINE"))))
(while (setq e (ssname ss (setq i (1+ i))))
(and (equal 0.0 (vlax-curve-getDistatParam e
(vlax-curve-getEndParam e)) 1e-14)
(ssadd e zro))))
(sssetfirst nil zro)
(princ))
直到我编写了这个代码,我才想到QSelect,我注意到李已经做了一个,但由于我花了时间,我还是会发布它。
(defun c:SZP (/ ss)
;; Select Zero Length LWPolylines
;; Alan J. Thompson, 04.26.10
(if (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (90 . 2))))
((lambda (i ss2)
(while (setq e (ssname ss (setq i (1+ i))))
(or (> (vlax-curve-GetDistAtParam e (vlax-curve-GetEndParam e)) 0.)
(ssadd e ss2)
)
)
(and (sssetfirst nil ss2)
(princ (strcat "\n" (itoa (sslength ss2)) " zero length LWPolyline(s) selected."))
)
)
-1
(ssadd)
)
)
(princ)
) 英雄联盟
李,我看到我们用同样的方法进行过滤,以避免转换为vla对象。 这很有趣,艾伦。。。DXF代码(90.2)指的是什么??
除了32位整数之外,我找不到任何关于这个的东西。
我的PLine DXF代码读取(90.22)?。?
我喜欢你们的想法如此相似,但又如此不同。我只希望我已经知道你们知道的一半,我就不必那么烦你们了。 dxf代码90是它包含的点数。即使是长度为零的LWMOLYLINE也会有2个点。我只是想从一开始就忽略所有超过1段的LW多段线,只是为了让事情更快一点。
我只知道我知道的,因为我问了很多问题。唯一糟糕的问题是那些未被问到的问题。 我知道一条PLine可以有多个线段,长度为零,但创建此类对象时,它们是单线段,长度为零的对象。这是我添加过滤器的唯一原因。然而,它很容易被移除。
页:
[1]