Как правильно пользоваться DocumentCollection?

Автор Тема: Как правильно пользоваться DocumentCollection?  (Прочитано 5596 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Правильно я понимаю что
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.         {
??? Или где?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Зачем в DocumentCollection что-то наталкивать? Зачем с ней вообще что-то делать???
Если меняется активный документ, то меняется значение поля MdiActiveDocument, которое всегда и хранит ссылку на активный документ (или null)

Отмечено как Решение RevitTormentor 15-12-2017, 16:41:47

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
1. да
2. не надо толкать. есть DocumentManager.Open
3. есть имя файла и у документа и у БД. у Document есть свойство Database и Editor
4. где хотите, только не там где вы написали. смотря зачем вам открывать документы программно. в обработчиках событий не советую (да и не сработает наверно). в сессионных командах можно.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
вот например я ищу открытый  документ по имени файла:
Код - 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.     }

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

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

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Уточню, что Editor один общий для всех Document.
Как интересно! Не знал. Тогда логичней было бы его приписать к Application

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Тогда логичней было бы его приписать к Application
Мне тоже так кажется, но в далёком AutoCAD 2006 пошли другим путём, а потом уже решили не трогать. Собственно говоря с документами напрямую он не связан. Из спортивного интереса почитай в документации описание класса AcEditor.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение