daha 发表于 2022-7-6 06:31:47

将全部缩放应用于所有布局

嗨,我需要一段代码的帮助。我在另一个论坛帖子上发现了这段代码,我认为它可以满足我的需要,但需要修改。我希望能够对当前dwg中的所有布局应用“全部缩放”。(因此,当打开dwg时,我可以先重置布局——有些图形有“多”个布局,因此需要在工作之前清理一下)
 
这是现在的代码。。。(只对当前布局进行缩放)
 
(vl load com)
(defun c:zza()
(setq lay_list(布局列表)
lay\u list\u len(长度lay\u list)
第0层
)
(重复lay\u list\u len
;       (命令“layout”“set”(第n个lay\u第n个lay\u列表))
(命令“zoom”“all”)
(setq lay\u nth(1+lay\u nth))
)
(普林斯)
)
 
我有一行rem'd了,因为我不想改变布局(出于我的目的,这是没有必要的)我不知道lisp,所以这段代码可能无法正常工作。我只需要“全部缩放”命令。
 
下面是另一段代码,它将当前布局的页面设置复制到所有可能也能正常工作(或者最好修改)的布局中。。。
 
(vl load com)
(定义c:CP(/Adoc Layts clyt)
(setq aDoc(vla get activedocument(vlax get acad object))
Layts(vla get layouts aDoc)
clyt(vla get activelayout aDoc)
)
(foreach)
itm公司
(vl remove(vla get name clyt)(布局列表))
(vla copyfrom(vla item Layts itm)clyt)
(命令“_zoom”“all”);;补充
)
(普林斯)
)
 
我该如何改变这一点?(我不需要更改页面设置)
 
谢谢

BlackBox 发表于 2022-7-6 06:43:58

考虑这种适应性:
 

(vl-load-com)

(defun c:ZoomAll (/ *error* oldCtab acApp)

(defun *error* (msg)
   (and oldCtab (setvar 'ctab oldCtab))
   (cond ((not msg))                                                   ; Normal exit
         ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
         ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it
   )
   (princ)
)

(if (and (setq oldCtab (getvar 'ctab))
          (setq acApp (vlax-get-acad-object))
   )
   (foreach tab (layoutlist)
   (setvar 'ctab tab)
   (vla-zoomall acApp)
   )
)
(*error* nil)
)

daha 发表于 2022-7-6 06:54:26

Thx黑盒。它确实有效,但是我的标题栏有一些意想不到的后果。(删除了多行文字——可能只是一种异常现象)然而,这可能不会像预想的那样起作用。我的一些dwg有超过100个布局;因此,您可以想象在尝试打开时重新生成每个布局的问题。即使使用打开的dwg并运行lsp,在大型dwg上也可能存在问题。谢谢你的帮助。

daha 发表于 2022-7-6 07:08:19

是的,看起来这只是一个异常。(只是想澄清)谢谢。

BlackBox 发表于 2022-7-6 07:12:22

不客气;我很乐意帮忙。

alanjt 发表于 2022-7-6 07:29:23

在执行缩放之前,最好退出模型。
 
(defun c:ZAL (/ doc acad ctab)

(setq acad (vlax-get-acad-object)
       doc(vla-get-activedocument acad)
       ctab (getvar 'CTAB)
)

(foreach layout (layoutlist)
   (setvar 'CTAB layout)
   (vla-put-mspace doc :vlax-false)
   (vla-zoomall acad)
)

(setvar 'CTAB ctab)

(princ)
)

BlackBox 发表于 2022-7-6 07:35:43

... 对于那些希望在离开布局之前恢复MSpace的用户,请合并以下代码段:
 

;; <snip>

   (foreach tab (layoutlist)
   (setvar 'ctab tab)
   (if (setq mspace (< 1 (getvar 'cvport)))
       (vla-put-mspace acDoc :vlax-false)
   )
   (vla-zoomall acApp)
   (if mspace
       (vla-put-mspace acDoc :vlax-true)
   )
   )

;; <snip>
页: [1]
查看完整版本: 将全部缩放应用于所有布局