找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 582|回复: 2

[每日一码] 四种获取布局的方法及效率测试

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-1-20 16:50:30 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 marting 于 2021-1-20 16:52 编辑

四种获取布局的方法及效率测试

  1. (Defun GetTabs (/ dwg cnt tab typ lst); rtn) not needed
  2. ;Always localize your variables unless
  3. ;intentionally using a global variable
  4.   (vl-load-com)
  5.   (setq        DWG (vla-get-layouts
  6.               (vla-get-activedocument (vlax-get-acad-object))
  7.             )
  8.         CNT (vla-get-count DWG)
  9.   )
  10.   (while (<= 0 (setq CNT (1- CNT)))
  11. ;You lose one layout tab right away because you subtract
  12. ;one before you ever stop.  The better place for
  13. ;subtracting one would be at the end of the while loop.
  14.     (setq TAB (vla-item DWG CNT)
  15.           TYP (strcase (vla-get-name TAB))
  16.     )
  17.     (if        (not (eq TYP "MODEL"))
  18. ;If you use cons instead of append to create your list
  19. ;then you won't need to test LST first.
  20. ;(if (= LST Nil)
  21. ;(setq LST (list TAB))
  22. ;(setq LST (append LST (list TAB)))
  23. ;)
  24.       (setq LST (cons TAB LST))
  25.     )
  26.   )
  27. ;If this is returning a list to another function you don't
  28. ;need to set this another variable just return the one
  29. ;already established.
  30. ;(setq RTN LST)
  31.   LST
  32. )


  1. (Defun GetTabs2        (/ dwg typ lst)
  2.   (vl-load-com)
  3.   (setq        dwg (vla-get-layouts
  4.               (vla-get-activedocument
  5.                 (vlax-get-acad-object))
  6.             )
  7.   )
  8.   (vlax-for lay dwg
  9.     (setq typ (strcase (vla-get-name lay)))
  10.     (if        (not (eq typ "MODEL"))
  11.       (setq lst (cons lay lst))
  12.     )
  13.   )
  14.   lst
  15. )


  1. (defun gettabs3        ()
  2.   (vl-load-com)
  3.   (defun *layouts* ()
  4.     (vla-get-layouts
  5.       (vla-get-activedocument (vlax-get-acad-object))
  6.     )
  7.   )
  8.   (defun *layout_list* (/ lst)
  9.     (vlax-map-collection
  10.       (*layouts*)
  11.       '(lambda (x) (setq lst (cons x lst)))
  12.     )
  13.     (cdr
  14.       (*sort* lst 'vla-get-taborder)
  15.     )
  16.   )
  17.   (defun *sort*        (lst func)
  18.     (vl-sort lst
  19.              '(lambda (e1 e2)
  20.                 (< ((eval func) e1) ((eval func) e2))
  21.               )
  22.     )
  23.   )
  24.   (*layout_list*)
  25. )

  1. (defun gettabs4        (/ lst)
  2.   (vl-load-com)
  3.   (vlax-map-collection
  4.     (vla-get-layouts
  5.       (vla-get-activedocument (vlax-get-acad-object))
  6.     )
  7.     '(lambda (x) (setq lst (cons x lst)))
  8.   )
  9.   (cdr
  10.     (vl-sort lst
  11.              '(lambda (e1 e2)
  12.                 (< (vla-get-taborder e1) (vla-get-taborder e2))
  13.               )
  14.     )
  15.   )
  16. )


效率测试:
  1. (defun c:tt ()
  2.   (XD::Quickbench
  3.     '("gettabs" "gettabs2" "gettabs3" "gettabs4")
  4.   )
  5.   (princ)
  6. )



令: tt

CPU:(2x)Intel(R) Xeon(R) E5-2643 v4 @ 3.40GHz 6Cores  / Memory:256G /
OS:WIN10专业工作站版
Benchmarking ......... done for 8192 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
gettabs3                          8192      1656       1656      1.06 <fastest>
gettabs2                          8192      1657       1657      1.06
gettabs4                          8192      1672       1672      1.05
gettabs                           8192      1750       1750      1.00 <slowest>
-------------------------------------------------------------------------------

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

已领礼包: 914个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 14:34 , Processed in 0.161729 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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