bababarghi 发表于 2022-7-5 23:54:06

'最大化显示#039;不是w

大家好,
 
每次打开图形(位于启动套件中)时,都会加载一个小lisp。它在AutoCAD 2013中运行良好。自升级到2014年以来,发生了以下情况:
 
这是我上次保存图形的方式:
http://i.share.pho.to/1b12b713_l.jpeg
 
 
这是打开图形后得到的结果(请注意,它没有缩放到范围):
http://i.share.pho.to/2b7af824_l.jpeg
 
 
这是我期待看到的:
http://i.share.pho.to/51126fd4_l.jpeg
 
此外,SECURELOAD设置为“0”,我的lisp如下所示:
 
(defun C:DoTheseSteps()
(setvar "tilemode" 1)
(setvar "PLINEWID" 0)
(setvar "SNAPUNIT" '(1.25 1.25))
(command "._ZOOM" "Extents")
)

(c:DoTheseSteps)
 
 
来自命令提示符的快照:

知道为什么“最大化显示”不起作用吗?

marko_ribar 发表于 2022-7-6 00:09:31

你的阿卡多克。lsp在我的A2014上运行良好。。。可以尝试使用(command-s“_.zoom”“\u E”)或此acaddoc。lsp:
 

(vl-load-com)
(setvar "tilemode" 1)
(setvar "PLINEWID" 0)
(setvar "SNAPUNIT" '(1.25 1.25))
(vla-zoomextents (vlax-get-acad-object))

Lee Mac 发表于 2022-7-6 00:14:00

我建议在图形完全打开后,使用s::startup positialization函数来评估最大化操作。
 
将以下内容复制到您的acaddoc。lsp:
(vl-load-com)
(setvar 'tilemode 1)
(setvar 'plinewid 0.0)
(setvar 'snapunit '(1.25 1.25))

(defun zoomextents ( )
   (vla-zoomextents (vlax-get-acad-object))
   (princ)
)
(if (= 'list (type s::startup))
   (setq s::startup (append s::startup '((zoomextents))))
   (defun-q s::startup ( ) (zoomextents))
)
(princ)

bababarghi 发表于 2022-7-6 00:23:47

 
谢谢marko_ribar。我采用李的方法。不过还是要谢谢你。
 
 
李,大师,你的代码正如期运行。但是,作为一个初学者,我试图为自己简化您的解决方案。根据你在这里的帖子,我还可以使用以下代码:
(defun-q zoomextents ( )
(vla-zoomextents (vlax-get-acad-object))
(princ))

(setq S::STARTUP (append S::STARTUP zoomextents))
 
而不是:
(defun zoomextents ( )
   (vla-zoomextents (vlax-get-acad-object))
   (princ)
)

(if (= 'list (type s::startup))
   (setq s::startup (append s::startup '((zoomextents))))
   (defun-q s::startup ( ) (zoomextents))
)
(princ)
 
我不能吗?
 
显然,你的方法背后有一个逻辑,这就是我试图理解的。

Lee Mac 发表于 2022-7-6 00:32:43

 
谢谢你,我很高兴代码能为你工作。
 
 
来自该[非常旧]帖子的“简化”版本假设s::启动符号为nil或之前已使用defun-q定义(以生成列表);如果无意中使用defun定义了s::启动符号,或者定义为在另一个启动文件的其他位置保存非列表值,那么这种方法将出错。
 
我最近的代码包含了更多的错误捕捉,如果s::启动符号不是一个列表,那么将使用defun-q正确地重新定义该符号。

Lee Mac 发表于 2022-7-6 00:41:56

在我上面的帖子之后,考虑使用defun-q表达式正确定义s::startup函数的情况:
 
现在,我们定义自己的函数,将其附加到启动函数中:
请注意,添加时,参数/局部变量声明列表现在显示在s::启动函数定义中:
如果该列表为零,则可以。但是,如果该列表包含局部变量,则生成的函数将出错,因为该列表将被解释为除法表达式:
_$ (defun-q mystartup ( / a b c ) (setq a "a" b "b" c "c") (princ))
MYSTARTUP
_$ mystartup
((/ A B C) (SETQ A "a" B "b" C "c") (PRINC))
_$ (defun-q s::startup ( ) (princ "\nMy startup.") (princ))
S::STARTUP
_$ s::startup
(nil (PRINC "\nMy startup.") (PRINC))
由于表观“除法表达式”的参数为零,因此导致以下错误:
当然,在将函数定义附加到s::启动定义之前,可以使用cdr删除该列表头,但这意味着函数定义的符号将是全局的,不再声明为局部变量。
 
在我看来,使用我最近的安排会产生一个更清晰的结果:
12
_$ (defun-q s::startup ( ) (princ "\nMy startup.") (princ))
S::STARTUP
_$ s::startup
(nil (PRINC "\nMy startup.") (PRINC))
所有变量都保持mystartup函数的局部性,我们在评估过程中没有错误:
15

Lee Mac 发表于 2022-7-6 00:58:05

 
哈哈谢谢
页: [1]
查看完整版本: '最大化显示#039;不是w