Python & ActiveX/COM Autocad

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

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

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

  • Administrator
  • *****
  • Сообщений: 11972
  • Карма: 1560
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #360 : 12-10-2020, 12:35:40 »
Если только все обращения к свойствам объектов обернуть в:
Не хватает задержки перед очередным обращением в случае except.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 6
Re: Python & ActiveX/COM Autocad
« Ответ #361 : 12-10-2020, 12:40:17 »
Ну да, тогда импортировать time и  задавать выдержку с помощью time.sleep(0.5). И цикл делать не вечный.
У меня тоже скрипты с COM работают как повезет, приходится обрабатывать такие ошибки.

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 132
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #362 : 12-10-2020, 15:20:16 »
Ну что же, спасибо за ответы... Видимо, я везучий)))
Жаль что такая засада с COM вылезает.
Как то я привык python как почти замену командной строки автокада использовать. Учитывая наличие массы библиотек, расчетов
можно делать вещи, которые изнутри автокада недоступны именно потому, что перед загрузкой внутрь автокада приложение нужно написать, отладить, откомпилировать...
А через COM - практически появилась мысль - сразу попробовал, потестировал, извлек инфо из чертежа, обработал, расчитал и обратно построил... На C# это думаю, недоступно просто потому что усилий и времени потребуется в сотни раз больше.

Оффлайн AndONE

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #363 : 05-11-2020, 14:06:30 »
Добрый день.
Хочу автоматизировать процесс через python + com.
Мне нужно в текущем чертеже к выборке применять "BURST"
Но дело в том, что этого метода в com модели нет. Я планирую использовать sendcommand, но не понимаю, как мне передать туда требуемый массив объектов? Подскажите?

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

  • Administrator
  • *****
  • Сообщений: 898
  • Карма: 148
Re: Python & ActiveX/COM Autocad
« Ответ #364 : 05-11-2020, 14:22:24 »
burst - отдельная команда, входящая в состав ExpressTools (если не ошибаюсь).
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 11972
  • Карма: 1560
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #365 : 05-11-2020, 15:03:49 »
AndONE,
IMHO - это извращение. Для того, чтобы проделать эту процедуру, тебе придётся ко всему прочему еще и использовать Lisp, так как через COM-модель нельзя передать объекты в командную строку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AndONE

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #366 : 05-11-2020, 15:10:08 »
AndONE,
IMHO - это извращение. Для того, чтобы проделать эту процедуру, тебе придётся ко всему прочему еще и использовать Lisp, так как через COM-модель нельзя передать объекты в командную строку.
Подскажите тогда через Python нормальный способ?

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

  • Administrator
  • *****
  • Сообщений: 11972
  • Карма: 1560
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #367 : 05-11-2020, 15:16:29 »
Подскажите тогда через Python нормальный способ?
Через Python в принципе не может быть нормального способа - это не поддерживаемый с точки зрения AutoCAD язык программирования. И кроме того COM/ActiveX интерфейс AutoCAD уже очень сильно устарел и не позволяет то, что легко делается при помощи (например) AutoCAD .NET API. Фактически тебе потребуется переписать BURST на Python.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AndONE

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #368 : 05-11-2020, 15:22:34 »
В общем-то я так и думал. Дело в том, что основной язык на котором разрабатывается приложение выбран именно Python.
И COM модели полностью хватает для закладыавемого функционала, за исключением этой функции (BURST).
Подскажите пжл, даже если это и извращение. Какую команду в LISP гуглить, чтобы передать объекты через sendcommand?
У меня будет на входе либо selectionset либо массив объектов, к которым надо применить BURTS.

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

  • Administrator
  • *****
  • Сообщений: 11972
  • Карма: 1560
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #369 : 05-11-2020, 15:27:22 »
Какую команду в LISP гуглить, чтобы передать объекты через sendcommand?
В lisp нет команд - одни функции. В данном случае тебе придётся в командную строку передать метки (Handle) всех объектов с вызовом функции (handent "метка"). Если объектов будет много, то через командную строку ты их передать не сможешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AndONE

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #370 : 05-11-2020, 15:30:14 »
Какую команду в LISP гуглить, чтобы передать объекты через sendcommand?
В lisp нет команд - одни функции. В данном случае тебе придётся в командную строку передать метки (Handle) всех объектов с вызовом функции (handent "метка"). Если объектов будет много, то через командную строку ты их передать не сможешь.
окей, спасибо.

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

  • Administrator
  • *****
  • Сообщений: 11972
  • Карма: 1560
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #371 : 05-11-2020, 15:34:24 »
Я посмотрел исходники BURST (он действительно в Express Tools). Можно сильно упростить себе жизнь если воспользоваться оттуда функцией (BURST-ONE) - она выполняет BURST по одному объекту за раз. Поэтому можно выполнить в цикле строку при помощи Sendcommand:
"(burst-one (handent \"здесь метка примитива\")) "
Надеюсь, что это даст результат.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AndONE

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #372 : 05-11-2020, 15:48:23 »
Я посмотрел исходники BURST (он действительно в Express Tools). Можно сильно упростить себе жизнь если воспользоваться оттуда функцией (BURST-ONE) - она выполняет BURST по одному объекту за раз. Поэтому можно выполнить в цикле строку при помощи Sendcommand:
"(burst-one (handent \"здесь метка примитива\")) "
Надеюсь, что это даст результат.
Это просто шикарно!