图层代码-发布时速度较慢
下面的代码是从我编写的一个更大的程序中提取出来的。这一部分在打开的文件中查找层。如果不存在,则创建层。如果它确实存在,则会确保它已解冻、打开并解锁。然后在这两种情况下,它将层设置为当前层。我遇到的问题是,当我在AutoCAD中发出命令时,在继续之前有很长的延迟。我不知道为什么。当我删除这部分代码时,它运行得非常快。我做过什么会导致这种情况吗?(setq oldlay(getvar "clayer")
laycoll (vla-get-Layers doc)
layname "G-ANNO-DIMS"
)
(if (vl-catch-all-error-p (setq layobj (vl-catch-all-apply 'vla-Item (list laycoll layname))))
(progn
(setq layobj (vla-Add laycoll layname))
(vla-put-Color layobj acWhite)
(vla-put-Description layobj "Dimensions")
(vla-put-Freeze layobj :vlax-false)
(vla-put-LayerOn layobj :vlax-true)
(vla-put-Linetype layobj "Continuous")
(vla-put-Lineweight layobj acLnWt025)
(vla-put-Lock layobj :vlax-false)
(vla-put-Plottable layobj :vlax-true)
(vla-put-ViewportDefault layobj :vlax-false)
(setvar "clayer" layname)
)
(progn
(if (= (vla-get-Freeze layobj) :vlax-true) (vla-put-Freeze layobj :vlax-false))
(if (= (vla-get-LayerOn layobj) :vlax-false) (vla-put-LayerOn layobj :vlax-true))
(if (= (vla-get-Lock layobj) :vlax-true) (vla-put-Lock layobj :vlax-false))
(vla-Regen doc acAllViewports)
(setvar "clayer" layname)
)
)
尝试忽略以下内容:
(vla-Regen doc acAllViewports) 谢谢李。现在回想起来,这很有道理。当图层被锁定或冻结并且需要重新生成时,我如何克服这种情况?我应该在每个单独的if函数中容纳它吗?
我将确保在程序评估期间,图形最多只重新生成一次,并且这种重新生成作为程序执行的最后一个操作发生。您可以使用一个布尔变量,该变量将在一个条件语句中定义,以确定实际上是否需要重新生成。 我不认为这正是你所建议的李,但我认为这可能是沿着相同的路线。你同意这是一个解决方案吗?
(setq oldlay(getvar "clayer")
laycoll (vla-get-Layers doc)
layname "G-ANNO-DIMS"
)
(if (vl-catch-all-error-p (setq layobj (vl-catch-all-apply 'vla-Item (list laycoll layname))))
(progn
(setq layobj (vla-Add laycoll layname))
(vla-put-Color layobj acWhite)
(vla-put-Description layobj "Dimensions")
(vla-put-Freeze layobj :vlax-false)
(vla-put-LayerOn layobj :vlax-true)
(vla-put-Linetype layobj "Continuous")
(vla-put-Lineweight layobj acLnWt025)
(vla-put-Lock layobj :vlax-false)
(vla-put-Plottable layobj :vlax-true)
(vla-put-ViewportDefault layobj :vlax-false)
(setvar "clayer" layname)
)
(progn
(if (= (setq layfrz (vla-get-Freeze layobj)) :vlax-true) (vla-put-Freeze layobj :vlax-false))
(if (= (vla-get-LayerOn layobj) :vlax-false) (vla-put-LayerOn layobj :vlax-true))
(if (= (setq laylck (vla-get-Lock layobj)) :vlax-true) (vla-put-Lock layobj :vlax-false))
(if (or (= layfrz :vlax-true) (= laylck :vlax-true)) (vla-Regen doc acAllViewports))
(setvar "clayer" layname)
)
)
准确地说,前提是在整个程序中没有多个类似的代码块。 不。这是我代码中唯一需要重新生成的时间。非常感谢你的帮助。
页:
[1]