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

ADN Club => AutoCAD .NET API => Тема начата: RevitTormentor от 15-12-2017, 16:28:21

Название: Как правильно пользоваться DocumentCollection?
Отправлено: RevitTormentor от 15-12-2017, 16:28:21
Правильно я понимаю что
1) DocumentCollection.Count == количеству открытых чертежей.
2) Если документы сюда "натолкать" то в этой коллекции будут и все базы и Editor - ы?
3) Как идентифицируется документ в коллекции? Как извлечь базы из нужного документа при переключении между чертежами?
4) В каком месте проверять наличие документа в коллекции и записывать если там документа ещё нет.
Код - C# [Выбрать]
  1.        public void Initialize()
  2.         {

Код - C# [Выбрать]
  1.        void DocumentManager_DocumentCreated(object sender, DocumentCollectionEventArgs e)
  2.         {

Код - C# [Выбрать]
  1.         void Document_EndDwgOpen(object sender, DrawingOpenEventArgs e)
  2.         {
??? Или где?
Название: Re: Как правильно пользоваться DocumentCollection?
Отправлено: Александр Пекшев aka Modis от 15-12-2017, 16:33:17
Зачем в DocumentCollection что-то наталкивать? Зачем с ней вообще что-то делать???
Если меняется активный документ, то меняется значение поля MdiActiveDocument, которое всегда и хранит ссылку на активный документ (или null)
Название: Re: Как правильно пользоваться DocumentCollection?
Отправлено: avc от 15-12-2017, 16:37:13
1. да
2. не надо толкать. есть DocumentManager.Open
3. есть имя файла и у документа и у БД. у Document есть свойство Database и Editor
4. где хотите, только не там где вы написали. смотря зачем вам открывать документы программно. в обработчиках событий не советую (да и не сработает наверно). в сессионных командах можно.
Название: Re: Как правильно пользоваться DocumentCollection?
Отправлено: avc от 15-12-2017, 16:41:31
вот например я ищу открытый  документ по имени файла:
Код - C# [Выбрать]
  1.     public static bool Contains(this DocumentCollection docCol, string fileName, out Document document)
  2.     {
  3.       document = null;
  4.       if (string.IsNullOrEmpty(fileName))
  5.         return false;
  6.       string fn = Path.GetFullPath(fileName);
  7.  
  8.       foreach (Document doc in docCol)
  9.       {
  10.         if (fileName.EndsWith("dwt", StringComparison.OrdinalIgnoreCase) &&
  11.           doc.Name.EndsWith("dwg", StringComparison.OrdinalIgnoreCase)) continue; // у черетежа еще нет имени, а в doc.Database.Filename записано имя шаблона
  12.         string docName = doc.Database.Filename;
  13.         if (string.IsNullOrEmpty(docName))
  14.           continue;
  15.         if (fn.Equals(Path.GetFullPath(docName), StringComparison.OrdinalIgnoreCase))
  16.         {
  17.           document = doc;
  18.           return true;
  19.         }
  20.       }
  21.       return false;
  22.     }
Название: Re: Как правильно пользоваться DocumentCollection?
Отправлено: Александр Ривилис от 15-12-2017, 16:49:44
3. есть имя файла и у документа и у БД. у Document есть свойство Database и Editor
Уточню, что Editor один общий для всех Document.
Название: Re: Как правильно пользоваться DocumentCollection?
Отправлено: avc от 15-12-2017, 16:52:46
Уточню, что Editor один общий для всех Document.
Как интересно! Не знал. Тогда логичней было бы его приписать к Application
Название: Re: Как правильно пользоваться DocumentCollection?
Отправлено: Александр Ривилис от 15-12-2017, 16:57:42
Тогда логичней было бы его приписать к Application
Мне тоже так кажется, но в далёком AutoCAD 2006 пошли другим путём, а потом уже решили не трогать. Собственно говоря с документами напрямую он не связан. Из спортивного интереса почитай в документации описание класса AcEditor.