我有一个巨大的LISP
项目,我创建了一个prv
文件,允许VLIDE
将此项目编译成单个vlx
文件(它编译也是fas
文件。问题是无法从autocad外部或从命令提示符编译项目,因此我无法使用脚本自动化vlx
构建。
问题是:有什么办法可以做到这一点吗?我可以从autocad外部编译fas-vlx
吗?或者我可以启动autocad给出编译prv
的脚本然后关闭autocad吗?
答案 0 :(得分:1)
您必须启动AutoCAD,但即使如此,它也会变得棘手,因为它需要使用undocumented functions。
答案 1 :(得分:1)
请注意,这有点像Rube Goldberg。但它有效!
我将与Autocad 2014展示。
首先,您需要创建一个包含一些未记录的命令的Autocad Script文件。我将我的名字命名为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编辑器必须打开才能编译,编译只会在窗口激活时发生。
如果有人找到更好的方法。请告诉我!
答案 2 :(得分:0)
我做了一些挖掘,你看过这个链接
答案 3 :(得分:0)
如果优化和源代码保护是总体目标,那么这是一个开源项目,负责这个:
答案 4 :(得分:0)
在这里进行了一些测试之后,我终于可以使它更快,更易用了。
在命令行中,使用一些启动开关来调用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窗口可能会保留一段时间,请勿尝试激活它。持续几秒钟,它会自行关闭。