明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2845|回复: 13

检查线段是否断开。。。

  [复制链接]
发表于 2012-7-19 10:42 | 显示全部楼层 |阅读模式
路过高手帮看看。。。发贴好多次了。。。无人解决。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

论坛里仔细搜搜,类似问题我给过答案的!  发表于 2012-7-19 21:58
发表于 2017-8-23 22:59 | 显示全部楼层
;;;*****查悬挂线 程序开始*****
(defun C:T1 (/ ptList ptNo)
  (princ "\n★功能:查找悬挂断开的线段集\n")
  (setvar "pickadd" 1)
  (setvar "osmode" 15359)
  (setvar "PICKDRAG" 0)
  (setvar "cmdecho" 0)
                                        ;  (wdy_timeset1)
  (command "undo" "be")
  (princ "\n请选取直线、多段线、样条曲线、圆弧:")
  (if (not (setq ss (ssget '((0 . "*LINE,ARC")))))
    (progn (princ "\未选中对象。程序退出!") (exit))
  )
  (initget 6)
  (if (not (setq jd (getreal "\n输入模糊距离:<0.001>"))) (setq jd 0.001))
  (initget 1)
  (setq ptBase (getpoint "\n指定标记引出线的位置点:"))
  (command "LAYER" "M" "层标记-悬挂线" "C" "1" "层标记-悬挂线" "")
  (setvar "osmode" 0)
  (vl-load-com)
  (setq        i -1
        ptList nil
        ptNo nil
  )
  (repeat (sslength ss)
    (setq entnam  (ssname ss (setq i (1+ i)))
          obj          (vlax-ename->vla-object entnam)
          ptStart (vlax-curve-GetStartPoint obj)
          ptEnd          (vlax-curve-GetEndPoint obj)
    )
    (if        (not (vlax-curve-isclosed obj))
      (progn
        (setq ptList (cons ptStart ptList))
        (setq ptList (cons ptEnd ptList))
      )
    )
  )
  (prin1 ptList)
  (while (setq pt     (car ptList)
               ptList (cdr ptList)
         )
    (if        (wdy_cxgx_duibi pt ptList jd)
      (setq ptList (vl-remove pt ptList))
      (setq ptNo (cons pt ptNo))
    )
  )
  ;| (while (setq pt     (car ptList)
               ptList (cdr ptList)
         )
    (if        (member pt ptList)
      (setq ptList (vl-remove pt ptList))
      (setq ptNo (cons pt ptNo))
    )
  )|;                                        ;另一种写法,无精度判断,算法较差
  (if (not ptNo)
    (alert "提示:\n恭喜你!没有发现悬挂线对象。\n")
    (progn
      (foreach pt ptNo
        (command "LINE" pt ptBase "")
      )
      (alert
        "提示:\n发现了悬挂线对象!\n\n请根据“层标记-悬挂线”图层中的引出线位置点进行查看悬挂线位置点。\n"
      )
    )
  )
  (command "undo" "e")
  (setvar "osmode" 15359)
  (princ)
)

(defun wdy_cxgx_duibi (pt0 lst jd / TorF x)
  (setq TorF nil)
  (foreach x lst
    (if        (equal pt0 x jd)
      (setq TorF T)
    )
  )
  TorF
)
;;;*****查悬挂线 程序结束*****
 楼主| 发表于 2012-7-19 10:45 | 显示全部楼层
  1. (defun c:ccc()
  2.      (if (setq ssa (ssget '((0 . "LINE"))))
  3.          (progn
  4.              (setq ptb nil  i -1)
  5.              (repeat (sslength ssa)
  6.            (setq dxf (entget (ssname ssa (setq i (1+ i))))
  7.           p10 (cdr (assoc 10 dxf))
  8.           p11 (cdr (assoc 11 dxf))
  9.    ptb (cons p11 (cons p10 ptb))
  10.            )
  11.       )
  12.              (setq jgb nil fhz nil)
  13.              (while (setq pt  (car ptb)
  14.             ptb (cdr ptb)
  15.       )
  16.                  (if (member pt ptb)
  17.        (setq ptb (vl-remove pt ptb)
  18.       fhz (cons pt fhz)
  19.        )
  20.        (setq jgb (cons pt jgb))
  21.    )
  22.                
  23.       )
  24.       (mapcar '(lambda(x) (command "_circle" x 50)) jgb)
  25.    
  26.       ;变量tymlb储存刚好首尾相接直线的图元名列表
  27.       (setq tymlb nil)
  28.       (foreach pt fhz
  29.                  (setq ssa (ssget "c" pt pt '((0 . "LINE")))
  30.          i   -1
  31.    )
  32.           (repeat (sslength ssa)
  33.        (if (not (member (setq ent (ssname ssa (setq i (1+ i)))) tymlb))
  34.            (setq tymlb (cons ent tymlb))
  35.        )
  36.    )
  37.       )
  38.   )
  39.      )
  40.      (princ)
  41. )
 楼主| 发表于 2012-7-19 10:47 | 显示全部楼层
上面是论坛源吗。。只支持直线。。。
高手们帮改个对直线,圆弧,圆,多段线,样条曲线,二维三维多段线都支持的。。。
 楼主| 发表于 2012-7-19 10:53 | 显示全部楼层
  1. (defun c:ccc()
  2.      (if (setq ssa (ssget '((0 . "LINE"))))
  3.          (progn
  4.              (setq ptb nil  i -1)
  5.              (repeat (sslength ssa)
  6.            (setq dxf (entget (ssname ssa (setq i (1+ i))))
  7.           p10 (cdr (assoc 10 dxf))
  8.           p11 (cdr (assoc 11 dxf))
  9.    ptb (cons p11 (cons p10 ptb))
  10.            )
  11.       )
  12.              (setq jgb nil fhz nil)
  13.              (while (setq pt  (car ptb)
  14.             ptb (cdr ptb)
  15.       )
  16.                  (if (member pt ptb)
  17.        (setq ptb (vl-remove pt ptb)
  18.       fhz (cons pt fhz)
  19.        )
  20.        (setq jgb (cons pt jgb))
  21.    )
  22.                
  23.       )
  24.       (mapcar '(lambda(x) (command "_circle" x 50)) jgb)
  25.    
  26.       ;变量tymlb储存刚好首尾相接直线的图元名列表
  27.       (setq tymlb nil)
  28.       (foreach pt fhz
  29.                  (setq ssa (ssget "c" pt pt '((0 . "LINE")))
  30.          i   -1
  31.    )
  32.           (repeat (sslength ssa)
  33.        (if (not (member (setq ent (ssname ssa (setq i (1+ i)))) tymlb))
  34.            (setq tymlb (cons ent tymlb))
  35.        )
  36.    )
  37.       )
  38.   )
  39.      )
  40.      (princ)
  41. )
 楼主| 发表于 2012-7-19 10:54 | 显示全部楼层
这是论坛另一源码。。。都只支持直线
 楼主| 发表于 2012-7-19 10:55 | 显示全部楼层
 楼主| 发表于 2012-7-19 10:56 | 显示全部楼层
在线等。。。难道只有悬赏贴有人回复。。。解决吗。。。
发表于 2012-7-19 11:21 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2012-7-19 11:27 编辑

楼主要求不明,难怪无人回答。是不是想检查线、弧是否围成了封闭图形?
(> (sslength (ssget "c" pt pt '((0 . "*LINE,ARC"))) 1)
;;pt为端点
发表于 2012-7-19 12:45 | 显示全部楼层
去下载个燕秀,有这功能
 楼主| 发表于 2012-7-28 14:04 | 显示全部楼层
自贡黄明儒 发表于 2012-7-19 11:21
楼主要求不明,难怪无人回答。是不是想检查线、弧是否围成了封闭图形?
(> (sslength (ssget "c" pt pt '( ...

你仔细看要求了吗。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 16:58 , Processed in 0.192686 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表