构建AutoCAD Lisp文件的自动化

时间:2013-07-31 07:44:01

标签: compilation automation autocad autolisp

我有一个巨大的LISP项目,我创建了一个prv文件,允许VLIDE将此项目编译成单个vlx文件(它编译也是fas文件。问题是无法从autocad外部或从命令提示符编译项目,因此我无法使用脚本自动化vlx构建。

问题是:有什么办法可以做到这一点吗?我可以从autocad外部编译fas-vlx吗?或者我可以启动autocad给出编译prv的脚本然后关闭autocad吗?

5 个答案:

答案 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)

我做了一些挖掘,你看过这个链接

http://www.thefreecountry.com/compilers/commonlisp.shtml

答案 3 :(得分:0)

如果优化和源代码保护是总体目标,那么这是一个开源项目,负责这个:

http://www.lt-extender.com/LT-Extender/englisch/default.htm

答案 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窗口可能会保留一段时间,请勿尝试激活它。持续几秒钟,它会自行关闭。