Turned Off All Viewport

Автор Тема: Turned Off All Viewport  (Прочитано 43767 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #90 : 01-10-2020, 21:05:15 »
Он ведь не факт, что первый в коллекции?
Не 100% факт, но можно поэкспериментировать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #92 : 08-10-2020, 14:42:57 »
Не 100% факт
Хм... https://adn-cis.org/forum/index.php?topic=228.msg415#msg415
Дима. Ты не прочитал всю эту тему. В данном случае идёт речь о том, что Layout.GetViewports возвращает пустой массив, хотя Layout был инициализирован, чертеж был сохранён и открыт повторно. Этот массив не пустой только если Layout был инициализирован в этой сессии AutoCAD или на него в этой сессии AutoCAD переключались.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Turned Off All Viewport
« Ответ #93 : 08-10-2020, 14:54:52 »
Возможно да, не так понял. Но вроде как спрашивали именно про это... Ну да ладно, вопрошающий сам разберётся  :)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #94 : 08-10-2020, 15:07:37 »
Возможно да, не так понял. Но вроде как спрашивали именно про это... Ну да ладно, вопрошающий сам разберётся  :)
Тем не менее почитай тему внимательно. Ответ от ADN DevHelp меня сильно удивил. Я был уверен, что если вызвано Layout.Initialize() или было хотя-бы переключение на этот лист, то после сохранения чертежа, его повторного открытия и  вызова Layout.GetViewports() возвращает не пустой массив и мы всегда сможем определить главный Viewport.  Оказалось, что это не так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Turned Off All Viewport
« Ответ #95 : 08-10-2020, 15:36:58 »
каким образом получить из коллекции вьюпортов конкретного листа, к примеру, 0-й вьюпорт этого листа? Он ведь не факт, что первый в коллекции? Или его ObjectId можно чему-то сопоставить/приравнять?

Если лист создавался нормально, т.е. был создан, сделан текущим  и инициализирован, то :
1. Если лист активный
1.1 получаешь Database.GetViewports(true) и берешь первый лист
1.2 получаешь BlockTableRecordId, получаешгь блок листа (BlockTableRecord) находишь все Viewport, берешь с Viewport.Number==1 (1....n)

2. Если лист не активный, то делаешь по пункту 1.2, только Viewport.Number будет -1 у всех видовых экранов, поэтому сортируешь по Id и берешь первый в списке.

Если создание листов было не в "правильном порядке", нужно экспериментировать.
Возможно у листа отсутствует Layout, если лист не был инициализирован.
Либо 0й Viewport создавался последним, но при этом важно проверить, что будет после сохранения, закрытия/открытия чертежа. Возможно AutoCAD "заберет" первый Viewport?

Оффлайн pavka_97

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Re: Turned Off All Viewport
« Ответ #96 : 08-10-2020, 15:49:10 »
Активные листы не обсуждаем, тут и так понятно.
Насчет неактивных: если листы "правильные" (которые создавались классическими способами,без использовались сторонних программ и плагинов, а также без удаления 0х вьюпортов, которые автокад потом пересоздает - это вроде в ранних версиях только) то у меня простым перебором в пространстве листа главный vp всегда идет первым в коллекции. Детально не эксперементировал.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #97 : 08-10-2020, 15:51:40 »
1. Если лист активный
1.1 получаешь Database.GetViewports(true) и берешь первый лист
1.2 получаешь BlockTableRecordId, получаешгь блок листа (BlockTableRecord) находишь все Viewport, берешь с Viewport.Number==1 (1....n)
Если лист активный, то достаточно  Layout.GetViewports() и взять первый Viewport - это будет однозначно быстрее, так как AutoCAD уже сам проанализировал лист, нашел все его Viewport'ы и определил какой из них главный.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #98 : 08-10-2020, 15:53:05 »
Возможно у листа отсутствует Layout, если лист не был инициализирован.
А вот это как??? Лист == Layout. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Turned Off All Viewport
« Ответ #99 : 08-10-2020, 16:02:28 »
А вот это как??? Лист == Layout. 
Прошу прощения, написал не правильно. Имел ввиду такой сценарий:
Предполагаю, что можно склонировать блок листа в чертеж, и при этом не появиться запись(Layout) в NOD/ACAD_LAYOUT.
Если получать пространство "неправильного" листа перебором в BlockTable, то вполне можно получить блок с именем Name="*Paper_Space3", при этом IsLayout и LayoutId будут не верными.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Turned Off All Viewport
« Ответ #100 : 08-10-2020, 16:08:00 »
Предполагаю, что можно склонировать блок листа в чертеж, и при этом не появиться запись(Layout) в NOD/ACAD_LAYOUT.
Это только если всё это делать незаконными методами. LayoutManager.CloneLayout клонирует правильно Layout, LayoutManager.DeleteLayout его правильно удаляет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение