6

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

问题是:有没有办法做到这一点?我可以fas-vlx从AutoCAD外部编译吗?或者我可以启动 AutoCAD 并提供一个编译prv然后关闭 Autocad 的脚本吗?

4

3 回答 3

1

您必须启动 AutoCAD,但即便如此,它也会变得棘手,因为它需要使用未记录的函数

于 2013-08-02T03:27:31.290 回答
1

请注意,这有点像鲁布·戈德堡。但它有效!

我将使用 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 编辑器才能编译,只有在窗口激活时才会进行编译。

如果有人找到更好的方法。请告诉我!

于 2014-03-18T16:31:47.983 回答
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 窗口可能会保持一段时间,不要尝试激活它。让它保持几秒钟,它会自行关闭。

于 2018-09-25T16:24:36.693 回答