ADN Club > VBA
Python & ActiveX/COM Autocad
Khasan Mamaev:
Ну вот, не прошло и года, и новый ролик, вставка выносок Autocad с автоматической нумерацией:
--- Код - Python [Выбрать] ---### Autocad MLeaders Insertion### ©2017, Khasan Mamaev### www.dynamobim.ru import System marsh = System.Runtime.InteropServices.Marshalapp = marsh.GetActiveObject("Autocad.Application")aDoc = app.ActiveDocumentmSp = aDoc.ModelSpace def ptA(p,x1,y1): return System.Array[float]([p[0],p[1],p[2],p[0]+x1,p[1]+y1,p[2]]) x1 = 500y1 = 500p0 = System.Array[float]([0,0,0]) pref = aDoc.Utility.GetString(False, "Enter prefix: ")j = aDoc.Utility.GetInteger("Enter start num: ") while True: pt = aDoc.Utility.GetPoint(p0,'GetPoint: ') points = ptA(pt,x1,y1) lead = mSp.AddMLeader(points, 0) lead.TextString = pref + str(j) j += 1
Khasan Mamaev:
Записал ролик с инструкцией как подключать IronPython к Notepad++
dlobyntsev:
Доступ к AutoCAD можно получить не только из IronPython, дальнейшее развитие которого, мягко говоря, находится под вопросом, но и из стандартной реализации Python, используя модуль pywin32 https://sourceforge.net/projects/pywin32:
--- Код - Python [Выбрать] ---import win32com.clientapp = win32com.client.Dispatch("AutoCAD.Application") Дальше - всё по COM модели
Khasan Mamaev:
Такой способ подключения из Питон к Автокад для меня не секрет, но возникают трудности при создании дотнетовских массивтв необходимых для СОМ. Ну и разговоры о скорой кончине АйронПайтон имеют давнюю историю, однако АйронПайтон не прекращают прикручивать к различным серьёзным программных комплексам.
dlobyntsev:
Массивы достаточно просто создаются, наример один из самых распространенных случаев - преобразование в массив чисел с плавающей точкой (variant array of doubles) для координат:
--- Код - Python [Выбрать] ---import win32com.clientfrom pythoncom import VT_R8, VT_ARRAYpythoncoord = [x, y, z]acadcoord = win32com.client.VARIANT(VT_ARRAY | VT_R8, pythoncoord)IronPython, к сожалению, продолжают прикручивать к различным серьёзным программных комплексам, потому что другой нормально работающей реализации Python для .NET на данный момент просто не существует. Есть несколько проектов, типа pythonnet, но без танцев с бубном они с тем же автокадом не работают. IronPython вряд ли в обозримом будущем перейдёт на поддержку Python 3x, постепенно поддержка ветки 2х будет свёрнута в первую очередь со стороны разработчиков различных модулей (а множество доступных модулей практически на все случаи жизни - одно из самых весомых преимуществ Python для инженера, когда разработка программ - возможность повысить производительность и облегчить себе жизнь). Автодеск, например, с IronPython в Revit, наступает ровно на те же грабли, что и с LISP в автокаде. Кому сейчас реально нужен лисп вне автокада? Никому. Но заменить его чем-то невозможно - у пользователей просто горы кода на лиспе накопилось за все годы.
Для инженера же Python - один из лучших языков за счёт относительной простоты и наличия огромного количества модулей.
Навигация
Перейти к полной версии