Python & ActiveX/COM Autocad

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

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

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

  • Administrator
  • *****
  • Сообщений: 13488
  • Карма: 1734
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #525 : 22-04-2022, 17:26:47 »
choppylion,
Вместо
Код - Python [Выбрать]
  1. src_doc.CopyObjects(src_obj_array, new_block)
должно быть
Код - Python [Выбрать]
  1. src_doc.CopyObjects(src_obj_array, dst_doc.Blocks)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн choppylion

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #526 : 23-04-2022, 21:08:29 »
choppylion,
Вместо
Код - Python [Выбрать]
  1. src_doc.CopyObjects(src_obj_array, new_block)
должно быть
Код - Python [Выбрать]
  1. src_doc.CopyObjects(src_obj_array, dst_doc.Blocks)
Пробовал так. Код успешно отрабатывает, но блок так и не появляется среди доступных в панели Insert.

Но обнаружил интересную вещь: мой изначальный блок состоит из 6 отдельных объектов, все они передаются в функцию CopyObjects как один блок в таком виде:
Код - Python [Выбрать]
  1. win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, block)

и CopyObjects возвращает мне не 1 блок, как я ожидаю, а 6 отдельных объектов:
Цитировать
result = {tuple: 6} (<COMObject CopyObjects>, <COMObject CopyObjects>, <COMObject CopyObjects>, <COMObject CopyObjects>, <COMObject CopyObjects>, <COMObject CopyObjects>)
 0 = {CDispatch} <COMObject CopyObjects>
 1 = {CDispatch} <COMObject CopyObjects>
 2 = {CDispatch} <COMObject CopyObjects>
 3 = {CDispatch} <COMObject CopyObjects>
 4 = {CDispatch} <COMObject CopyObjects>
 5 = {CDispatch} <COMObject CopyObjects>

Может быть, я как-то не так "подготавливаю" свой динамический блок для копирования, что он потом распадается на составные объекты?

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

  • Administrator
  • *****
  • Сообщений: 13488
  • Карма: 1734
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #527 : 23-04-2022, 21:49:43 »
new_block = dst_doc.Blocks.Add(insertion_point, name)
Этого быть не должно. Иначе ты сразу создаешь блок, который неможет быть динамическим.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн choppylion

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #528 : 23-04-2022, 22:35:49 »
Танцы с бубном вокруг Array не привели к успеху — Автокад жаловался на некорректный размер массива.
Проблема была в том, что при передаче описания блока с составными объектами через Array в CopyObjects, сама сущность блока терялась, и передавались уже его внутренние объекты.

Удалось костыльно пофиксить следующим образом: создаем в исходном документе еще один блок, в который включаем референс нужного нам блока.
Если "запаковать" исходный блок в еще один блок упомянутым способом, то при его распаковке для передачи в CopyObjects уже остается нужный нам исходный блок, который успешно появляется в меню Insert.
« Последнее редактирование: 24-04-2022, 11:14:38 от choppylion »

Оффлайн Шашлык

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #529 : 25-05-2022, 03:19:04 »
Всем привет!
Никто не сталкивался выбором одного из запущенных экземпляров autocad?
Если в автокаде включена настройка, что при запуске файла запускается новый экземпляр автокада, есть ли возможность подключится к нужному мне экземпляру? То есть это не новый документ открывается в уже созданном, а именно новый процесс.
 

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

  • Administrator
  • *****
  • Сообщений: 13488
  • Карма: 1734
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #530 : 25-05-2022, 08:54:50 »
Шашлык,
Если вкратце, то возможности выбрать один из запущенных экземпляров одной и той же версии AutoCAD нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение