找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1035|回复: 1

[求助] [求助]:请高手看一下这个消重实体的问题是什么,

[复制链接]
发表于 2006-7-30 22:48:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
可否改成带误差消重,


  1. (defun c:Xcst        (/        ss     smx    e             el            el0           n
  2.                  n1        n2     i      i1     stl    st1           st2
  3.                  name        la     p      ln     ln2    le           le1
  4.                  lp        3dface attdef arc    circle dimension
  5.                  insert        line   lwpolyline    point  polyline
  6.                  solid        text   trace tt
  7.                 )
  8.   (vl-load-com)
  9.   (setq tt 0)
  10.   (if (and (= tt 0)
  11.            (princ "\n选择要进行重叠处理的实体<全部>: ")
  12.            (if (null (setq ss (ssget)))
  13.              (setq ss (ssget "x"))
  14.              ss
  15.            )
  16.       )
  17.     (progn (setq st1 (strcat "\r已搜索到实体 ")
  18.                  st2 (strcat "\r已处理实体 ")
  19.                  n   0
  20.                  n1  0
  21.                  n2  0
  22.                  i   0
  23.                  smx (sslength ss)
  24.                  ln  '(3dface         attdef           arc             circle
  25.                        dimension insert           line             lwpolyline
  26.                        point         solid           text             ;trace
  27.                       )
  28.            )
  29.            (while (< n smx)
  30.              (setq e        (ssname ss n)
  31.                    n        (1+ n)
  32.                    la        (tc-dxf e 8);取得图层
  33.                    name        (tc-dxf e 0);取得类型
  34.                    p        (cond ((= "POLYLINE" name) (tc-dxf (entnext e) 10));如果是多义线则取得顶点
  35.                               ((= "LWPOLYLINE" name) (car (tc-dxf e 10)));如果是轻装多义线则取得顶点
  36.                               (t (tc-dxf e 10))
  37.                         )
  38.                    name        (read name)
  39.                    la        (strcat la (rtos (car p) 2 0) (rtos (cadr p) 2 0))
  40.                    le        (assoc la (eval name))
  41.              )
  42.              (set name
  43.                   (if le
  44.                     (subst (append le (list e)) le (eval name))
  45.                     (cons (list la e) (eval name))
  46.                   )
  47.              )
  48.              (if (= 127 (logand 127 n))
  49.                (princ (strcat st1 (itoa n)))
  50.              )
  51.            )
  52.            (princ (strcat st1 (itoa n) "\n"))
  53.            (foreach ln1        ln
  54.              (setq ln2 (eval ln1))
  55.              (foreach le ln2
  56.                (setq le (cdr le))
  57.                (while (setq e (car le))
  58.                  (if (setq n1 (1+ n1)
  59.                            le (cdr le)
  60.                      )
  61.                    (progn (setq        el0 (entget e)
  62.                                 el0 (member (assoc 10 el0) el0)
  63.                                 le1 nil
  64.                           )
  65.                           (foreach e le
  66.                             (setq el (entget e)
  67.                                   el (member (assoc 10 el) el)
  68.                             )
  69.                             (if        (equal el el0)
  70.                               (progn (entdel e)
  71.                                      (setq n1 (1+ n1)
  72.                                            n2 (1+ n2)
  73.                                      )
  74.                               )
  75.                               (setq le1 (cons e le1))
  76.                             )
  77.                           )
  78.                           (setq le le1)
  79.                    )
  80.                  )
  81.                )
  82.                (if (> i 100)
  83.                  (progn (princ (strcat st2 (itoa n1))) (setq i 0))
  84.                  (setq i (1+ i))
  85.                )
  86.              )
  87.            )
  88.            (foreach le polyline
  89.              (setq le (cdr le))
  90.              (while (setq e (car le))
  91.                (if (setq n1 (1+ n1)
  92.                          le (cdr le)
  93.                    )
  94.                  (progn        (setq lp  nil
  95.                               le1 nil
  96.                         )
  97.                         (while (setq e (entnext e)
  98.                                      p (tc-dxf e 10)
  99.                                )
  100.                           (setq lp (cons p lp))
  101.                         )
  102.                         (setq lp (reverse lp))
  103.                         (foreach e le
  104.                           (setq i1 0)
  105.                           (while (and (setq e (entnext e)
  106.                                             p (tc-dxf e 10)
  107.                                       )
  108.                                       (equal p (nth i1 lp))
  109.                                  )
  110.                             (setq i1 (1+ i1))
  111.                           )
  112.                           (if p
  113.                             (setq le1 (cons e le1))
  114.                             (progn (entdel e)
  115.                                    (setq n1 (1+ n1)
  116.                                          n2 (1+ n2)
  117.                                    )
  118.                             )
  119.                           )
  120.                         )
  121.                         (setq le le1)
  122.                  )
  123.                )
  124.              )
  125.              (if (> i 100)
  126.                (progn (princ (strcat st2 (itoa n1))) (setq i 0))
  127.                (setq i (1+ i))
  128.              )
  129.            )
  130.            (princ (strcat st2 (itoa n1)))
  131.            (princ
  132.              (strcat "\n已消去实体 " (itoa n2) ", 还剩 " (itoa (- n n2)))
  133.            )
  134.            (redraw)
  135.     )
  136.   )
  137. )
  138. (DEFUN TC-DXF (ELIST CODE)
  139.   (CDR (ASSOC CODE (ENTGET ELIST)))
  140. ) ;_ 结束defun
  141. ;;;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-8-6 13:05:29 | 显示全部楼层
老兄真是高人啊!程序真的很不错
程序太长我功力不够啦!看的晕啊
可不可以多分子程序多写点注释啊?多谢多谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 15:15 , Processed in 0.179618 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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