找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1338|回复: 5

[LISP程序]:统计图元个数(位置相同的多个同种图元只计一个)

[复制链接]

已领礼包: 934个

财富等级: 财运亨通

发表于 2009-5-10 02:24:14 | 显示全部楼层 |阅读模式

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

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

×
(DEFUN C:tbCount (/ Main Unique fuzz)
  (defun Main (/ tmp el SS en enType acme1 acme2 ids1 ids2 lst SSet)
    (setq SS   (TBC:GetEnts
                 '((0 . "CIRCLE,INSERT,LINE,LWPOLYLINE,TEXT,MTEXT"))
               )
          SSet (ssadd)
          fuzz 0.01 ;指定位置坐标点的误差
    )
    (foreach el        SS
      (setq en           (entget el)
            enType (TBC:DXF 0 en)
            acme1  nil
            acme2  nil
      )
      (cond ((= enType "CIRCLE")
             (setq ids1        '(0 40)
                   ids2        '(10)
             )
            )
            ((= enType "INSERT")
             (setq ids1        '(0 2 41 42 43 44 45 50 66 70 71)
                   ids2        '(10)
             )
            )
            ((= enType "LINE")
             (setq ids1        '(0)
                   ids2        '(10 11)
             )
            )
            ((= enType "LWPOLYLINE")
             (setq ids1         '(0 43 70 90)
                   ids2         '()
                   acme1 '(40 41 42)
                   acme2 '(10)
             )
            )
            ((= enType "TEXT")
             (setq ids1        '(0 1 7 40 50 51 71 72 73)
                   ids2        '(10 11)
             )
            )
            ((= enType "MTEXT")
             (setq ids1        '(0 1 7 40 41 42 43 44 50 71 72 73)
                   ids2        '(10 11)
             )
            )
      )
      (setq ids1 (TBC:DXFS ids1 en)
            ids1 (append ids1 (mapcar '(lambda (x) (TBC:mDXF x en)) acme1))
            ids2 (TBC:DXFS ids2 en)
            ids2 (append ids2 (mapcar '(lambda (x) (TBC:mDXF x en)) acme2))
            tmp         (list ids1 ids2)
      )
      (if (Unique tmp lst)
        (setq SSet (ssadd el SSet)
              lst  (append lst (list tmp))
        )
      )
    )
    (sssetfirst nil SSet)
    (TBC:Command '("regen") nil)
    (princ)
  )

  (defun Unique (el lst / a b)
    (setq a (car el)
          b (cadr el)
    )
    (if        lst
      (vl-every
        '(lambda (x)
           (not (and (equal a (car x)) (equal b (cadr x) fuzz)))
         )
        lst
      )
      T
    )
  )

  (Main)
)

  ;选择指定过滤条件的实体名表
(defun TBC:GetEnts (filter / i n SSET enName RSET)
  (setq        SSET (ssget filter)
        n    (if SSET
               (sslength SSET)
               0
             )
        i    0
  )
  (while (< i n)
    (setq enName (ssname SSET i)
          RSET         (cons enName RSET)
          i         (1+ i)
    )
  )
  (reverse RSET)
)

  ;取出表中的元素值
(defun TBC:DXF (code lst)
  (cdr (assoc code lst))
)

  ;取出表中的同一代码的多个元素值
(defun TBC:mDXF        (code en / tmp i lst)
  (setq i 0)
  (while (setq i (TBC:FindAt code en i))
    (setq tmp (cdr (nth i en))
          i   (1+ i)
          lst (append lst (list tmp))
    )
  )
  lst
)

  ;执行Command函数
(defun TBC:Command (paralist varlist / tmp i n el oldvar)
  (setq        varlist        (append varlist (list (list "CMDECHO" 0)))
        n        (length varlist)
        i        0
  )
  (while (< i n)
    (setq el         (nth i varlist)
          tmp         (list (getvar (car el)))
          oldvar (append oldvar tmp)
          i         (1+ i)
    )
    (setvar (car el) (cadr el))
  )
  (foreach el paralist (command el))
  (setq i 0)
  (while (< i n)
    (setq el  (nth i varlist)
          tmp (nth i oldvar)
          i   (1+ i)
    )
    (setvar (car el) tmp)
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-4-4 05:02:49 来自手机 | 显示全部楼层
用不了…………………
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-4 18:27:50 来自手机 | 显示全部楼层
高手们都哪去了……………
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-7 00:21:48 来自手机 | 显示全部楼层
看来往日不复存在
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-4-7 08:14:30 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-27 09:25:37 | 显示全部楼层
喜欢!呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 16:35 , Processed in 0.414487 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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