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

ADN Club => AutoCAD .NET API => Тема начата: Александр Пекшев aka Modis от 26-09-2015, 17:11:29

Название: Как отличить открытый документ от созданного
Отправлено: Александр Пекшев aka Modis от 26-09-2015, 17:11:29
Всем привет.
При подписывании на события DocumentManager есть событие DocumentCreated. Оно срабатывает и когда документ создается и когда документ открывается.
Каким образом можно отличить создан документ или открыт?
Название: Re: Как отличить открытый документ от созданного
Отправлено: Александр Ривилис от 26-09-2015, 17:42:52
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. [assembly: CommandClass(typeof(DocOpenedOrCreated.Utils))]
  9.  
  10. namespace DocOpenedOrCreated
  11. {
  12.   public class Utils
  13.   {
  14.     static public void docMan_DocumentCreated(object sender,
  15.       Autodesk.AutoCAD.ApplicationServices.DocumentCollectionEventArgs e)
  16.     {
  17.       Application.ShowAlertDialog("Документ " +
  18.         ((e.Document.IsNamedDrawing) ? "открыт" : "создан"));
  19.     }
  20.  
  21.     [CommandMethod("AttReactor")]
  22.     public void MyCommand()
  23.     {
  24.       DocumentCollection docMan = Application.DocumentManager;
  25.       docMan.DocumentCreated += docMan_DocumentCreated;
  26.     }
  27.   }
  28. }

Ключевое свойство: Document.IsNamedDrawing
Название: Re: Как отличить открытый документ от созданного
Отправлено: Александр Пекшев aka Modis от 24-10-2015, 20:56:22
А вот в 2010 автокаде Document.IsNamedDrawing отсутствует... :-\
Придется пользоваться Document.Name - как я понял при сохраненном файле хранится полный путь к файлу, а при созданном и не сохраненном только имя файла
Название: Re: Как отличить открытый документ от созданного
Отправлено: Александр Ривилис от 25-10-2015, 00:31:41
Можно еще через P/Invoke для:
Код - C++ [Выбрать]
  1. bool _cdecl acedIsNamedDrawing(AcApDocument *doc);
Название: Re: Как отличить открытый документ от созданного
Отправлено: bargool от 27-10-2015, 10:54:29
Application.GetSystemVariable("DWGTITLED") - создан, или нет
Application.GetSystemVariable("DBMOD") - изменялся или нет после открытия/создания

UPD (для целостности комментария): Как отметил Александр Наумович в сообщении ниже, эти переменные работают только для текущего документа
Название: Re: Как отличить открытый документ от созданного
Отправлено: Александр Ривилис от 27-10-2015, 11:41:50
Application.GetSystemVariable("DWGTITLED") - создан, или нет
Application.GetSystemVariable("DBMOD") - изменялся или нет после открытия/создания
Хорошо, но не всегда применимо, т.к. значения этих системных переменных относятся к активному документу.