明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 113|回复: 4

[源码] 2分法快速取得选择集的符号表 -提速方案

[复制链接]
发表于 昨天 18:26 | 显示全部楼层 |阅读模式
本帖最后由 wzg356 于 2025-3-12 23:12 编辑

场景有限
运用下载文件提供另一个方法函数 可对比

;2分法快速取得选择集的符号表--函数getSSsymbols
;选择集庞大时循环次数较常规减少70%以上---先循环取得一部分值/可能实现目标的绝大部分了
;在已取得的表去反选选择集---剩下的循环/图元数量就很少很少了

;ss选择集/nil nil时取全图,全图的线型块名样式等符号表就别用该函数了
;fls过滤表/nil---比如取块名/填充图案等式时需要区分-也大大减少循环量
;code属性指向的组码--函数的目标取得该值的表
;flag是否属性值转义t/nil--对符号型属性值有效

;运行示例
;(getSSsymbols nil nil 0 nil);取图元类型
;(getSSsymbols (ssget) nil 8 t);取图层
;(getSSsymbols nil nil 6 t);取线型
;(getSSsymbols (ssget) nil 62 nil);取颜色
;(getSSsymbols nil '((0 . "INSERT")) 2 t);取块名
;(getSSsymbols nil '((0 . "*DIMENSION,LEADER")) 3 t);取标注样式

如果要取全图图元类型,下面方法更佳,该函数仅捡漏了,取颜色同理

(progn
(setq lst '("TEXT" "MTEXT" "DIMENSION" "INSERT" "HATCH" "LINE"
                                 "LWPOLYLINE" "POLYLINE" "CIRCLE" "POINT"))
(setq lst(vl-remove-if(function(lambda(x)(not(ssget "x"(list(cons 0 x))))))lst))
(if (setq ss(ssget "x"(mapcar (function(lambda(x)(cons 0 (strcat "~" x))))lst)))
(setq lst(append(getSSsymbols ss nil 0 nil)lst))
)
)



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 昨天 22:06 | 显示全部楼层
如果图形在块里面,ssget "X"方法会有问题吧.
回复 支持 反对

使用道具 举报

发表于 昨天 22:18 | 显示全部楼层
你这种思路,都没必要先循环一部分,直接先去第一个图元,然后从选择集中选一样的,和不一样的。然后对不一样的选择集,递归执行相同的操作,最后把所有一样的集合顺次组成表即可。这样循环不了几次,几乎全部都由select命令来实现。
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 22:41 | 显示全部楼层
本帖最后由 wzg356 于 2025-3-12 23:06 编辑
kozmosovia 发表于 2025-3-12 22:18
你这种思路,都没必要先循环一部分,直接先去第一个图元,然后从选择集中选一样的,和不一样的。然后对不一 ...

测试过的了, 实际上select/ssget也非常耗时
之所以先循环一部分,是考虑了select/ssget能尽可能抵消逐个图元循环量----二者的优势尽可能利用
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 22:47 | 显示全部楼层
tigcat 发表于 2025-3-12 22:06
如果图形在块里面,ssget "X"方法会有问题吧.

没思考过这种,据说子图元通常是以其头部图元存入选择集
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-13 03:54 , Processed in 0.175138 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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