Hangman 发表于 2022-7-6 11:19:11

查找零长度PLine。。

嘿伙计们,
你会如何过滤掉并找到一条零长度的pline??
 
我有几张从Microstation转换过来的图纸,当我运行Eduard的“FLAT.lsp”来展平这个东西时,我得到了一个约25.563245e27的零长度PLine。。。距离很远,我的画在黑屏上变成了两个点。
 
我想在末尾添加一段代码,简单地过滤掉并找到一条愚蠢的零长度pline,然后删除它。
 
任何帮助都将不胜感激。谢谢

Lee Mac 发表于 2022-7-6 11:38:38

也许是类似的?
 

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

alanjt 发表于 2022-7-6 11:49:00


直到我编写了这个代码,我才想到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)
)

alanjt 发表于 2022-7-6 11:58:02

英雄联盟
李,我看到我们用同样的方法进行过滤,以避免转换为vla对象。

Hangman 发表于 2022-7-6 11:59:49

这很有趣,艾伦。。。DXF代码(90.2)指的是什么??
除了32位整数之外,我找不到任何关于这个的东西。
我的PLine DXF代码读取(90.22)?。?
 
我喜欢你们的想法如此相似,但又如此不同。我只希望我已经知道你们知道的一半,我就不必那么烦你们了。

alanjt 发表于 2022-7-6 12:15:31

dxf代码90是它包含的点数。即使是长度为零的LWMOLYLINE也会有2个点。我只是想从一开始就忽略所有超过1段的LW多段线,只是为了让事情更快一点。
 
我只知道我知道的,因为我问了很多问题。唯一糟糕的问题是那些未被问到的问题。

alanjt 发表于 2022-7-6 12:27:27

我知道一条PLine可以有多个线段,长度为零,但创建此类对象时,它们是单线段,长度为零的对象。这是我添加过滤器的唯一原因。然而,它很容易被移除。
页: [1]
查看完整版本: 查找零长度PLine。。