Использование приложения lisp из AutoCAD с Python 3.5
У меня есть 6000+ .gml файлов, которые содержат информацию о кадастровых частицах. У меня также есть приложение.lsp для AutoCAD (я не писал код), которое читает файл.gml и рисует частицу в файле.dxf. Проблема заключается в том, что приложение может принимать только один файл.gml в качестве входных данных, поэтому слишком много работы выполняется вручную.
Когда я писал скрипт для загрузки всех этих файлов.gml с сервера в Python 3.5., Я хотел бы знать, есть ли способ запуска приложений ACAD с помощью Python, чтобы я мог просмотреть все файлы и запустить приложение? Спасибо за чтение.
2 ответа
AutoCAD можно контролировать с помощью автоматизации COM. Python может сделать это с помощью Марка Хаммонда pywin32
пакет (несмотря на название, доступны 64-битные сборки).
Вы закончите с чем-то вроде
import glob
import win32com.client
GML_FILES = r"c:\users\mario\documents\gml\*.gml"
# For other versions of AutoCAD see
# http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-0EDC04D5-2ACB-4555-B5AC-936D54A9FF61
acad = win32com.client.Dispatch("AutoCAD.Application.22") # AutoCAD 2018
for gml_file in glob.glob(GML_FILES):
# I spent quite a while trying to fill this in,
# but (a) the documentation is very short on examples,
# and (b) I don't have a copy of AutoCAD
# which makes it very hard to test - sorry!
Вы можете обратиться к http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-86E44F95-2372-461D-862C-426038A6A24F
Существует пакет под названием PyAutoCad, который поможет вам взаимодействовать с AutoCAD COM. https://pypi.python.org/pypi/pyautocad/. Устанавливается с PIP:
pip install pyautocad
Таким образом, ваш сценарий LISP может быть вызван как команда. Так что я думаю, что вы используете
GMLIMPORT "PATHTOGML"
когда ваш скрипт на LISP называется GMLIMPORT. Вы можете автоматизировать это таким образом
from pyautocad import Autocad
acad = Autocad()
for gml in gmls:
acad.doc.SendCommand("GMLIMPORT " + gml)
Это требует, чтобы Autocad был запущен. Проверьте документацию pyautocad, чтобы запустить autocad, если он не запущен.