Python & ActiveX/COM Autocad

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

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

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #210 : 13-12-2019, 15:10:59 »
Проблема в том, что настройки листа сбиваются, если посмотреть приложенный файл, то, думаю, будет понятно. А выглядит это так: сформировал все листы,
распечатал, закрыл чертеж, после того, как заново чертеж отрываю, в большинстве листов как бы нет самого листа, можно несколько раз щелкнуть колесико, тогда границы листа появляются, но отображают совсем не то, что нужно. В общем работает все не так как нужно и распечатать лист не получается, поэтому сношу все и создаю все заново. Пока так. Хотелось бы справиться с этой проблемой, поскольку это ерунда какая-то. Так не должно быть.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #211 : 13-12-2019, 16:12:42 »
DMuzer,
Если я правильно понял, у тебя получается нормальным только последний лист.
И похоже из-за этого:
Код - Python [Выбрать]
  1. for e in lo.Block :
  2.         e.Delete()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #212 : 13-12-2019, 16:26:55 »
Возможно, я попробую убрать этот блок. Но все-таки поясню его смысл.
При создании нового листа, на нем может быть вьюпорт, который автоматически создается(в настройках можно отключать), но мне кажется этот кусочек кода работает.
lo - это вновь созданный лист, lo.Block - это объекты на листе, на новом листе, только вьюпорт, его я и удаляю, мне он не нужен, я сделаю новый.

В общем, мне кажется, что этот код не должен удалять объекты на других листах, только на листе, с которым я работаю. При этом, я удаляю объекты до того, как создать все свои.
Кроме того, после создания листов - там же все в порядке, я же их могу всега видеть и распечатать, ведь печатаю я после того, как создаю все листы. Проблема возникает когда я закрываю чертеж. А после того как заново открываю - картина такая как в файле который для примера привел.
Так что, на первый взгляд, этот код не должен вызывать этих проблем, но я попробую, может проблема тут глубже. А у Вас может другие предположения есть?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #213 : 13-12-2019, 16:34:59 »
Кроме того, после создания листов - там все в порядке, я же их могу всега видеть и распечатать, ведь печатаю я после того, как создаю все листы.
Тогда я ничего не понял. После того как ты создаёшь все эти листы у тебя получается нормальный чертеж, каждый из листов которого нормально печатается? И после сохранения и повторного открытия чертежа информация с листов пропадает??? Но это может только означить, что твой код портит чертеж. Я запустил _AUDIT и что я вижу:

Command: _AUDIT
Fix any errors detected? [Yes/No] <N>: _y
Auditing Header
Auditing Tables
Auditing Entities Pass 1
Pass 1 800     objects auditedAcDbBlockReference(437)
                     XData String Length 312 > 255      Truncate to 255
Pass 1 15300   objects auditedAcDbSortentsTable(4B4E)
      Error for Entry (4B51,4B53) eDuplicateKey         fixed
Pass 1 15400   objects auditedAcDbSortentsTable(4B9A)
      Error for Entry (4BA9,4BAB) eDuplicateKey         fixed
Pass 1 16600   objects audited
Invalid viewport-configuration name "*Multiple" found.
  Changed to "AUDIT_I_191213153339-0".
AcDbViewportTableRecord: "AUDIT_I_191213153339-0"
        Tilemode Viewport Corners Not filling up whole screen Set to 0,0..1,1
Invalid viewport-configuration name "*Multiple" found.
  Changed to "AUDIT_I_191213153339-1".
AcDbViewportTableRecord: "AUDIT_I_191213153339-1"
        Tilemode Viewport Corners Not filling up whole screen Set to 0,0..1,1
Pass 1 26600   objects audited
Auditing Entities Pass 2
Pass 2 16700   objects auditedAcDb2dVertex(250DF)         layer != owner's            set to owner's
AcDb2dVertex(250E0)         layer != owner's            set to owner's
AcDb2dVertex(250E1)         layer != owner's            set to owner's
AcDb2dVertex(250E2)         layer != owner's            set to owner's
AcDb2dVertex(250E3)         layer != owner's            set to owner's
Pass 2 26600   objects audited
Auditing Blocks
 349     Blocks audited
Auditing AcDsRecords
Regenerating model.
Total errors found 12 fixed 12
Erased 0 objects

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

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #214 : 13-12-2019, 16:42:34 »
И после сохранения и повторного открытия чертежа информация с листов пропадает???
Именно так.

Я понимаю, что что-то не так делаю.

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #215 : 13-12-2019, 16:45:58 »
Я тоже сделал аудит, меня заинтересовала вот какая строка:

           Paperspace vport layer Not "0"               "0"
AcDbViewport(2B4DB)               не восстановлен.

что это может значить? Я должен при создании vport только на слой 0 помещать? Может в этом дело?

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #216 : 13-12-2019, 16:48:34 »
И еще такая строчка:

Обнаружено недопустимое имя конфигурации видовых экранов "*Multiple".
AcDbViewportTableRecord: "*Multiple"

Что это должно значить?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #217 : 13-12-2019, 16:52:49 »
И еще такая строчка:

Обнаружено недопустимое имя конфигурации видовых экранов "*Multiple".
AcDbViewportTableRecord: "*Multiple"

Что это должно значить?
Для начала удали все листы, выполни _AUDIT с исправлением всех ошибок. Затем сохрани чертеж, снова запусти _AUDIT и убедись, что ошибок нет. Дальше можешь запускать свою программу и посмотри что после неё скажет _AUDIT.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #218 : 13-12-2019, 17:16:32 »
Похоже, что дело как раз в этом.
Вроде как после исправления ошибок и сохранения, далее все правильно идет.
Посмотрим, как все будет дальше.
Спасибо!

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #219 : 14-01-2020, 16:52:15 »
Доброго дня!
Подскажите, как решить задачу: я через ActiveX вставляю выноски функцией AddMLeader.
Иногда нужно чтобы выноска присоединялась к тексту слева, то все ок, но никак не могу добиться, чтобы при вставке выноска присоединялась справа. Вроде все что в голову приходило перепробовал. Выноска автоматически перескакивает как нужно если ее вручную подвигатть, но это вроде не совсем то что нужно. Можно это через ActiveX решить?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Python & ActiveX/COM Autocad
« Ответ #220 : 14-01-2020, 17:04:43 »
По-моему, надо смотреть в сторону выравнивания аннотации (если там текст).
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #221 : 14-01-2020, 17:07:23 »
Подскажите, как решить задачу: я через ActiveX вставляю выноски функцией AddMLeader.
Покажи код, которым ты это делаешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #222 : 14-01-2020, 17:09:16 »
Что с выравниванием не получается...
пробовал
TextAttachmentDirection, TextJustify что то не то...

Оффлайн DMuzer

  • ADN OPEN
  • ***
  • Сообщений: 152
  • Карма: 2
Re: Python & ActiveX/COM Autocad
« Ответ #223 : 14-01-2020, 17:11:14 »
Код - Python [Выбрать]
  1.         ml = doc.ModelSpace.AddMLeader(vtr(pts), 0)
  2.        
  3.        
  4.         ml[0].Layer = '_fsa-anno-notes'
  5.         ml[0].TextBackgroundFill=True
  6.         ml[0].TextJustify = 9
  7.         ml[0].TextString = ts
  8.         ml[0].ArrowHeadType = 19
  9.         ml[0].Update()
  10.  
  11.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Python & ActiveX/COM Autocad
« Ответ #224 : 14-01-2020, 17:12:45 »
DMuzer,
Какие координаты точек ты передаёшь (т.е. что в массиве pts)?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение