Python & ActiveX/COM Autocad

Автор Тема: Python & ActiveX/COM Autocad  (Прочитано 229984 раз)

0 Пользователей и 7 Гостей просматривают эту тему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #135 : 07-05-2019, 11:19:33 »
Я правильно понимаю, что смогу написать модуль на С++ с использованием ObjectARX и потом им пользоваться в программе на Python?
Я не понимаю к чему такие сложности. Для того, чтобы писать для AutoCAD непрофессиональному программисту оптимально использовать AutoCAD .NET API (C# или VB.NET) . Он позволяет делать большинство из того, что можно сделать при помощи ObjectARX и обладает огромным количеством примеров (большинство из них на C#).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SilverWork

  • ADN OPEN
  • Сообщений: 13
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #136 : 07-05-2019, 20:51:04 »
Дело в том, что я особо не разбирался с C#, т.к. я не программист, а проектировщик, мне показалось, что в любом случае не буду использовать все его приемущества, а со всеми недостатками придется иметь дело. Python меня привлек простотой изучения, наличием всевозможных плюшек, облегчающих процесс написания программ - динамическая типизация, динамические массивы, множество готовых функций для работы со строками и списками и тд. Также иногда делюсь своими наработками с коллегами и при использовании AutoLisp или Python не надо задумываться над совместимостью с разными версиями AutoCad. Пробовал также VBA, но не пошло.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #137 : 07-05-2019, 22:55:35 »
SilverWork,
Еще раз.
1) Python не поддерживается Autodesk для AutoCAD.
2) Примеров использования Python с AutoCAD очень мало. Во всяком слуачае по сравнению с VisualLisp/VBA/C#/C++
3) Непрограммисту (да и программисту) разбираться с тонкостями использования COM через Python в AutoCAD очень проблематично.
Так что всё на свой страх и риск.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SilverWork

  • ADN OPEN
  • Сообщений: 13
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #138 : 08-05-2019, 11:25:10 »
Ну мы находимся в теме  Python & ActiveX/COM Autocad, следовательно она для тех, кто хочет разобраться в этих тонкостях. Да, конечно, есть свои плюсы и минусы. Все зависит от конкретной задачи. В моем случае не требуется много взаимодействовать с Autocad. Приложение собирает какие-то данные из чертежа (атрибуты блоков, значения из таблиц, длины линий и тд), потом внутри себя из обрабатывает и выдает результат обратно в Autocad в нужном мне виде (расчеты, таблицы, рисует каки-либо примитивы). И основная часть работы - это и есть обработка данных и в этом у Python есть преимущества, остается только написать интерфейс взаимодействия с Autocad, что вызывает трудности, но не смертельно.

Оффлайн SilverWork

  • ADN OPEN
  • Сообщений: 13
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #139 : 10-05-2019, 21:37:35 »
Столкнулся с проблемой, что очень медленно осуществляется взаимодействие программы с Autocad. Например, получение атрибутов сотни блоков занимает секунд 10-15, рисование объектов также заметно медленнее, чем через AutoLisp. Есть способы исправить это или это особенности работы через COM?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #140 : 10-05-2019, 22:22:29 »
Есть способы исправить это или это особенности работы через COM?
COM между процессами приводит к таким задержкам. Особенно если эти процессы разной разрядности (32/64).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн dlobyntsev

  • ADN Club
  • Сообщений: 18
  • Карма: 8
Re: Python & ActiveX/COM Autocad
« Ответ #141 : 17-05-2019, 16:46:23 »
Есть способы исправить это или это особенности работы через COM?
Для ускорения нужно максимально пользоваться средствами самого када, например select с фильтрами вместо select + перебор, и т.п. Но работа через COM будет всегда несколько медленной, хотя для большинства инженерных задач и достаточной.
Передача через COM каду данных и параметров с преобразованием к нужному типу - отдельная головная боль, но это больше камень в огород com библиотек питона.
Организовать запуск команды на питоне из када - тоже квест. Решаемый, но я нашёл путь только через жуткие костыли.
Питон удобно использовать, если нужно вывести результаты расчётов или построений в кад и получить dwg. Плотно работать с кадом можно, но не совсем удобно.
К сожалению, на данный момент с точки зрения Autodesk в их продуктах нет места не .net языкам и питону в частности. В автокад - только через COM, который непонятно сколько ещё проживёт. В ревите реализована только поддержка .net  вариации питона версии 2, и переход на третью ветку даже в перспективе не виден.
Если нужно плотно программировать под продукты Autodesk, лучше выбрать C#. Порог входа чуть выше, но потенциальных проблем намного меньше.

Оффлайн SilverWork

  • ADN OPEN
  • Сообщений: 13
  • Карма: 1
Re: Python & ActiveX/COM Autocad
« Ответ #142 : 17-05-2019, 17:22:26 »
Тут будет небольшой оффтоп. Я поразбирался с C# и вроде все выглядит не сложно, но один момент меня смущает - это отладка кода. С лиспом и питоном все ясно: запустил, увидел косяки, исправил, повторил... и так хоть 100 раз. В случае с C#, как я понимаю, придется после каждой попытки перезагружать AutoCad, т.к. нет возможности выгрузить dll. Пытался поискать на форумах, также здесь была тема о выгрузке, но, как я понял, способ не простой и не всегда работает. Хочется сразу писать на том, что будет работать хорош и быстро, но вот процесс отладки кода меня, скажем прямо, пугает.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Python & ActiveX/COM Autocad
« Ответ #143 : 17-05-2019, 17:38:59 »
Off-Topic: показать
Такая же беда... Ну что, написал лиспик для автозагрузки библиотеки - и вперед, с песнями ;)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #144 : 17-05-2019, 20:58:48 »
Хочется сразу писать на том, что будет работать хорош и быстро, но вот процесс отладки кода меня, скажем прямо, пугает.
Не пугайся. Все так делают. Нужно писать максимально чистый код сразу - это сократит количество запусков AutoCAD для отладки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Python & ActiveX/COM Autocad
« Ответ #145 : 19-05-2019, 22:51:20 »
Это если есть понимание, что и как работает. А вот если его нет или оно вызывает сомнения...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #146 : 08-06-2019, 11:56:38 »
Добрый день!
Подскажите, как обработать события автокада из python.
Есть ли подходящие примеры?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #147 : 08-06-2019, 16:22:16 »
Есть ли подходящие примеры?
Примеров нет. Во всяком случае мне они не известны. Так что пробуй делать по аналогии с Word/Excel:
https://win32com.goermezer.de/microsoft/ms-office/events-in-microsoft-word-and-excel.html
Подписка на события происходит через win32com.client.DispatchWithEvents
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #148 : 08-06-2019, 17:10:13 »
Спасибо, попробую!

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 10
Re: Python & ActiveX/COM Autocad
« Ответ #149 : 11-07-2019, 13:23:40 »
Допустим, у меня активирован режим объектной привязки, а конкретно "конточка", "центр", "узел", для удобства выделения объектов на чертеже я программно деактивирую на время привязку с помощью:

Код - Python [Выбрать]
  1. aDoc.ObjectSnapMode = False

Но когда потом я программно пытаюсь восстановить привязку, установив этому свойству значение True, режим привязки не активируется, все поставленные галочки типа  "конточка", "центр", "узел" пропадают. Есть ли способ получить доступ к настройкам привязки и активировать их программно? Либо как вариант, эмулировать нажатие F3 с клавиатуры. Не могу найти этот момент в документации.