Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: bert от 25-04-2017, 13:25:05

Название: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: bert от 25-04-2017, 13:25:05
Здравствуйте, подскажите, можно ли сохранить не активный чертеж?
при выполнении

Код - 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. }

Выдает фатал.
Данный кусок кода я нашел в блоге Андрея Бушмана, но там говорилось именно об активном чертеже!
мне же необходимо сохранять не только активный чертеж.
может быть есть возможность программно сделать чертеж активным, для того, чтобы его сохранить и закрыть?
Название: Re: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: Александр Ривилис от 25-04-2017, 13:44:50
Какой фатал выдаёт? В этом коде не вижу ничего страшного. Какая версия AutoCAD? В каком контексте выполняется этот код? Случайно не в отлельной задаче (Thread)?
Название: Re: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: bert от 25-04-2017, 14:05:31

(https://s21.postimg.org/bu9hm6lgj/image.jpg) (https://postimg.org/image/bu9hm6lgj/)

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.         }


Название: Re: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: Владимир Шу от 25-04-2017, 14:52:57
Автокад однопоточный, а Вы его в асинхронном режиме используете...
Посмотрите код вот тут http://adn-cis.org/forum/index.php?topic=971.msg9940#msg9940 возможно Вам поможет.
Название: Re: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: bert от 25-04-2017, 14:57:05
Хорошо. Вы хотите сказать, что не возможно реализовать определенные действия через определенный промежуток времени? или есть другие варианты?
Название: Re: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: Владимир Шу от 25-04-2017, 14:58:01
Пока редактировал...
еще разок, вот эту тему посмотрите http://adn-cis.org/forum/index.php?topic=971.msg9940#msg9940
Там есть еще ссылки, так что думаю Ваша проблема решится.
Название: Re: Сохранение неактивного чертежа или из неактивного чертежа в активный
Отправлено: Александр Ривилис от 25-04-2017, 15:39:41
Хорошо. Вы хотите сказать, что не возможно реализовать определенные действия через определенный промежуток времени? или есть другие варианты?
Варианты есть. Но обращение к AutoCAD возможно только из главной задачи. В противном случае Fatal Error обеспечен.
Выполнение кода из главной задачи проще всего реализовать вот так: http://adn-cis.org/ispolzovanie-potokov-dlya-fonovoj-obrabotki.html