Управление WorkingDatabase

Автор Тема: Управление WorkingDatabase  (Прочитано 7151 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Управление WorkingDatabase
« : 01-10-2020, 12:31:36 »
В теме https://adn-cis.org/forum/index.php?topic=10047.0 приведен код от Андрея Бушмана, в котором сделано принудительное переназначение HostApplicationServices.WorkingDatabase. Судя по комментариям в коде и хитроумному использованию IDisposable не по назначению - Андрей делает это переназначение очень часто (иначе проще было бы написать try-finally). Возникает вопрос - какие именно вызовы API критичны к WorkingDatabase? Когда ее стоит контролировать, переназначать на ту с которой сейчас работаю? Стоит ли применять этот переназначение тотально везде-везде? Я не вижу в коде никаких обращений к Editor, Document и даже системным переменным. Ничего, что могло бы не сработать в не открытом документе, в не-текущей базе данных. Но раз авторитетный программист пишет так - может и всем надо так? Это помогает избежать каких-то редких фаталов?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление WorkingDatabase
« Ответ #1 : 01-10-2020, 13:11:33 »
avc,
В своё время я указал Андрею на необходимость переключать HostApplicationServices.WorkingDatabase в случаях работы с текстами/атрибутами, так как корректное их позиционирование происходит только тогда, когда они в HostApplicationServices.WorkingDatabase. И это не единственные типы примитивов, для которых это критично.
Пример: https://adn-cis.org/forum/index.php?topic=8449.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Управление WorkingDatabase
« Ответ #2 : 01-10-2020, 13:14:58 »
И это не единственные типы примитивов, для которых это критично.
Нельзя ли огласить полный список?©

Отмечено как Решение avc 01-10-2020, 13:35:00

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление WorkingDatabase
« Ответ #3 : 01-10-2020, 13:19:02 »
И это не единственные типы примитивов, для которых это критично.
Нельзя ли огласить полный список?©
Аналогично с таблицами, размерами и т.д. Короче говоря в тех случаях, когда AutoCAD вдруг решает, что информацию о стилях (текстовых/размерных и т.д.) нужно откуда-то брать и тогда берёт её из WorkingDatabase.

Поэтому проще сделать такой "переключатель", причем переключатся на стороннюю базу следует на минимально короткое время, чтобы не навредить AutoCAD'у - если не переключится обратно, то Fatal Error будет 100%.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Управление WorkingDatabase
« Ответ #4 : 01-10-2020, 13:31:51 »
Спасибо
У меня путаница с разными базами начинается чаще всего при работе с внешними ссылками. Радактируя, например, MLeader из внешней ссылки тоже надо переключать БД на его базу или это наоборот к фаталам приведет?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление WorkingDatabase
« Ответ #5 : 01-10-2020, 13:33:28 »
Радактируя, например, MLeader из внешней ссылки тоже надо переключать БД на его базу или это наоборот к фаталам приведет?
Переключать надо, но только на время редактирования. К фаталу приведёт только если обратно не переключишь и AutoCAD, после завершения твоей команды, не поймёт с какой базой имеет дело.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение