Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей Балышев от 26-09-2017, 15:51:42

Название: Из Python через COM API или .NET API?
Отправлено: Алексей Балышев от 26-09-2017, 15:51:42
Добрый день.
Использую IronPython для доступа к функциям AutoCAD через COM API из других приложений, например Dinamo Studio или из макроса Revit. 
Пример кода ниже. В целом все программы работают, эффект автоматизации есть.

Вопрос: правильно ли я делаю, что использую COM API? Слышал, что COM API - не развивается и со временем закроется.
Есть ли возможность использовать .NET API для внешнего взаимодействия с AutoCAD?
Или я вообще вопрос неправильно формулирую, может есть какая-то общая информация по этой теме.

Код - Python [Выбрать]
  1. import System
  2. AcadApp = System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application")
  3. AcadApp.ActiveDocument.Import(FileName, InsertionPoint, ScaleFactor)
Название: Re: Из Python через COM API или .NET API?
Отправлено: Александр Ривилис от 26-09-2017, 16:24:36
Есть ли возможность использовать .NET API для внешнего взаимодействия с AutoCAD?
Нет. AutoCAD .NET API можно использовать только изнутри AutoCAD (т.е. создать .NET dll-файл и загрузить его внутрь процесса AutoCAD командой _NETLOAD или аналогичным образом).
Есть еще RealDWG (http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=770257) (но это отдельное и недешевое API), которое позволяет работать с dwg-файлами вне AutoCAD.
Название: Re: Из Python через COM API или .NET API?
Отправлено: Алексей Балышев от 26-09-2017, 16:29:01
AutoCAD .NET API можно использовать только изнутри AutoCAD
Спасибо. То есть для внешнего взаимодействия с процессом AutoCAD  - только COM API, правильно?
Название: Re: Из Python через COM API или .NET API?
Отправлено: Александр Ривилис от 26-09-2017, 16:31:02
То есть для внешнего взаимодействия с процессом AutoCAD  - только COM API, правильно?
Да. Именно так.
Название: Re: Из Python через COM API или .NET API?
Отправлено: Алексей Балышев от 27-09-2017, 07:29:36
Да. Именно так.
Нашел в справке статью Out-of-Process versus In-Process (http://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-C8C65D7A-EC3A-42D8-BF02-4B13C2EA1A4B), в которой есть способ работы извне, но с .NET. Для этого рекомендуется создать .NET приложение, затем через COM запустить AutoCAD и свое приложение в нем, затем обращаться к  приложению через отправку команд (тоже через COM).
Честно говоря, это кажется странным - манипулировать приложением через команды. Кто-нибудь пишет внешние (Out-of-Process) приложения таким образом?
Название: Re: Из Python через COM API или .NET API?
Отправлено: Александр Ривилис от 27-09-2017, 08:59:35
Честно говоря, это кажется странным - манипулировать приложением через команды. Кто-нибудь пишет внешние (Out-of-Process) приложения таким образом?
Если в самом AutoCAD COM/ActiveX API нет нужных методов, которые есть в AutoCAD .NET API, то этот способ имеет право на жизнь.
Название: Re: Из Python через COM API или .NET API?
Отправлено: Дмитрий Загорулькин от 27-09-2017, 11:52:24
Плюс ещё, с большой вероятностью, такое "комбинированное" приложение будет работать быстрее, чем "чистый COM".