你如何在取消符中编码
我试图修改现有的lisp例程,以包括一个函数,供用户(即我)取消运行该例程。当lisp运行时,似乎没有办法取消它。(对于大型dwg,可能需要很长很长的时间才能完成)我认为您不必在程序中编写退出或退出函数,但显然对于这一个,我会这么做,因为退出的唯一方法是按住CTRL+SHFT+ESC并终止ACAD进程。谢谢。 你的代码是在运行循环还是什么?还有什么能让这个功能运行这么长时间? 听起来像是在处理一个大数据集。。。可能是因为代码效率低下(不确定,因为没有发布任何代码)。
在任何情况下,Ctrl+Shift与此无关,只有当您点击Esc时,例程才会由于内置(或本地化的)*错误*处理程序而停止。 我认为OP意味着Ctrl+shift+Esc打开任务管理器,然后从中终止acad。exe进程。
但是是的,Lisp程序里面可能出了什么问题。可能是一个永远不会结束的循环,或者代码运行效率极低/经过太多迭代。我们只能肯定地说,如果我们可以看到代码-所以等待操作返回更多信息。
同意,这是最有可能的罪魁祸首。
1+ 对不起,这是代码。
我将其放入宏中,以便在关闭dwg时运行。但是,如果我在一个大的dwg集(150多个)布局上运行代码,那太可怕了。当我试图用ESC取消它时,它什么都不做。所以,我必须等待一个小时,否则就终止这个过程。如果我有时间,这没什么大不了的,但如果我忘记了,我需要保存这幅画(就像我刚才做的那样),那么我就完了。我必须允许它完成才能保存我的更改。
(vl-load-com)
(defun c:zza (/ *error* oldCtab)
(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)
)
我觉得那看起来很熟悉。
... 那么为什么不先检查未保存的更改呢?
(vl-load-com)
(defun c:ZoomAll (/ *error* oldCtab acApp mspace)
(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 (= 0 (getvar 'dbmod))
(if (and (setq oldCtab (getvar 'ctab))
(setq acApp (vlax-get-acad-object))
)
(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)
)
)
)
(prompt "\n** Unsaved changes, save and try again ** ")
)
(*error* nil)
)
[皮特·坎贝尔声音]
... 像这样的事情。
http://gregjhunter.files.wordpress.com/2010/08/pete.jpg
#疯子 在遍历布局时可能会更快,
而不是:
(foreach tab (layoutlist)
....
)
使用此选项:
(setq olayouts(vla-get-layouts doc))
(vlax-for olayout olayouts
;|rest code here|;
)
未测试 我最近将我的更改为:
(defun c:ZAL (/ ctab)
;; Zoom extents of viewport in All Layouts (excluding Model)
;; Alan J. Thompson
(or *Acad* (setq *Acad* (vlax-get-acad-object)))
(or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument *Acad*)))
(setq ctab (getvar 'CTAB))
(foreach layout (layoutlist)
(setvar 'CTAB layout)
(vla-put-mspace *AcadDoc* :vlax-false)
(vla-zoomwindow *Acad* (vlax-3d-point (getvar 'LIMMIN)) (vlax-3d-point (getvar 'LIMMAX)))
)
(setvar 'CTAB ctab)
(princ)
)
页:
[1]