wayne murphy 发表于 2022-7-5 19:40:17

组合两个lisp';s

你好
我是这个论坛的新手。我已经使用lisp有一段时间了,但并不擅长编写复杂的lisp。在本例中,我想合并两个LISP。
第一个打开模板,第二个从附着到模板的图形执行查询,并在完成后取消附着文件。我想在一个命令中有这些,这样它将打开图形,执行查询,unattach,然后最大化。它们单独工作很好,但如果结合使用,将节省时间并节省用户步骤。我有一个发誓要打墙的脑袋,我不知道我错过了什么,但如果有任何困难或帮助,我将不胜感激。
 
Lisp程序1
(defun c:openD_NS&PEI nil
(vla-open (vla-get-documents (vlax-get-acad-object))
         "V:\\symbol\\smt\\Construction_blocks\\1-01_D_SIZE_CONSTRUCTION_PACKAGE_TEMPLATE - Nova Scotia.dwg":vlax-false))
 
 
Lisp 2
(defun c:executequery (/)(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e")))

sergiu_ciuhnenc 发表于 2022-7-5 20:00:46

请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。

BIGAL 发表于 2022-7-5 20:13:21

可能是这样的,但另存为脚本SCR脚本可以处理打开的dwg并继续运行。
 

(defun c:OpenD_NS&PEI nil
(vla-open (vla-get-documents (vlax-get-acad-object))
"V:\\symbol\\smt\\Construction_blocks\\1-01_D_SIZE_CONSTRUCTION_PACKAGE_TEMPLATE - Nova Scotia.dwg":vlax-false)
(ade_errsetlevel 2)
(ade_qryexecute)
(foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e"))
)

wayne murphy 发表于 2022-7-5 20:18:38

我已经试过了,但没有成功。加载了模板,但停止了。
我发现以下lisp更适合打开模板:
(defun c:open11x17_NS&PEI (/ cd vgad vgao vgd)
(vl-load-com)
(setq vgao (vlax-get-acad-object))
(setq vgad (vla-get-activedocument vgao))
(setq vgd (vla-get-documents vgao))
(setq cd "V:/symbol/smt/Construction_blocks/1-0_11x17_SIZE_CONSTRUCTION_PACKAGE_TEMPLATE - Nova Scotia.dwg")
(if
   (= 0 (getvar "SDI"))
   (vla-activate (vla-open vgd cd))                               ; if sdi = 0
   (vla-sendcommand vgad (strcat "(command \"_open\")\n" cd "\n")(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e")); if sdi = 1
   )                              ; if
(princ)
)
 
并且在模板打开后仍然希望它运行这个lisp
(defun c:executequery (/)(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e")))

BIGAL 发表于 2022-7-5 20:35:08

如果您希望它自动运行,那么只需将lisp添加到ACADDOC。lsp或通过Appload添加到您的历史记录中,使其自动加载。确保在defun(c:executequery)之外添加一行额外的代码,它将运行,但也允许您手动执行。

wayne murphy 发表于 2022-7-5 20:47:39

谢谢你的解决方案。这对我来说很有效。我把下面显示的代码放在acaddoc中,它成功了。但是,我只想分离附加到模板的特定文件。我曾尝试将路径放在lisp中(替换为x),但它没有分离路径,也没有给我带来错误或任何其他问题。如何指定特定文件。下面这行是我试过的。
(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach C:\\Temp folder extract from spatial\\File saved from Spatial.dwg))(command ".zoom" "e")
页: [1]
查看完整版本: 组合两个lisp';s