本帖最后由 yanshengjiang 于 2025-2-20 15:07 编辑
;收集的4个选择集转表的程序 作者不详 如有侵权请联系我删除
;一万个图元的选择集转图元名列表速度测试
;最开始一百万个图元用ss->lst很长时间没结果,后来五万个图元5分钟还是没结果,无耐采用1w个图元做4个函数的测试。
;最后单独用(lm:ss->ent(ssget))选择五万个对象做了下测试大约耗时240秒
通过直接循环处理数据的测试,感觉选择集转表再做后续的操作非常浪费时间,不知道我理解的对不对。
详情见另一帖:三种方式的循环处理时间测试http://bbs.mjtd.com/thread-192152-1-1.html
 - ;选择集转表 耗时22秒
- (defun ss->lst(ss)
- (vl-remove-if(function listp)(mapcar (function cadr) (ssnamex SS)))
- )
- ;选择集转图元列表 耗时24秒
- (defun s2e(ss)
- (if(=(type ss)'pickset)
- (vl-remove'nil(mapcar'(lambda(x / e)(if(=(type(setq e(cadr x)))'ename)e))(ssnamex ss))))
- )
- ;选择集转表 耗时26秒
- (defun mj:ss->list
- (ss / is-ename)
- (defun is-ename(arg)
- (equal
- (type arg)
- 'ename
- )
- )
- (vl-remove-if-not 'is-ename
- (mapcar
- 'cadr
- (ssnamex ss)
- )
- )
- )
- ;麦克 选择集2图元表 耗时26秒
- (defun lm:ss->ent (ss / i l)
- (if ss
- (progn
- (repeat (setq i
- (sslength ss)
- )
- (setq l (cons (ssname ss
- (setq i
- (1- i)
- )
- ) l
- )
- )
- )
- )
- )
- )
|