xskfq 发表于 2013-11-26 21:34:14

如何检查直线是否断开(寻找开口)

效果如图:检查出孤立端点并标记,如果孤立的端点在园内,则不用标记。谁能帮帮忙,不甚感激!

cable2004 发表于 2013-11-26 21:52:54

本帖最后由 cable2004 于 2013-11-27 10:51 编辑



(defun c:tt ( / a c1 ent ent1 i p1 p2 r1 ss sslast x1)
(setq sslast (ssadd))
(if (setq ss (ssget '((0 . "LINE"))))
    (progn
      (setq i -1)
      (repeat (sslength ss)
(setq ent (entget (ssname ss (setq i (1+ i))))
       p1 (cdr (assoc 10 ent))
       p2 (cdr (assoc 11 ent))
       x1 (ssget "C" p1 p2 '((0 . "CIRCLE")))
)
(if x1
   (if (= (sslength (ssget "C" p1 p1)) 1)
   (foreach a (vl-remove-if 'listp (mapcar
         'cadr
         (ssnamex x1)
         )
         )
       (setq ent1 (entget a)
      c1 (cdr (assoc 10 ent1))
      r1 (cdr (assoc 40 ent1))
       )
       (if (> (distance p1 c1) r1)
(progn
    (command "CIRCLE" p1 10)
    (ssadd (entlast) sslast)
)
       )
   )
   )
   (if (= (sslength (ssget "C" p1 p1)) 1)
   (progn
       (command "CIRCLE" p1 10)
       (ssadd (entlast) sslast)
   )
   )
)
(if x1
   (if (= (sslength (ssget "C" p2 p2)) 1)
   (foreach a (vl-remove-if 'listp (mapcar
         'cadr
         (ssnamex x1)
         )
         )
       (setq ent1 (entget a)
      c1 (cdr (assoc 10 ent1))
      r1 (cdr (assoc 40 ent1))
       )
       (if (> (distance p2 c1) r1)
(progn
    (command "CIRCLE" p2 10)
    (ssadd (entlast) sslast)
)
       )
   )
   )
   (if (= (sslength (ssget "C" p2 p2)) 1)
   (progn
       (command "CIRCLE" p2 10)
       (ssadd (entlast) sslast)
   )
   )
)
      )
    )
)
(sssetfirst nil sslast)
(princ)
)

xiabin68 发表于 2013-11-26 22:01:56

查悬挂点,,楼主是不是同行哦?

flyfox1047 发表于 2013-11-26 22:33:21

燕秀有这种功能

ZZXXQQ 发表于 2013-11-26 22:42:47

本帖最后由 ZZXXQQ 于 2013-11-27 22:07 编辑

(defun c:tt ()
(if (setq ss (ssget '((0 . "LINE")))) (progn
(setq i -1)
(repeat (sslength ss)
   (setq ent (entget(ssname ss (setq i (1+ i))))
       p1 (cdr(assoc 10 ent))
       p2 (cdr(assoc 11 ent)))
   (if (= (sslength(ssget "C" p1 p1)) 1)
    (command "CIRCLE" p1 10)
   )
   (if (= (sslength(ssget "C" p2 p2)) 1)
    (command "CIRCLE" p2 10)
   )
)
))
(princ)
)

flyfox1047 发表于 2013-11-26 22:54:00

ZZXXQQ 发表于 2013-11-26 22:42 static/image/common/back.gif


no function definition: SSETQ

xskfq 发表于 2013-11-26 23:12:03

ZZXXQQ 发表于 2013-11-26 22:42 static/image/common/back.gif


; 错误: no function definition: SSETQ

xskfq 发表于 2013-11-26 23:15:48

Z版主,再帮看看,谢谢!

xskfq 发表于 2013-11-26 23:17:55

flyfox1047 发表于 2013-11-26 22:33 static/image/common/back.gif
燕秀有这种功能

恩,,,,,,,,,,,

cable2004 发表于 2013-11-26 23:19:13

改成试试(= (sslength(ssget "C" p1 p1)) 1)
页: [1] 2 3 4
查看完整版本: 如何检查直线是否断开(寻找开口)