ysq101 发表于 2015-1-12 14:59:01

如何将下面程序改了删除同心圆的大圆 留住小圆

如何将下面程序改了删除同心圆的大圆   留住小圆
能力有限,实在读不懂了
望大师出手
国际惯例    原作者为YOYOHO;;;同心圆删除大圆保留最小的圆 O.K.
(defun c:cd (/ ss nss en ent cnt st1 st2 )
(setq ss1 (ssadd))
(if (setq ss (ssget '((0 . "CIRCLE"))))
    (progn
      (repeat (setq nss (sslength ss))
      (setq en(ssname ss (setq nss (1- nss)))
            ent (entget en)
            cnt (cdr (assoc 10 ent))
            r      (vl-catch-all-apply
                  '(lambda ()
                     (foreach    p st1
                         (if (equal cnt p 1e-6)
                           (exit)
                         )
                     )
                     )
                  )
      )
      (if    (not (vl-catch-all-error-p r))
                (setq    st1 (cons cnt st1)
                st2 (cons (cdr (assoc 10 ent)) st2))
               (PROGN
               (ssadd en ss1)
               (vla-Delete (vlax-ename->vla-object en))
               )
      )

      )
      
    )

)
(alert (strcat "已删除" (rtos (- (sslength ss1) nss))"个同心圆"))
(reverse st2)
)

mmmmmm 发表于 2015-1-12 16:27:37

(defun c:cdx ( / CNT DATA EN HDL HHH IDX II RRR SS)
(if (setq ii -1
          ss (ssget '((0 . "CIRCLE")))
      )
    (repeat (sslength ss)
      (setq en        (ssname ss (setq ii (1+ ii)))
          hdl        (cdr (assoc 5 (entget en)))
          cnt        (cdr (assoc 10 (entget en)))
          rrr        (cdr (assoc 40 (entget en)))
          idx        (strcat (rtos (car cnt) 2 3) "#" (rtos (cadr cnt) 2 3))
      )
      (if (null (setq hhh (cdr (assoc idx data))))
        (setq data (cons (cons idx hdl) data))
        (if (> (cdr (assoc 40 (entget (handent hhh))))
             rrr
          )
          (setq        hhh(entdel (handent hhh))
                data (subst (cons idx hdl) (assoc idx data) data)
          )
          (entdel en)
        )
      )
    )
)
)

shopping200 发表于 2017-12-27 14:36:41

mmmmmm 发表于 2015-1-12 16:27
(defun c:cdx ( / CNT DATA EN HDL HHH IDX II RRR SS)
(if (setq ii -1
          ss (ssget '((0 . "CIRCL ...

非常好用。但我只需筛选出同心大圆,不删除只高亮识别出来,改怎么改呢?谢谢

ysq101 发表于 2015-1-12 14:59:38

说明为   删除同心圆的大圆   留住小圆
实际刚好相反

ysq101 发表于 2015-1-12 15:03:45

汗。。实测中。。。还是随机删大或删小圆的

ysq101 发表于 2015-1-12 17:02:30

mmmmmm 发表于 2015-1-12 16:27 static/image/common/back.gif
(defun c:cdx ( / CNT DATA EN HDL HHH IDX II RRR SS)
(if (setq ii -1
          ss (ssget '((0 . "CIRCL ...

非常给力。。。可以批量。。
顶一个

ysq101 发表于 2015-1-12 17:41:29

mmmmmm 发表于 2015-1-12 16:27 static/image/common/back.gif
(defun c:cdx ( / CNT DATA EN HDL HHH IDX II RRR SS)
(if (setq ii -1
          ss (ssget '((0 . "CIRCL ...

刚优化好。。。极好的程序   
可以加个同心容差就好了。。有时会差0。02--0。05

ysq101 发表于 2015-1-12 18:07:51

mmmmmm 发表于 2015-1-12 16:27 static/image/common/back.gif
(defun c:cdx ( / CNT DATA EN HDL HHH IDX II RRR SS)
(if (setq ii -1
          ss (ssget '((0 . "CIRCL ...

解读了半天还是不得要领
为什么要用到句柄??
具体思是怎么样的??
大神能给讲解一下吗?

llsheng_73 发表于 2015-1-12 21:19:03

本帖最后由 llsheng_73 于 2015-1-12 21:28 编辑

ysq101 发表于 2015-1-12 14:59 http://bbs.mjtd.com/static/image/common/back.gif
说明为   删除同心圆的大圆   留住小圆
实际刚好相反

(defun SstoEs(ss / a en lst)
(if ss(progn(setq a -1)
         (while(setq en(ssname ss(setq a(1+ a))))
         (setq lst(cons en lst)))))
lst)
(defun subtotals(lst m ns / myfun a b c)
(cond((=(type ns)'LIST)(defun myfun(x)(list(mapcar'(lambda(y)(nth y x))ns))))
       ((=(type ns)'INT)(defun myfun(x)(list(nth ns x))))
       (t(defun myfun(x)(list(vl-remove c x)))))
(foreach x lst
    (setq a(if(setq c(nth m x)b(assoc c a))
       (subst(append b(myfun x))b a)
       (append a(list(append(list c)(myfun x))))))))
(defun c:tt()
(foreach x(mapcar'(lambda(x)(vl-sort(cdr x)'(lambda(a b)(<(car a)(car b)))))
                   (subtotals(mapcar'(lambda(x)(setq e(entget x))(list(cdr(assoc 40 e))(cdr(assoc 10 e))x))(sstoes(ssget'((0 . "circle")))))1'nil))
    (foreach y(cdr x)
      (entdel(last y))))
)
容差没加上,那个得改造分类程序subtotals
嵌套表分类统计http://bbs.mjtd.com/forum.php?mo ... 9843&fromuid=202795

ysq101 发表于 2015-1-13 11:04:37

llsheng_73 发表于 2015-1-12 21:19 static/image/common/back.gif
容差没加上,那个得改造分类程序subtotals
嵌套表分类统计http://bbs.mjtd.com/forum.php?mo ... 98 ...

这个也很好。。。网址为什么不是贴子??是不是发错了?
有空再解读一下

ysq101 发表于 2015-1-13 11:07:41

llsheng_73 发表于 2015-1-12 21:19 static/image/common/back.gif
容差没加上,那个得改造分类程序subtotals
嵌套表分类统计http://bbs.mjtd.com/forum.php?mo ... 98 ...

哈哈。。。搜索subtotals就出来了。。。果然是网址不对
页: [1] 2
查看完整版本: 如何将下面程序改了删除同心圆的大圆 留住小圆