Автоматизация сборки для файлов AutoCAD Lisp
У меня огромный LISP
проект, я сделал prv
файл, который разрешает VLIDE
собрать этот проект в единый vlx
файл (он также компилирует fas
файл). Проблема в том, что невозможно скомпилировать проект из-за пределов AutoCAD или из командной строки, поэтому я не могу автоматизировать vlx
построение с использованием сценария.
Вопрос: есть ли способ сделать это? Могу ли я скомпилировать fas-vlx
снаружи автокад? Или я могу запустить AutoCAD, давая скрипт, который компилирует prv
а потом закрывает автокад?
5 ответов
Имейте в виду, что это немного Рубе Голдберг. но это работает!
Я буду демонстрировать с 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, а затем закрыть.
Что стоит отметить. Визуальный редактор LISP должен быть открыт для компиляции. Компиляция будет происходить только при активации окна.
Если кто-нибудь найдет лучший способ. Пожалуйста, дай мне знать!
Вы должны запустить AutoCAD, но, несмотря на это, он становится сложным, поскольку требует использования недокументированных функций.
После некоторых тестов я наконец смог сделать его немного быстрее и проще в использовании.
В командной строке вызовите 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 задержится на некоторое время, не пытайтесь его активировать. Пусть это будет на несколько секунд, и оно закроется само собой.
Я покопался, проверил ли ты эту ссылку
Если главной целью является оптимизация и защита исходного кода, вот проект с открытым исходным кодом, который позаботится об этом: