三种关闭打开某图层的方法,各执行1万次的结果
今天学习了三种关闭、打开某图层的方法,于是各执行1万次,看看到底哪种更快。第一种,用时59.586秒
[*](defun c:tt3(/ t0 t1 time)
[*](setvar "CMDECHO" 0)
[*](setq t0 (* 86400 (getvar "tdusrtimer")) )
[*](repeat 10000
[*](command "layer" "off" "2制图_窗型" "")
[*](command "layer" "on" "2制图_窗型" "")
[*])
[*](setq t1 (* 86400 (getvar "tdusrtimer")) )
[*](setq time (- t1 t0))
[*](print time)
[*](princ)
[*])
第二种,用时1.196秒
[*](defun c:tt2(/ t0 t1 time data dxf62 )
[*](setq t0 (* 86400 (getvar "tdusrtimer")) )
[*](repeat 10000
[*](setq data (entget(tblobjname "layer" "2制图_窗型")))
[*](setq dxf62 (cdr (assoc 62 data)));查询图层开/关变量值
[*](setq data (entmod (subst (cons 62 (- dxf62))(assoc 62 data) data)));关闭图层
[*](setq data (entmod (subst (cons 62 dxf62)(assoc 62 data) data)));打开图层
[*])
[*](setq t1 (* 86400 (getvar "tdusrtimer")) )
[*](setq time (- t1 t0))
[*](print time)
[*](princ)
[*])
第三种,用时1.022秒。
[*](defun c:tt1(/ t0 t1 time Ob-layer)
[*](setq t0 (* 86400 (getvar "tdusrtimer")) )
[*](repeat10000
[*](setq Ob-layer (vlax-ename->vla-object(tblobjname "layer" "2制图_窗型")))
[*](vla-put-LayerOn Ob-layer :vlax-false);关闭图层
[*](vla-put-LayerOn Ob-layer :vlax-true) ;打开图层
[*])
[*](setq t1 (* 86400 (getvar "tdusrtimer")) )
[*](setq time (- t1 t0))
[*](print time)
[*](princ)
[*])
还是有点意思的。
要真正进行速度测试 不能简单的一个图层开关一万次 而是建立100个图层 每个图层里放置1000个相同的图元 再把代码做到完善最后再进行测试 老前辈有叮咛
command 调用耗时 能不用就别用 不能简单的说command耗时 command命令在运行时其实考虑了很多后续处理 比如说 你用vlax控制图层以后注意一下工具条里的状态是没有变化的所以楼上的vlax代码 相比一个完整的运行过程 其实少了很多步骤 所以才会显得快很多 调用command大部分都会比较慢,原则上entmod会更快一些,你的测试时间可能有点问题,vlax次之,command最慢.
请教大侠用用第三种办法 关图层 怎么样设置支持通配符图层 如*text* 学习了,谢谢楼主分享 第三种,用时1.022秒。
(defun c:tt1(/ t0 t1 time Ob-layer)
(setq t0 (* 86400 (getvar "tdusrtimer")) )
(repeat10000
(setq Ob-layer (vlax-ename->vla-object(tblobjname "layer" "2制图_窗型")))
(vla-put-LayerOn Ob-layer :vlax-false);关闭图层
(vla-put-LayerOn Ob-layer :vlax-true) ;打开图层
)
(setq t1 (* 86400 (getvar "tdusrtimer")) )
(setq time (- t1 t0))
(print time)
(princ)
)
大神 请教 怎么样参照这个方法关闭多个图层如text1text2text3 1clou12clou2
是否可以支持通配符如*text* *clou* 觉得最慢comman<vl-cmdf<entmod<vlax最快。cad版本越高越明显。
就算最慢comman开关多个图层几次时间也是很少很少忽略不计。
不过在不影响速度情况下尽量用command会好用的。
感谢大佬分享
页:
[1]