【问题标题】:Build automation for AutoCAD Lisp files为 AutoCAD Lisp 文件构建自动化
【发布时间】:2013-07-31 07:44:00
【问题描述】:

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

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

【问题讨论】:

    标签: compilation automation autocad autolisp


    【解决方案1】:

    您必须启动 AutoCAD,但即便如此,它也会变得很棘手,因为它需要使用 undocumented functions。

    【讨论】:

    • 我已经看过那套说明,没有文档是我提出问题的原因:)
    • 另外:我已经尝试过这些功能,但它们似乎只对编译 fas 文件有效,而不是 vlx
    【解决方案2】:

    请注意,这有点像 Rube Goldberg。但它有效!

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

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

    【讨论】:

    • 这个解决方案不是只生成 .fas 文件而不生成 .vlx 吗?
    【解决方案3】:

    经过这里的一些测试,我终于可以让它更快更易于使用。

    在命令行中,使用一些启动开关调用 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 窗口可能会保持一段时间,不要尝试激活它。让它保持几秒钟,它会自行关闭。

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 2017-07-19
      • 2011-10-25
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多