缩放扩展所有打开的dra
尊敬的各位:,我正在用Visual LISP BIBLE测试代码,但它不起作用。请更正代码。这将缩放所有打开的图形。
(defun c:zoomall ()
(setq #acad (vlax-get-acad-object)
#docs (vla-get-documents #acad)
cur_doc (vla-get-activedocument #acad)
cnt (vla-get-count #docs)
)
(vlax-for each #docs
(vla-put-activedocument each)
(vla-zoomextents #acad)
(vla-save each)
)
(vla-put-activedocument cur_doc)
)
首先,有几件事,例如您需要每个DWG至少调用一次vl load com:
但即使这样也不一定行得通。。。在处理多个DWG时,Lisp有点棘手。您需要确保将代码加载到每个DWG中,但即使这样,它也无法正常工作。以下是来自ACad2008开发者帮助的一段话:
尊敬的irneb:,
对它不起作用。 你想自己做吗?我知道如何在不需要依次激活每个DWG的情况下执行它,但它有点复杂,我现在没有太多时间玩。
无论如何,我的想法是掌握DWG的活动视口(MS或Ps…以当前为准)。然后获取当前空间中绘制的所有对象的边界框,并将VP的范围更改为边界框。至少通过vla可以做到这一点,但它的工作情况如何/可能会发生什么其他问题我不知道。 好吧,ZoomExtents方法只能在当前图形上工作。
此处讨论。 但这就是为什么我建议获得所有实体的边界框。然后修改活动视口的缩放因子以适合。它始终是一个视口,即使在模型空间中,您位于视口(只是平铺视口)内,在PS中,第一个视口是PS本身。因此,它应该通过更改视口视图的宽度、高度和中心属性来工作,以适应其中显示的所有实体的边界框。 我不确定我是否知道你的意思。如果我离题了,就忽略这篇文章。
如果你把它添加到你的阿卡多克中,这不管用吗。lsp?
我只是使用一个简单的命令调用来最大化每个打开的图形。
这只是我的阿卡多克的一个例子。lsp
(defun-q DWG:SETUP ()
(vl-load-com)
(setvar "cmdecho" 0)
(setvar "osmode" 16383)
(setvar "orthomode" 1)
(setvar "psltscale" 0)
(setvar "angbase" 0)
(setvar "angdir" 0)
(command "_.layer" "_s" "0" "")
(command "_.zoom" "_E")
(command "_.regenall")
(load "C:\\ACADDOC\\TDS\\TDS.lsp")
(princ))
(princ)
(setq S::STARTUP (append S::STARTUP DWG:SETUP))
也许你可以用这种方式为每个图形加载代码并运行它? 当打开每个DWG时,这将很好地工作。OP想要的是一个命令,该命令可以最大化所有已打开的文件:即,他已经打开了2个以上的DWG文件,现在他想发出一个命令来最大化每个文件。 *如果*寻求替代解决方案。。。也许将“最大化显示”调用添加到:vlr命令将启动reactor(特别是“save”命令)?
这将在保存OP处理的每个图形之前有条件地基于活动选项卡完成任务,并且只需要最少的代码,不是吗?
谢谢你的澄清,我不确定。
页:
[1]
2