找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3036|回复: 12

[求助] 求一个能统计相同图形的数量的LSP

[复制链接]
发表于 2014-8-31 08:28:19 | 显示全部楼层 |阅读模式

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

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

×
求一个能统计相同图形的数量的LSP.比如:统计CAD图中一共有多少个相同的矩形,或者统计有多少个相同的园.

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

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-31 11:22:08 来自手机 | 显示全部楼层
AutoCAD中每个空间实体都有自己的特性,所以才呈现出区别,严格上相同就是重复实体了,楼主所述相同应该一个某些属性相同的实体,如圆,实体特征有图层、颜色、线形、线宽等,圆本身有圆心、半径、法向、厚度等等,你要说明哪些属性相同就归为一组,矩形只是一个表现,CAD中可以是一个Pline, 也可能是多个曲线组合而表现为“矩形”
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-31 11:31:10 | 显示全部楼层
如果是统计的图形(矩形 园),是复制出来的,这样能做LSP程序统计吗?

点评

可以,你要说清楚  详情 回复 发表于 2014-8-31 11:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-31 11:32:17 来自手机 | 显示全部楼层
gmx2588 发表于 2014-8-31 11:31
如果是统计的图形(矩形 园),是复制出来的,这样能做LSP程序统计吗?

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-31 14:45:59 | 显示全部楼层
gmx2588 发表于 2014-8-31 11:31
如果是统计的图形(矩形 园),是复制出来的,这样能做LSP程序统计吗?

选择完全相同圆
  1. (defun c:tt (/ e el ss)
  2.   (if (and (setq e (ssget ":S" '((0 . "Circle"))))
  3.            (setq el (entget (ssname e 0))
  4.                  el (vl-remove-if
  5.                       '(lambda (x) (member (car x) '(-1 330 5 10 100)))
  6.                       el
  7.                     )
  8.            )
  9.            (setq ss (ssget el))
  10.       )
  11.     (sssetfirst nil ss)
  12.   )
  13. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-31 15:00:56 | 显示全部楼层
本帖最后由 st788796 于 2014-8-31 15:19 编辑

选择“相同” lwpolyline
  1. (defun c:tt1 (/ e el ss filter pl->len vl s1 sl)
  2.   (defun Pl->len (e / el pts)
  3.     (setq el  (entget e)
  4.           pts (mapcar 'cdr
  5.                       (vl-remove-if '(lambda (x) (/= (car x) 10)) el)
  6.               )
  7.     )
  8.     (if        (= (cdr (assoc 70 el)) 1)
  9.       (setq pts (reverse (cons (car pts) (reverse pts))))
  10.     )
  11.     (mapcar '(lambda (x y)
  12.                (list (distance x y) (angle x y))
  13.              )
  14.             pts
  15.             (cdr pts)
  16.     )
  17.   )
  18.   (if (and (setq e (car (entsel "\nPick Pline: ")))
  19.            (setq el (entget e))
  20.            (wcmatch (cdr (assoc 0 el)) "LWPOLYLINE")
  21.            (setq filter        (vl-remove-if
  22.                           '(lambda (x) (member (car x) '(-1 330 5 10 100)))
  23.                           el
  24.                         )
  25.            )
  26.            (setq ss (ssget filter))
  27.       )
  28.     (progn
  29.       (setq vl (pl->len e)
  30.             s1 (ssadd)
  31.             sl (sslength ss)
  32.       )
  33.       (while (setq ne (ssname ss (setq sl (1- sl))))
  34.         (if (equal (pl->len ne) vl 1e-6)
  35.           (ssadd ne s1)
  36.         )
  37.       )
  38.       (if s1
  39.         (sssetfirst nil s1)
  40.       )
  41.     )
  42.   )
  43.   (princ)
  44. )

上面两个是示意,如果直接框选分组
  1. (defun c:tt (/ ss pl->len ss1 lst)
  2.   (defun pl->len (e)
  3.     (setq pts (xdrx_getpropertyvalue e "Vertices"))
  4.     (if        (vlax-curve-isclosed e)
  5.       (setq pts (xd::pnts:close pts))
  6.     )
  7.     (mapcar '(lambda (x y)
  8.                (list (distance x y) (angle x y))
  9.              )
  10.             pts
  11.     )
  12.   )
  13.   (if (setq ss (ssget '((-4 . "<or")
  14.                         (-4 . "<and")
  15.                         (0 . "lwpolyline")
  16.                         (90 . 4)
  17.                         (-4 . "&=")
  18.                         (70 . 1)
  19.                         (-4 . "and>")
  20.                         (0 . "Circle")
  21.                         (-4 . "or>")
  22.                        )
  23.                )
  24.       )
  25.     (progn
  26.       (if (setq ss1 (ssget "P" '((0 . "CIrcle"))))
  27.         (progn
  28.           (setq        lst (mapcar '(lambda (x / el)
  29.                                (setq el        (entget x)
  30.                                      el        (vl-remove-if
  31.                                           '(lambda (x)
  32.                                              (member (car x)
  33.                                                      '(-1 330 5 10 100)
  34.                                              )
  35.                                            )
  36.                                           el
  37.                                         )
  38.                                )
  39.                                (list el x)
  40.                              )
  41.                             (xdrx_pickset->ents ss1)
  42.                     )
  43.                 lst (xd::list:groupbyindex lst 1e-3)
  44.           )
  45.           (setq ss (xdrx_pickset_subtract ss ss1))
  46.         )
  47.       )
  48.       (if ss
  49.         (progn
  50.           (setq        lst (mapcar '(lambda (x / el)
  51.                                (setq el        (entget x)
  52.                                      el        (vl-remove-if
  53.                                           '(lambda (x)
  54.                                              (member (car x)
  55.                                                      '(-1 330 5 10 100)
  56.                                              )
  57.                                            )
  58.                                           el
  59.                                         )
  60.                                )
  61.                                (list (append (pl->len x) el) x)
  62.                              )
  63.                             (xdrx_pickset->ents ss)
  64.                     )
  65.                 lst (xd::list:groupbyindex lst 1e-3)
  66.           )
  67.         )
  68.       )
  69.     )
  70.   )
  71.   (princ)
  72. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-31 15:36:16 | 显示全部楼层
本帖最后由 gmx2588 于 2014-8-31 15:39 编辑

非常好用,谢谢!:loveliness:再求一个 能统计同一种线型的长度的LSP.(比如用某一线型画的避雷带)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-31 15:46:42 | 显示全部楼层
gmx2588 发表于 2014-8-31 15:36
非常好用,谢谢!再求一个 能统计同一种线型的长度的LSP.(比如用某一线型画的避雷带)

线性可能包含在图层,也可能是单独设置,你要统计总长?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-31 16:06:44 | 显示全部楼层
  1. (defun c:tt (/ e el filter ss)
  2.   (if (and (setq e (car (entsel "\nPick Curve: ")))
  3.            (setq el (entget e))
  4.            (wcmatch (cdr (assoc 0 el)) "*LINE,ARC,CIRCLE,ELLIPSE")
  5.            (setq filter        (vl-remove-if-not
  6.                           '(lambda (x) (member (car x) '(8 6)))
  7.                           el
  8.                         )
  9.            )
  10.            (if (assoc 6 filter)
  11.              filter
  12.              (setq filter (cons '(6 . "BYLAYER") filter))
  13.            )
  14.            (setq ss (ssget (cons '(0 . "*LINE,ARC,CIRCLE,ELLIPSE") filter)))
  15.       )
  16.     (princ
  17.       ('((x / e l)
  18.          (while
  19.           (setq e (ssname ss (setq x (1+ x))))
  20.           (setq
  21.            l
  22.            (cons
  23.             (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  24.             l
  25.            )
  26.           )
  27.          )
  28.          (apply '+ l)
  29.         )
  30.         -1
  31.       )
  32.     )
  33.   )
  34.   (princ)
  35. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-31 16:13:08 | 显示全部楼层
gmx2588 发表于 2014-8-31 16:07
是的,可能不在同层上,只是统计某一种线型的总长度.

线型随层就要多写一些语句了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-31 16:21:26 | 显示全部楼层
本帖最后由 gmx2588 于 2014-8-31 16:24 编辑

好用:D非常感谢你的帮助! ( 如果能统计不同图层上的 同一种线型 总长度就更好了)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-8-31 16:50:35 | 显示全部楼层
本帖最后由 st788796 于 2014-8-31 17:10 编辑
gmx2588 发表于 2014-8-31 16:21
好用非常感谢你的帮助! ( 如果能统计不同图层上的 同一种线型 总长度就更好了)

  1. (defun c:tt (/ e ss _get)
  2.   (defun _get (e / el lyr ln n ll)
  3.     (setq el  (entget e)
  4.           lyr (cdr (assoc 8 el))
  5.     )
  6.     (if        (not (setq ln (assoc 6 el)))
  7.       (setq ln (assoc 6 (tblsearch "layer" lyr)))
  8.     )
  9.     (while (setq n (tblnext "layer" (null n)))
  10.       (if (equal (assoc 6 n) ln)
  11.         (setq ll (cons (cdr (assoc 2 n)) ll))
  12.       )
  13.     )
  14.     (list '(0 . "*LINE,ARC,CIRCLE,ELLIPSE")
  15.           '(-4 . "<or")
  16.           '(-4 . "<and")
  17.           (cons        8
  18.                 (vl-string-translate
  19.                   " "
  20.                   ","
  21.                   (vl-string-trim "()" (vl-princ-to-string ll))
  22.                 )
  23.           )
  24.           '(6 . "BYLAYER")
  25.           '(-4 . "and>")
  26.           ln
  27.           '(-4 . "or>")
  28.     )
  29.   )
  30.   (if (and (setq e (car (entsel "\nPick Curve: ")))
  31.            (setq ss (ssget (_get e)))
  32.       )
  33.     (princ
  34.       ('((x / e ll)
  35.          (while
  36.           (setq e (ssname ss (setq x (1+ x))))
  37.           (setq
  38.            ll
  39.            (cons
  40.             (vlax-curve-getdistatparam
  41.              e
  42.              (vlax-curve-getendparam e)
  43.             )
  44.             ll
  45.            )
  46.           )
  47.          )
  48.          (apply '+ ll)
  49.         )
  50.         -1
  51.       )
  52.     )
  53.   )
  54.   (princ)
  55. )

ssget中 加入 "X" 就不需要框选范围,直接全图统计

评分

参与人数 1D豆 +5 收起 理由
gmx2588 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 22:00 , Processed in 0.206204 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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