我有一个巨大的LISP
项目,我制作了一个prv
文件,允许将VLIDE
这个项目编译成一个vlx
文件(它也编译fas
文件)。问题是无法从 AutoCAD 外部或命令提示符编译项目,因此我无法vlx
使用脚本自动构建。
问题是:有没有办法做到这一点?我可以fas-vlx
从AutoCAD外部编译吗?或者我可以启动 AutoCAD 并提供一个编译prv
然后关闭 Autocad 的脚本吗?
我有一个巨大的LISP
项目,我制作了一个prv
文件,允许将VLIDE
这个项目编译成一个vlx
文件(它也编译fas
文件)。问题是无法从 AutoCAD 外部或命令提示符编译项目,因此我无法vlx
使用脚本自动构建。
问题是:有没有办法做到这一点?我可以fas-vlx
从AutoCAD外部编译吗?或者我可以启动 AutoCAD 并提供一个编译prv
然后关闭 Autocad 的脚本吗?
您必须启动 AutoCAD,但即便如此,它也会变得棘手,因为它需要使用未记录的函数。
请注意,这有点像鲁布·戈德堡。但它有效!
我将使用 Autocad 2014 进行演示。
首先,您需要制作一个包含一些未记录命令的 Autocad 脚本文件。我命名了我的 build.scr
(请注意,vlisp-compile-list
任何地方都没有记录。如果您确实找到了一些文档,请告诉我!)
vlide
(
vlisp-compile-list
'st
(
list
(strcat (getenv "UserProfile") "\\Documents\\AutocadFiles\\gui.lsp"))
...
)
(strcat (getenv "UserProfile") "\\Documents\\AutocadFiles\\CompiledLisp.fas")
)
然后制作一个包含以下内容的批处理文件:
@echo off
cd c:\Program Files\Autodesk\AutoCAD 2014
start acad.exe /b build.scr
它启动 AutoCAD 并运行指定的脚本
接下来您需要下载并安装AutoHotKey
并为它构建一个这样的脚本:
Run, BuildLisp.bat
sleep, 30000
WinActivate, Autodesk AutoCAD 2014 - [Drawing1.dwg]
WinActivate, Visual LISP for AutoCAD <Drawing1.dwg>
WinActivate, Autodesk AutoCAD 2014 - [Drawing1.dwg]
sleep, 10000
WinClose, Autodesk AutoCAD 2014 - [Drawing1.dwg]
当您激活此脚本时。它应该打开 AutoCAD 并将所有 LSP 文件构建到一个 .FAS 中,然后关闭。
注意事项。必须打开 Visual LISP 编辑器才能编译,只有在窗口激活时才会进行编译。
如果有人找到更好的方法。请告诉我!
经过这里的一些测试,我终于可以让它更快更容易使用。
在命令行中,使用一些启动开关调用 autocad。您需要一张空图纸,将其命名为 dummy.dwg。/b
代表您将运行的脚本:
"C:\Program Files\Autodesk\AutoCAD 2019\acad.exe" "C:\somefolder\dummy.dwg" /nologo /nossm /b "C:\somefolder\CompileLispProjects.scr"
在 .scr 文件中:
;;MAKE VLISP OPEN BUT LET AUTOCAD ACTIVE. YOU NEED VLISP OPEN TO LOAD VLISP-* FUNCTIONS
(C:VLIDE T)
;; TRY TO RUN VLISP-MAKE-PROJECT FUNCTION
(setq errobj (vl-catch-all-apply 'function-which-will-use-vlisp-make-project-fas))
;; IF ANY ERROR COMES OUT, STOP AND ALERT
(if (vl-catch-all-error-p errobj)
(progn
(princ "\n***ERROR COMPILING SOMETHING***\n")
(princ (vl-catch-all-error-message errobj))
(princ)
);_progn
;; ALL GOOD, QUIT AUTOCAD
(progn
;; THERE'S A SAFE LOCK IN QUIT COMMAND, SO SAVE A DUMMY FILE AND QUIT AGAIN WITH IT SAVED
(command-s "._QUIT" "_N" "")
(command-s "._QUIT" "")
);_progn
);_if
;; IT'S IMPORTANT TO HAVE THE LAST LINE EMPTY (<ENTER>)
该代码中的技巧是(C:VLIDE T)
. 它没有记录,我发现它是因为我知道 AutoLISP 有很多未记录的功能。也尝试一下nil
,您会看到 VisualLISP 将成为活动窗口,锁定您的 AutoCAD 以执行下一个命令(因此您需要单击 AutoCAD 中的某个位置以激活其窗口并使代码正常运行)。
注意:当 AutoCAD 关闭时,您的 VisualLISP 窗口可能会保持一段时间,不要尝试激活它。让它保持几秒钟,它会自行关闭。