AutoCAD 2014 в контексте приложения отказывается закрывать фоновый документ

Автор Тема: AutoCAD 2014 в контексте приложения отказывается закрывать фоновый документ  (Прочитано 24495 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Передал информацию в ADN DevHelp. Ждем ответа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Получил ответ. Он на 100% повторяет #3 с уточнением, что это единственная возможность избежать исключения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн fattyhallex

  • ADN Club
  • Сообщений: 16
  • Карма: 0
Очень рад, но уменя вываливается сообщение
"Drawing is busy"в примере из #3...
При любом значении NEXTFIBERWORLD  0 или 1
:(
Интересно, несколько раз переключил Nextfiberworld
с 1 на 0, и теперь работает нормально...
Никто не пробовал повторить?
« Последнее редактирование: 06-02-2014, 22:18:52 от fattyhallex »

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

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
У меня сразу нормально работал вариант как в #3
Алексей

Оффлайн fattyhallex

  • ADN Club
  • Сообщений: 16
  • Карма: 0

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Спасибо :)
Олег. У меня это не воспроизводится. Если у тебя есть возможность записать видео с этой ошибкой в AutoCAD 2014 (в другой версии проверять нет смысла) - сделай. Я передам в Autodesk - пусть разбираются. Если нет - увы. Ничем помочь не смогу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
У меня это не воспроизводится.

Неработоспособность кода из #3 на моей машинке (Windows 7 x64) подтверждаю:

- AutoCAD 2009 Enu SP3 x64
- AutoCAD 2014 Enu SP1 x64

FIBERWORLD = 0 (read only).

В разных версиях AutoCAD сообщение об ошибке наблюдаю разное (скрины прилагаются). Компилировал в MS VS 2012 с настройкой AnyCPU.
« Последнее редактирование: 07-02-2014, 15:36:50 от Андрей Бушман »

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Проверил код из #3 на:
AutoCAD 2014 Rus x64 (без SP)
AutoCAD Civil 3D 2014 Rus SP1 x64
AutoCAD Civil 3D 2014 Rus SP1 x64 as AutoCAD
Никаких ошибок. Текущий закрывает, указанный открывает.

Windows 7 SP1 Professional Rus x64

FIBERWORLD = 1 (только чтение)
« Последнее редактирование: 07-02-2014, 15:39:16 от Загорулькин Дмитрий »

Оффлайн fattyhallex

  • ADN Club
  • Сообщений: 16
  • Карма: 0
Если нет - увы.
Извини Александр, не хочу ставить никаких программ, временно на
компьютере сына по причине заливки кипятком соседями сверху,
значит увы :)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Можно практически без установки каких-то программ. Рекламировать не буду, через поисковик можно найти "запись видео с экрана онлайн" :)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Проверил код из #3 на:
AutoCAD 2014 Rus x64 (без SP)
AutoCAD Civil 3D 2014 Rus SP1 x64
AutoCAD Civil 3D 2014 Rus SP1 x64 as AutoCAD
Никаких ошибок. Текущий закрывает, указанный открывает.

Windows 7 SP1 Professional Rus x64

UPD  После назначения переменной NEXTFIBERWORLD значения равного 1, нужно перезагружать AutoCAD. После перезагрузки AutoCAD значение FIBERWORLD уже будет равно 1 (read only) и при работе кода #3 ошибка более не возникает.

UPD2 Дополнительная информация: когда при FIBERWORLD = 0 (read only) возникает исключение, то в автокаде приходится нажимать несколько раз Esc, иначе всё висит. После того, как несколько раз нажимаю Esc, автокад временами тихо умирает (без каких-либо сообщений).

Если вернуть значение 0, то после перезагрузки акада ошибка снова появляется.

P.S. Кстати, в 2009-м акаде FIBERWORLD нет... :(
« Последнее редактирование: 07-02-2014, 16:04:24 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, в 2009-м акаде FIBERWORLD нет... :(
NEXTFIBERWORLD и FIBERWORLD появились в AutoCAD 2011 и до сих пор недокументированные, так как используются только программистами для отладки программ. Связано это с дефектами отладчика Microsoft Visual Studio, который плохо работает с фиберами и не в состоянии ловить точки останова внутри форм, которые работают внутри фиберов:

Точки останова в пользовательской форме не обрабатываются при отладке .NET - приложения для AutoCAD 2012 в Visual Studio 2010

С другой стороны сам AutoCAD очень некорректно работает в отсутствии фиберов. Особенно это проявляется при переключении документов, работе с Лентой и т.п. Так что нужно максимально быстро переключаться в режим FIBERWORLD = 1.

P.S.: Андрей! Спасибо что подтвердил моё предположение о причине этой ошибки.

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

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
NEXTFIBERWORLD и FIBERWORLD появились в AutoCAD 2011 и до сих пор недокументированные, так как используются только программистами для отладки программ. Связано это с дефектами отладчика Microsoft Visual Studio, который плохо работает с фиберами и не в состоянии ловить точки останова внутри форм, которые работают внутри фиберов
Это всё, конечно, здорово, но меня интересует, как решить проблему именно в AutoCAD 2009? Может быть до FIBERWORLD всё же существовали какие-то способы, так же не документированные?

Как хотя бы узнать, включены они у меня в 2009-м или выключены? А то может в 2009-м и не в них дело (текст сообщения об ошибке ведь другой)...
« Последнее редактирование: 08-02-2014, 10:24:41 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Это всё, конечно, здорово, но меня интересует, как решить проблему именно в AutoCAD 2009? Может быть до FIBERWORLD всё же существовали какие-то способы, так же не документированные?

Как хотя бы узнать, включены они у меня в 2009-м или выключены? А то может в 2009-м и не в них дело (текст сообщения об ошибке ведь другой)...

В 2009-ом фиберы включены (т.е. эквивалент FIBERWORLD = 1). Можешь попробовать закрывать чем ActiveX/COM - я проверить не могу, т.к. именно 2009-ая версия у меня не установлена.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн SatanaXIII

  • ADN OPEN
  • Сообщений: 27
  • Карма: 2
Автокад 2018. Код из поста №3 не работает. Не зависимо от состояния переменной FIBERWORLD.
Попытка изменить значение переменной NEXTFIBERWORLD заканчивается исключением: "Autodesk.AutoCAD.Runtime.Exception: eInvalidInput".
При чем и FIBERWORLD и NEXTFIBERWORLD установлены изначально в ноль.
Не получатся закрыть открытый документ. Бросает исключение, что документ занят.
Код - C# [Выбрать]
  1. var FIBERWORLD      = Application.TryGetSystemVariable("FIBERWORLD"); // 0
  2. var NEXTFIBERWORLD  = Application.TryGetSystemVariable("NEXTFIBERWORLD"); // 0
  3. Application.SetSystemVariable("FIBERWORLD", 1/*0*/);
  4.  
  5. DocumentCollection documents = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
  6. Document currentDWG = documents.MdiActiveDocument;
  7. string path = @"C:\Temp\TestCreate.dwg";
  8. Document newDoc = documents.Open(path, false);
  9. documents.MdiActiveDocument = currentDWG;
  10. currentDWG.CloseAndDiscard();
  11. documents.MdiActiveDocument = newDoc;
  12. Document activeDWG = documents.MdiActiveDocument;
  13.  
  14. Application.SetSystemVariable("FIBERWORLD", /*1*/0);
Бензопила пилит тело, а виолончель душу.