muthu123 发表于 2022-7-5 15:27:22

缩放扩展所有打开的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)
)

irneb 发表于 2022-7-5 15:33:58

首先,有几件事,例如您需要每个DWG至少调用一次vl load com:
但即使这样也不一定行得通。。。在处理多个DWG时,Lisp有点棘手。您需要确保将代码加载到每个DWG中,但即使这样,它也无法正常工作。以下是来自ACad2008开发者帮助的一段话:

muthu123 发表于 2022-7-5 15:35:37

 
 
尊敬的irneb:,
对它不起作用。

irneb 发表于 2022-7-5 15:42:21

你想自己做吗?我知道如何在不需要依次激活每个DWG的情况下执行它,但它有点复杂,我现在没有太多时间玩。
 
无论如何,我的想法是掌握DWG的活动视口(MS或Ps…以当前为准)。然后获取当前空间中绘制的所有对象的边界框,并将VP的范围更改为边界框。至少通过vla可以做到这一点,但它的工作情况如何/可能会发生什么其他问题我不知道。

Lee Mac 发表于 2022-7-5 15:44:37

好吧,ZoomExtents方法只能在当前图形上工作。
 
此处讨论。

irneb 发表于 2022-7-5 15:47:48

但这就是为什么我建议获得所有实体的边界框。然后修改活动视口的缩放因子以适合。它始终是一个视口,即使在模型空间中,您位于视口(只是平铺视口)内,在PS中,第一个视口是PS本身。因此,它应该通过更改视口视图的宽度、高度和中心属性来工作,以适应其中显示的所有实体的边界框。

The Buzzard 发表于 2022-7-5 15:53:15

我不确定我是否知道你的意思。如果我离题了,就忽略这篇文章。
 
如果你把它添加到你的阿卡多克中,这不管用吗。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))

 
 
也许你可以用这种方式为每个图形加载代码并运行它?

irneb 发表于 2022-7-5 15:54:07

当打开每个DWG时,这将很好地工作。OP想要的是一个命令,该命令可以最大化所有已打开的文件:即,他已经打开了2个以上的DWG文件,现在他想发出一个命令来最大化每个文件。

BlackBox 发表于 2022-7-5 15:59:53

*如果*寻求替代解决方案。。。也许将“最大化显示”调用添加到:vlr命令将启动reactor(特别是“save”命令)?
 
这将在保存OP处理的每个图形之前有条件地基于活动选项卡完成任务,并且只需要最少的代码,不是吗?

The Buzzard 发表于 2022-7-5 16:02:44

 
谢谢你的澄清,我不确定。
页: [1] 2
查看完整版本: 缩放扩展所有打开的dra