Фатал при сохранении если открыт один dwg

Автор Тема: Фатал при сохранении если открыт один dwg  (Прочитано 17011 раз)

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

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

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

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Спасибо - отметил как решение.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Маленькое замечание. Этот код будет работать в единственном случае если открыт только один чертеж.
Думаю так код будет "чище":
Код - C# [Выбрать]
  1. [CommandMethod("testsavedwg4", CommandFlags.Session)]
  2. public void testsavedwg4()
  3. {
  4.     Document acDoc = Application.DocumentManager.MdiActiveDocument;
  5.     if (acDoc != null) acDoc.CloseAndDiscard();
  6.     Document acDocTmp = null;
  7.     if (Application.DocumentManager.Count == 0) {
  8.       acDocTmp = Application.DocumentManager.Add("acadiso.dwt");
  9.     }
  10.     using (Database tempDb = new Database(false, true))
  11.     {
  12.       tempDb.ReadDwgFile(@"c:\Тест\1.dwg", FileShare.ReadWrite, false, "");
  13.       tempDb.CloseInput(true);
  14.       tempDb.SaveAs(@"c:\Тест\1_1.dwg", DwgVersion.Current);
  15.     }
  16.     if (acDocTmp != null)  acDocTmp.CloseAndDiscard();
  17. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
acDocTmp = Application.DocumentManager.Add("acadiso.dwt");

Возможно существует аналог решения, без подгрузки шаблона, создав пустую БД с документом.
Database emptyDb = new Database(true, false);

только как работать с документом такой БД, получить на него ссылку и сделать текущим?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
только как работать с документом такой БД, получить на него ссылку и сделать текущим?
Никак. Если бы воспользовался поиском, то нашёл бы что нет API для создания документа на основе базы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
нет API для создания документа на основе базы
т.е. второй параметр в new Database(true, false) не задействован?

Жаль, мне давно нужно было что-то подобное, для вырезки абриса из плана
Т.е. нужно было создавать промежуточные БД, а в них производить SelectCrossingPolygon
Тогда нашел обходное решение, ввиду простого прямоугольного контура.
переключение документа через API могло облегчить задачу.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
т.е. второй параметр в new Database(true, false) не задействован?
Задействован, но не так, как ты это понимаешь. Фактически он привязывает его к текущему документу.
Почитай эту тему: http://adn-cis.org/forum/index.php?topic=721.0
И это обсуждение: http://adn-cis.org/forum/index.php?topic=490.msg7629#msg7629
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Задействован, но не так, как ты это понимаешь. Фактически он привязывает его к текущему документу.
Почитай эту тему: http://adn-cis.org/forum/index.php?topic=721.0
И это обсуждение: http://adn-cis.org/forum/index.php?topic=490.msg7629#msg7629

Жаль что некоторые операции завязаны на документе, и нельзя полноценно создать документ с временной БД.

Пару вопросов не по теме, но тоже связаных с документом.
Есть архив, в нем есть файлы. Некоторые не чищенные, некоторые содержат ошибки БД.
Вопрос про команды purge, audit, recovery.
Отлавливать нежелательное состояние файлов разумно только автоматическим путем.

1. Насколько понимаю отследить есть ошибки или нет в чертеже, можно только открыв чертеж, запустить соответствующую команду и перехватывать сообщения в editor.
Или есть другие возможности?

2. Второй вопрос. Если возможностей нет. Можете ли попросить Autodesk добавить в новых версиях в API проверку чертежа, без необходимости его открывать с документом.
Что-то типа:
Database fileDb = new Database(false, true);
fileDb.ReadDwgFile(filename, System.IO.FileShare.Read, true, "");
DrawingState ds = fileDatabase.CheckDrawingState();
int auditErrorsCount = ds.AuditErrors;
int objectsForPurge = ds.NotUsedDbObjects;

По остальным объектам прокси, учебной версии, и т.д. собрать статистику проблем не представляет.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Насколько понимаю отследить есть ошибки или нет в чертеже, можно только открыв чертеж, запустить соответствующую команду и перехватывать сообщения в editor.
Или есть другие возможности?
API для восстановления чертежа - новый API в AutoCAD 2015
API для проверки чертежа - новый в AutoCAD 2015
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
API для восстановления чертежа - новый API в AutoCAD 2015
API для проверки чертежа - новый в AutoCAD 2015
Это я видел и протестировал.
Мало чем отличаются от вызова стандартных команд recovery и audit.
информацию об ошибках выводит в командную строку, как и стандартные команды. В этом то и ограничение.

Хотелось бы получить информацию о наличии/отсутствии ошибок не в командную строку, а в виде bool, еще лучше int для объекта  Database.

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

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