rodrigo_sjc_sp 发表于 2022-7-6 07:25:50

查找未闭合的多段线

如何将其与打印或警报一起列出,
“我的DWG”中未闭合的所有多段线?

Tharwat 发表于 2022-7-6 07:40:58

试试这个,它会高亮显示开放的多段线。

(defun c:test (/ ss x sn lst l)
(vl-load-com)
(if (setq
       ss (ssget "_x"
               (list '(0 . "*POLYLINE") (cons 410 (getvar 'ctab)))
          )
   )
   (repeat (setq x (sslength ss))
   (setq sn (ssname ss (setq x (1- x))))
   (if (not (vlax-curve-isclosed sn))
       (setq lst (cons sn lst))
   )
   )
)
(setq l (ssadd))
(sssetfirst nil (foreach x lst (ssadd x l)))
(princ)
)

pBe 发表于 2022-7-6 07:44:05

(defun c:hipl nil
(sssetfirst nil
(ssget "_X" '((0 . "*POLYLINE,SPLINE")
   (-4 . "<NOT")(-4 . "<OR")
   (70 . 1) (70 . 9)(70 . 129)
   (-4 . "OR>")(-4 . "NOT>")
   )
   )
)(princ)
)

BearDyugin 发表于 2022-7-6 07:54:17

如果我们采用Tharvat代码,并假设它有时不是正确闭合的多段线(相同的起点和终点),则如下所示:
(defun c:test (/ ss x sn lst l)
(vl-load-com)
(if (setq
ss (ssget "_x"
          (list '(0 . "*POLYLINE") (cons 410 (getvar 'ctab)))
   )
   )
   (repeat (setq x (sslength ss))
   (setq sn (ssname ss (setq x (1- x))))
   (if (or
    (vlax-curve-isclosed sn)
    (equal (vlax-curve-getStartPoint sn)
           (vlax-curve-getEndPoint sn)
    )
)
(ssdel sn ss)
   )
   )
)
(sssetfirst nil ss)
(princ)
)

pBe 发表于 2022-7-6 08:02:19

hmmmn让我想知道OP计划如何处理选定的PLINE
也许是这样:
 
(defun c:hipl ( / p b e)
(vl-load-com)
(if (setq p   (ssget "_X" '((0 . "*POLYLINE,SPLINE")
   (-4 . "<NOT")(-4 . "<OR")
   (70 . 1) (70 . 9)(70 . 129)
   (-4 . "OR>")(-4 . "NOT>")
   )
   )
)
(repeat (setq b (sslength p))
        (setq e (ssname p (setq b (1- b))))
                (if (equal (vlax-curve-getStartPoint e)
                   (vlax-curve-getEndPoint e))
                  (vla-put-closed (vlax-ename->vla-object e) :vlax-true)
        )
)
)
(princ)
)
 
以相同的起点和终点闭合PLINE。

Lee Mac 发表于 2022-7-6 08:08:52

(defun c:selectopenpolylines ( )
   (sssetfirst nil (ssget "_X" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&=") (70 . 1) (-4 . "NOT>"))))
   (princ)
)

gS7 发表于 2022-7-6 08:19:12



(Defun C:ChkPl(/ old_var plcntr pllen ssnme ent)
(setq old_var(Getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if (setq plset(ssget "x" '((0 . "POLYLINE"))))
   (progn
   (setq plcntr 0)
   (setq pllen(sslength plset))
   (repeat pllen
(setq ssnme(ssname plset plcntr))
(setq Ent(entget ssnme))
(if (/= (cdr (assoc 70 ent)) 9)
(Vl-Cmdf "CHPROP" ssnme "" "C" "1" "")
)
(setq plcntr(1+ plcntr))
   )
   )
(princ "\nNo POLYLINES Found in Drawing!:")
)
(setvar "CMDECHO" old_var)
(princ)
)



 
 
快乐计算

rodrigo_sjc_sp 发表于 2022-7-6 08:26:40

谢谢大家的帮助
页: [1]
查看完整版本: 查找未闭合的多段线