Python & ActiveX/COM Autocad

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

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

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

  • Administrator
  • *****
  • Сообщений: 11603
  • Карма: 1505
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #330 : 24-05-2020, 19:35:56 »
у меня ничего не происходит. Что я делаю не так?
В принципе всё так. Проверил в AutoCAD 2021 - действительно целиком колонке выравнивание задать нельзя. Возможно причина как-то связана с разными типами данных в разных колонках (Title, Header, Data). Так что задавать выравнивание придётся в цикле всем ячейкам колонки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 129
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #331 : 27-06-2020, 13:01:11 »
Коллеги, подскажите вот что,
построение чертежа занимает много времени. Можно ли как то на время приостановить отрисовку и после завешения построения обновить чертеж чтобы хоть как то ускорить процесс, по типу как это можно сделать с таблицей установив RegenerateTableSuppressed в False?

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

  • Administrator
  • *****
  • Сообщений: 11603
  • Карма: 1505
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #332 : 27-06-2020, 13:58:42 »
Средствами COM/ActiveX приостановить отрисовку нельзя. Можно скрыть окно AutoCAD, а потом его сделать видимым. Но это вряд ли как-то ускорит построение чертежа. Кстати, обновление чертежа - это регенерация. И процесс регенерации может быть достаточно длительным.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 897
  • Карма: 148
Re: Python & ActiveX/COM Autocad
« Ответ #333 : 06-07-2020, 08:31:08 »
Есть другой вариант: создать анонимный блок, все сделать внутри него, потом блок вставить, разбить и уничтожить вхождение блока.
Все, что сказано - личное мнение.

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

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

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #334 : 08-07-2020, 18:49:11 »
Всем добра!

Такая задача: после конвертации из pdf на чертеже присутствует множество прямоугольных треугольников примерно одинаковой площади. Как их можно удалить одним махом, написав прогу в pythone? Треугольники состоят из полилинии. Можно как-то их всех найти по площади?

Спасибо!

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 51
  • Карма: 4
Re: Python & ActiveX/COM Autocad
« Ответ #335 : 08-07-2020, 19:43:13 »
Всем добра!

Такая задача: после конвертации из pdf на чертеже присутствует множество прямоугольных треугольников примерно одинаковой площади. Как их можно удалить одним махом, написав прогу в pythone? Треугольники состоят из полилинии. Можно как-то их всех найти по площади?

Спасибо!

Требуется просто удалить их, к примеру, через поиск?
Или нужно объединить их и заменить нормальными фигурами. Как если все прямые перевелись в виде состыкованных по гипотенузе прямоугольных треугольников.

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #336 : 08-07-2020, 21:57:30 »
Требуется просто удалить их, к примеру, через поиск?
Да, просто удалить.

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

  • Administrator
  • *****
  • Сообщений: 11603
  • Карма: 1505
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #337 : 08-07-2020, 22:04:18 »
Можно как-то их всех найти по площади?
Нет. Да и вообще если бы это было можно, то способ был бы какой-то ненадежный. Нужно отобрать все полилинии (возможно на каком-то определенном слое), а затем уже обработать полученный набор:
1. Проверить, что у полилинии 3 вершины
2. Проверить, что они образуют прямоугольный треугольник
3. Проверить (возможно), что площадь в каких-то пределах
4. Проверить если есть еще какие-то критерии
Если все условия удовлетворяют, то удалить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DFG2020

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
Re: Python & ActiveX/COM Autocad
« Ответ #338 : 08-07-2020, 22:17:26 »
Если все условия удовлетворяют, то удалить.
Спасибо за ответ. Видимо проще вручную удалить.

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 51
  • Карма: 4
Re: Python & ActiveX/COM Autocad
« Ответ #339 : 06-09-2020, 18:35:51 »
Мой скрипт считывает GetBoundingBox() нетекстовых объектов внутри блока, чтобы получить потом минимальную и максимальные точки всех нетекстовых объектов.  Координаты считываются сначала внутри блока, затем с учетом точки вставки, угла поворота и общего зеркалирования перевожу их в общие для чертежа.
Я заметил, что если объект отзеркален с помощью параметра "Отразить" внутри блока (не командой "отразить зеркально" с главной панели), его координаты GetBoundingBox() возвращаются точно такими же.  Я ошибаюсь или это так и должно быть?

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

  • Administrator
  • *****
  • Сообщений: 897
  • Карма: 148
Re: Python & ActiveX/COM Autocad
« Ответ #340 : 06-09-2020, 20:35:18 »
Может, стоит обращаться к описанию не динамического блока, а к описанию именно этого анонимного? Т.е. вместо EffectiveName использовать простой Name?
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 11603
  • Карма: 1505
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #341 : 06-09-2020, 20:41:23 »
Координаты считываются сначала внутри блока, затем с учетом точки вставки, угла поворота и общего зеркалирования перевожу их в общие для чертежа.
Вот тут и вопрос. Внутри какого блока? Алексей Кулик правильно написал. Если работать с анонимным блоком, соответствующим текущему состоянию динамического блока, то никакие динамические параметры учитывать уже не нужно - они уже в этом анонимном блоке учтены. Плюс еще учтена и видимость примитивов внутри блока (см. у них свойство Visible).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 51
  • Карма: 4
Re: Python & ActiveX/COM Autocad
« Ответ #342 : 07-09-2020, 05:19:21 »
Похоже, я плаваю в терминологии, я не знаком с понятием анонимного блока  :-\
У меня просто динамический блок.

У меня есть блок "Клемма_терминала", которую я создал. В ней атрибут "оттразить", который зеркалит ее по горизонтали. Обычно обращение к подобным блокам по EffectiveName проблем не вызывало, значение текстовых аттрибутов, координаты примитивов и прочее - считывалось без проблем.  Но вот считывание GetBoundingBox()  у  отраженного прямоугольника возвращает те же координаты, что и в исходном состоянии.

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

  • Administrator
  • *****
  • Сообщений: 897
  • Карма: 148
Re: Python & ActiveX/COM Autocad
« Ответ #343 : 07-09-2020, 07:40:32 »
У вхождения динамического блока (файл не качал, некогда) есть его т.н. "эффективное имя" - которое отображается в панели свойств. А есть обычное имя - которое на самом деле не видно.
Если obj - указатель на вхождение блока, то посмотри, что вернет obj.Name и obj.EffectiveName. И проходить тебе надо именно по doc.Blocks(obj.Name)
Все, что сказано - личное мнение.

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

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

Оффлайн Electric

  • ADN OPEN
  • **
  • Сообщений: 51
  • Карма: 4
Re: Python & ActiveX/COM Autocad
« Ответ #344 : 07-09-2020, 08:36:51 »
Спасибо! Наконец разобрался. Через obj.Name все работает,  не использовал его раньше.