马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 st788796 于 2014-3-28 07:45 编辑
;;XD::List:GroupByIndex 应用汇总
;;该函数是以索引对表进行分类汇总的通用函数,一般写法如下
;;这里最主要的是构造这个索引,可以是 LIST STR INT REAL 四种格式
 - (if (setq ss (ssget)) ;_此处构造选择集,根据需要加过滤表
- (progn
- (setq ll (xdrx_pickset->ents ss) ;_将选择集转换为实体列表
- ll (mapcar '(lambda (x)
- ;;这里面构造特征索引
- )
- ll
- ) ;_此处将实体表转换子表为有特定索引的表
- ll (XD::List:GroupByIndex ll 0.) ;_分组,根据需要是否使用 fuzz
- )
- (mapcar '(lambda (x)
- ;;遍历处理
- )
- ll
- )
- )
- (princ)
- )
1 分类统计图块数量
 - (if (setq ss (ssget '((0 . "Insert"))))
- (progn
- (setq ll (xdrx_pickset->ents ss);_选集转实体列表
- ll (mapcar '(lambda (x)
- (xdrx_getpropertyvalue x "BlockTableRecordID");_(图块名 图块定义) 这里第二个元素是计数用,用什么都可以
- )
- ll
- )
- ll (XD::List:GroupByIndex ll 0);_分组((BN11 n11 n12 ...) (BN2 n21 n22 ...) ...)
- ll (mapcar '(lambda (x)
- (list (car x) (length (cdr x)));_仅保留块名及数量, ((bn1 num1) (bn2 num2) ...)
- )
- ll
- )
- )
- ;;后续处理
- )
- )
2 按文字内容统计, 这个根据需要是否区分大小写
 - (if (setq ss (ssget '((0 . "text"))))
- (progn
- (setq ll (xdrx_pickset->ents ss);_选集转实体列表
- ll (mapcar '(lambda (x)
- (list (xdrx_getpropertyvalue x "Textstring") x );_(文字 实体) 这里第二个元素是计数用,用什么都可以
- )
- ll
- )
- ll (XD::List:GroupByIndex ll 0);_分组((BN11 n11 n12 ...) (BN2 n21 n22 ...) ...)
- ll (mapcar '(lambda (x)
- (list (car x) (length (cdr x)));_仅保留文字值及数量, ((str1 num1) (str1 num2) ...)
- )
- ll
- )
- )
- ;;后续处理
- )
- )
3 统计圆数量及是否有同心圆数量
 - (if (setq ss (ssget '((0 . "circle"))))
- (progn
- (setq ll (xdrx_pickset->ents ss) ;_选集转实体列表
- ll (mapcar '(lambda (x)
- (list (xdrx_getpropertyvalue x "Center") x) ;_(圆心 圆) 这里第二个元素是计数用,用什么都可以
- )
- ll
- )
- ll (XD::List:GroupByIndex ll 1e-2) ;_分组((圆心1 圆1 ) (圆2 圆2 圆21 ...) ...)子表cdr后长度大于1 就是同心圆
- ;这里因为用圆心,就要给一个精度
- ll (mapcar '(lambda (x)
- (list (car x) (length (cdr x))) ;_仅保留文字值及数量, ((圆1 num1) (圆2 num2) ...)
- )
- ll
- )
- )
- ;;后续处理
- )
- )
4 按颜色统计
 - (if (setq ss (ssget ));_根据需要增加过滤表
- (progn
- (setq ll (xdrx_pickset->ents ss) ;_选集转实体列表
- ll (mapcar '(lambda (x)
- (if (= 256 (xdrx_getpropertyvalue x "Color")) ;_随层的时候要取层颜色
- (list
- (xdrx_getpropertyvalue
- (cadr (xdrx_getpropertyvalue x "Layer"));_(层名 图层实体)
- "Color"
- )
- x
- )
- (list (xdrx_getpropertyvalue x "Color") x);_直接取颜色
- ) ;_(颜色 实体) 这里第二个元素是计数用,用什么都可以
- )
- ll
- )
- ll (XD::List:GroupByIndex ll 0) ;_分组((颜色1 实体1 ) (颜色2 实体2 实体21 ...) ...)
- ll (mapcar '(lambda (x)
- (list (car x) (length (cdr x))) ;_仅保留颜色值及数量, ((圆1 num1) (圆2 num2) ...)
- )
- ll
- )
- )
- ;;后续处理
- )
- )
待续....
|