Падает AutoCad 2020 при Viewport.On = true;

Автор Тема: Падает AutoCad 2020 при Viewport.On = true;  (Прочитано 5204 раз)

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

Оффлайн BlesyaАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Суть проблемы:
Код выполняется под AutoCad 2020.
  • Создаётся Viewport
  • Добавляется в BlockTableRecord лейаута
  • Добавляется в транзакцию
  • Вызываем Viewport.On = true

Если чертёж был создан без шаблона, то мы получаем ошибку.
Если чертёж был создан с использованием шаблона, то ошибки нет.

В чём может быть проблема?

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #1 : 23-07-2024, 08:24:04 »
Вы лучше код приложите. При работе с лейаутом полно мелочей и тонкостей.

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #2 : 23-07-2024, 08:40:28 »
Добавляется в транзакцию
Вызываем Viewport.On = true
Возможно, после добавления в транзакцию, транзакцию следует завершить, чтобы объекты были созданы, потом вызывать Viewport.On = true

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #3 : 23-07-2024, 23:09:22 »
потом вызывать Viewport.On = true
В отдельной транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BlesyaАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #4 : 24-07-2024, 11:19:33 »
Проблема была решена, почему это влияло на работу автокада - я не смог выяснить.

Суть:
Перед созданием видового экрана у лейаута удалялись все дефолтные видовые экраны (layout.GetViewports()), затем добавлялся новый, мною созданный, и вот в этом случае, после вызова Viewport.On = true автокад и падал.
Изменение порядка решило проблему, сначала добавляется новый видовой экран, вызываем Viewport.On = true, а затем удаляются дефолтные.

Может кто сможет объяснить, почему в первом случае автокад падал? Всё выполнялось в рамках одной и той же транзакции. Как я понял, database.GetViewports(false) возвращает видовые экраны, которые, скажем так, можно удалить, и если не удалять те, которых нет в этом списке - всё ок.


Привожу пример работающей команды, если код удаления [35-43 строки] переместить на 18 строку, то автокад будет падать.

Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #5 : 24-07-2024, 12:44:56 »
На каждом лейауте по умолчанию есть системный вюпорт, который не надо удалять. Если я правильно помню, он первый по порядку.
Где то тут на форуме есть тема по этому поводу...
https://adn-cis.org/forum/index.php?topic=2738
https://adn-cis.org/forum/index.php?topic=228

Оффлайн BlesyaАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #6 : 24-07-2024, 13:45:06 »
Почему тогда в приведённом мною примере я могу удалить его и всё будет работать нормально?
Но будет работать только в том случае, если я удалю его после того, как создам свой вьюпорт, если удалю до этого - автокад свалится.
Или моё решение работает, но работоспособность, исходя из документации, не гарантируется?

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #7 : 25-07-2024, 09:40:16 »
Почему тогда в приведённом мною примере я могу удалить его и всё будет работать нормально?
Но будет работать только в том случае, если я удалю его после того, как создам свой вьюпорт, если удалю до этого - автокад свалится.
1. Первый код ты не приложил, там было transaction.Commit(); перед LayoutManager.Current.CurrentLayout = name; или нет?
Возможно в первом случае ты удаляешь видовой экран листа, потом пытаешься его добавить, но не до конца, т.к. транзакция не завершена и не добавленный  видовой экран пытаешься активизировать.
Автокад фаталит. Возможно причина в другом, например в порядке вызова viewport.Locked = true; viewport.On = true;

Или моё решение работает, но работоспособность, исходя из документации, не гарантируется?
2. Когда побольше познакомишься с документацией, то поймешь, что не всегда описана правильная и не правильная последовательность применения методов и свойств. Придется догадываться, подбирать последовательность самому или искать на форумах. Все последовательности, которые придут разработчику на ум не предугадать и не описать в документации.

3. Возможно и не нужно удалять основной Viewport для Layout, цель то какая, сменить свойства?
string name = "TEST";
Width = 200,
Height = 200,
CenterPoint = new Point3d(10, 10, 0),
CustomScale = 1
Скорее всего и так, откроешь на запись и сменишь свойства, без удаления.

Оффлайн BlesyaАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Падает AutoCad 2020 при Viewport.On = true;
« Ответ #8 : 25-07-2024, 10:05:59 »
Код, который не работает - почти ничем не отличается, только строки удаления [35-43 строки] переместить на 18 строку (ну и убрать проверку в цикле, там этот объект ещё не существует).

Цитировать
Когда побольше познакомишься с документацией, то поймешь, что не всегда описана правильная и не правильная последовательность применения методов и свойств.

Получается проблема как раз и решена просто путём изменения последовательности.