找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6931|回复: 11

[教学] API应用 有关分类统计(XD::List:GroupByIndex)的通用写法

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-28 13:25:23 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2014-3-28 07:45 编辑

;;XD::List:GroupByIndex 应用汇总
;;该函数是以索引对表进行分类汇总的通用函数,一般写法如下
;;这里最主要的是构造这个索引,可以是 LIST STR INT REAL 四种格式
  1. (if (setq ss (ssget)) ;_此处构造选择集,根据需要加过滤表
  2.   (progn
  3.     (setq ll (xdrx_pickset->ents ss) ;_将选择集转换为实体列表
  4.           ll (mapcar '(lambda (x)
  5.                               ;;这里面构造特征索引
  6.                       )
  7.                      ll
  8.              ) ;_此处将实体表转换子表为有特定索引的表
  9.           ll (XD::List:GroupByIndex ll 0.) ;_分组,根据需要是否使用 fuzz
  10.     )
  11.     (mapcar '(lambda (x)
  12.                      ;;遍历处理
  13.              )
  14.             ll
  15.     )
  16.   )
  17.   (princ)
  18. )

1 分类统计图块数量
  1. (if (setq ss (ssget '((0 . "Insert"))))
  2.   (progn
  3.     (setq ll (xdrx_pickset->ents ss);_选集转实体列表
  4.           ll (mapcar '(lambda (x)
  5.                         (xdrx_getpropertyvalue x "BlockTableRecordID");_(图块名 图块定义) 这里第二个元素是计数用,用什么都可以
  6.                       )
  7.                      ll
  8.              )
  9.           ll (XD::List:GroupByIndex ll 0);_分组((BN11 n11 n12 ...) (BN2 n21 n22 ...) ...)
  10.           ll (mapcar '(lambda (x)
  11.                         (list (car x) (length (cdr x)));_仅保留块名及数量, ((bn1 num1) (bn2 num2) ...)
  12.                       )
  13.                      ll
  14.              )
  15.     )
  16.     ;;后续处理
  17.   )
  18. )

2 按文字内容统计, 这个根据需要是否区分大小写
  1. (if (setq ss (ssget '((0 . "text"))))
  2.   (progn
  3.     (setq ll (xdrx_pickset->ents ss);_选集转实体列表
  4.           ll (mapcar '(lambda (x)
  5.                         (list (xdrx_getpropertyvalue x "Textstring") x );_(文字 实体) 这里第二个元素是计数用,用什么都可以
  6.                       )
  7.                      ll
  8.              )
  9.           ll (XD::List:GroupByIndex ll 0);_分组((BN11 n11 n12 ...) (BN2 n21 n22 ...) ...)
  10.           ll (mapcar '(lambda (x)
  11.                         (list (car x) (length (cdr x)));_仅保留文字值及数量, ((str1 num1) (str1 num2) ...)
  12.                       )
  13.                      ll
  14.              )
  15.     )
  16.     ;;后续处理
  17.   )
  18. )

3 统计圆数量及是否有同心圆数量
  1. (if (setq ss (ssget '((0 . "circle"))))
  2.   (progn
  3.     (setq ll (xdrx_pickset->ents ss) ;_选集转实体列表
  4.           ll (mapcar '(lambda (x)
  5.                         (list (xdrx_getpropertyvalue x "Center") x) ;_(圆心 圆) 这里第二个元素是计数用,用什么都可以
  6.                       )
  7.                      ll
  8.              )
  9.           ll (XD::List:GroupByIndex ll 1e-2) ;_分组((圆心1 圆1 ) (圆2 圆2 圆21 ...) ...)子表cdr后长度大于1 就是同心圆
  10.                                         ;这里因为用圆心,就要给一个精度
  11.           ll (mapcar '(lambda (x)
  12.                         (list (car x) (length (cdr x))) ;_仅保留文字值及数量, ((圆1 num1) (圆2 num2) ...)
  13.                       )
  14.                      ll
  15.              )
  16.     )
  17.     ;;后续处理
  18.   )
  19. )

4 按颜色统计
  1. (if (setq ss (ssget ));_根据需要增加过滤表
  2.   (progn
  3.     (setq ll (xdrx_pickset->ents ss) ;_选集转实体列表
  4.           ll (mapcar '(lambda (x)
  5.                         (if (= 256 (xdrx_getpropertyvalue x "Color")) ;_随层的时候要取层颜色
  6.                           (list
  7.                             (xdrx_getpropertyvalue
  8.                               (cadr (xdrx_getpropertyvalue x "Layer"));_(层名 图层实体)
  9.                               "Color"
  10.                             )
  11.                             x
  12.                           )
  13.                           (list (xdrx_getpropertyvalue x "Color") x);_直接取颜色
  14.                         ) ;_(颜色 实体) 这里第二个元素是计数用,用什么都可以
  15.                       )
  16.                      ll
  17.              )
  18.           ll (XD::List:GroupByIndex ll 0) ;_分组((颜色1 实体1 ) (颜色2 实体2 实体21 ...) ...)
  19.           ll (mapcar '(lambda (x)
  20.                         (list (car x) (length (cdr x))) ;_仅保留颜色值及数量, ((圆1 num1) (圆2 num2) ...)
  21.                       )
  22.                      ll
  23.              )
  24.     )
  25.     ;;后续处理
  26.   )
  27. )

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

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-3-28 07:41:13 | 显示全部楼层
本帖最后由 st788796 于 2014-4-1 10:13 编辑

统计相同曲线(复制)数量并制表
http://bbs.xdcad.net/thread-672880-1-1.html

相同矩形编号
http://bbs.xdcad.net/thread-672539-1-1.html

不同角度块排行列并按紧邻分组
http://bbs.xdcad.net/thread-672658-1-1.html

生成钢筋统计表
http://bbs.xdcad.net/thread-671133-1-1.html

连接有间隙的等高线
http://bbs.xdcad.net/thread-671385-1-1.html

天正给水弯头三四通标注并制造统计表
http://bbs.xdcad.net/thread-671129-1-1.html

统计所选多线段封闭区域内块的数量并生成列表
http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=672858&pid=3507489

求立体图统计尺寸及汇总编号的程序
http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=671773&pid=3497410

一个区域编号应用
http://bbs.xdcad.net/thread-673103-1-1.html

图块统计表
http://bbs.xdcad.net/thread-673038-1-1.html

统计匹配文字
http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=672880&pid=3507990

将含有相同内容文本图元的组或块变为同一块参照
http://bbs.xdcad.net/thread-673150-1-1.html

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

使用道具 举报

发表于 2014-9-27 00:02:09 | 显示全部楼层
本帖最后由 77077 于 2014-9-27 00:06 编辑

  1. ;分层统计面积
  2. (defun c:tt( / ss ll)
  3. (if (setq ss (ssget '((0 . "*POLYLINE") (8 . "Layer*"))));过滤选择
  4.   (progn
  5.     (setq ll (gxl-Sel-SS->List ss);选集转实体列表
  6.           ll (mapcar '(lambda (x)
  7.                         (list (vla-get-Layer x) (vla-get-Area x));求出(图层 面积)
  8.                       )
  9.                     (mapcar '(lambda (x) (vlax-ename->vla-object x)) ll);转化为obj对象
  10.              )
  11.          ll (mapcar '(lambda(x)
  12.                               (cons (car x)(apply '+ (cdr x)))
  13.                            )
  14.                         (XD::List:GroupByIndex ll 0)));分组统计面积
  15.               )
  16.   )
  17. )


点评

曲线面积可以直接用 vlax-curve-getarea 无需 vlax-ename->vlax-object  详情 回复 发表于 2014-9-27 08:17

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

发表于 2014-9-27 08:17:08 | 显示全部楼层


曲线面积可以直接用 vlax-curve-getarea 无需 vlax-ename->vlax-object
  1. (defun c:tt (/ ss lst)
  2.   (if (setq ss (ssget '((0 . "*POLYLINE"))))
  3.     (progn
  4.       (setq lst        (mapcar        '(lambda (x)
  5.                            (list (cdr (assoc 8 (entget x)))
  6.                                  (vlax-curve-getarea x)
  7.                            )
  8.                          )
  9.                         (acet-ss-to-list ss)
  10.                 )
  11.             lst        (xd::list:groupbyindex lst 0)
  12.             lst        (mapcar        '(lambda (x)
  13.                            (list (car x) (apply '+ (cdr x)))
  14.                          )
  15.                         lst
  16.                 )
  17.       )
  18.       (princ lst)
  19.     )
  20.   )
  21.   (princ)
  22. )

点评

多谢大师指点,我是新手,很多用法还不知道呢~ 大师收徒弟么? 勤快好学。  详情 回复 发表于 2014-9-27 09:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-27 09:43:29 | 显示全部楼层
Free-Lancer 发表于 2014-9-27 08:17
曲线面积可以直接用 vlax-curve-getarea 无需 vlax-ename->vlax-object

多谢大师指点,我是新手,很多用法还不知道呢~
大师收徒弟么?
勤快好学。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-9-27 10:17:59 | 显示全部楼层
77077 发表于 2014-9-27 09:43
多谢大师指点,我是新手,很多用法还不知道呢~
大师收徒弟么?
勤快好学。

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

使用道具 举报

已领礼包: 92个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

已领礼包: 221个

财富等级: 日进斗金

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

使用道具 举报

发表于 2015-3-30 18:41:57 | 显示全部楼层

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 01:08 , Processed in 0.438976 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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