Сохранение неактивного чертежа или из неактивного чертежа в активный

Автор Тема: Сохранение неактивного чертежа или из неактивного чертежа в активный  (Прочитано 3010 раз)

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

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

  • ADN OPEN
  • Сообщений: 32
  • Карма: 1
Здравствуйте, подскажите, можно ли сохранить не активный чертеж?
при выполнении

Код - C# [Выбрать]
  1.  DocumentCollection docs = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
  2.  foreach (Document doc in docs)
  3.                     {
  4.                         if (File.Exists(doc.Name))
  5.                         {
  6. doc.Database.Save(); (или doc.Database.SaveAs(strDWGName, Autodesk.AutoCAD.DatabaseServices.DwgVersion.Current);)
  7. }

Выдает фатал.
Данный кусок кода я нашел в блоге Андрея Бушмана, но там говорилось именно об активном чертеже!
мне же необходимо сохранять не только активный чертеж.
может быть есть возможность программно сделать чертеж активным, для того, чтобы его сохранить и закрыть?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Какой фатал выдаёт? В этом коде не вижу ничего страшного. Какая версия AutoCAD? В каком контексте выполняется этот код? Случайно не в отлельной задаче (Thread)?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 32
  • Карма: 1



AutoCAD2014.

Код - C# [Выбрать]
  1.   private async void osnova()
  2.         {          
  3.             while (true)
  4.             {                
  5.                 if (GetLastInputTime() > 20) (запуск алгоритма в случае если ПК простаивал более 20сек)
  6.                 {
  7.  
  8.  
  9.                     DocumentCollection docs = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
  10.                     foreach (Document doc in docs)
  11.                     {
  12.                         if (File.Exists(doc.Name))
  13.                         {
  14.                             last_save = File.GetLastWriteTime(doc.Name);
  15.                             now = DateTime.Now;
  16.                             not_change = now.Subtract(last_save);
  17.  
  18.                             (код по которому определяем : имеем права на папку с чертежем - change=true или нет - change=false)
  19.  
  20. if (change == true)
  21. {
  22.    
  23.     string strDWGName = doc.Name;
  24.     object obj = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("DWGTITLED");
  25.  
  26.     if (System.Convert.ToInt16(obj) == 0)
  27.     {
  28.         strDWGName = "c:\\MyDrawing.dwg";
  29.         doc.Database.SaveAs(strDWGName, Autodesk.AutoCAD.DatabaseServices.DwgVersion.Current);
  30.     }
  31.  
  32.     else
  33.     {
  34.         doc.Database.Save();
  35.     }      
  36.     MessageBox.Show("сохранили чертежи на котор имеем доступ");                    
  37. }
  38.  
  39.                         }
  40.                     }
  41.  
  42.                 }
  43.  
  44.                 await Task.Delay(30000); (повтор алгоритма)
  45.             }
  46.  
  47.         }



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

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Автокад однопоточный, а Вы его в асинхронном режиме используете...
Посмотрите код вот тут http://adn-cis.org/forum/index.php?topic=971.msg9940#msg9940 возможно Вам поможет.

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

  • ADN OPEN
  • Сообщений: 32
  • Карма: 1
Хорошо. Вы хотите сказать, что не возможно реализовать определенные действия через определенный промежуток времени? или есть другие варианты?

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

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Пока редактировал...
еще разок, вот эту тему посмотрите http://adn-cis.org/forum/index.php?topic=971.msg9940#msg9940
Там есть еще ссылки, так что думаю Ваша проблема решится.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Хорошо. Вы хотите сказать, что не возможно реализовать определенные действия через определенный промежуток времени? или есть другие варианты?
Варианты есть. Но обращение к AutoCAD возможно только из главной задачи. В противном случае Fatal Error обеспечен.
Выполнение кода из главной задачи проще всего реализовать вот так: http://adn-cis.org/ispolzovanie-potokov-dlya-fonovoj-obrabotki.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение