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

ADN Club => Revit API => Тема начата: Пашин Евгений от 17-03-2016, 09:31:02

Название: Как получить список всех открытых проектов?
Отправлено: Пашин Евгений от 17-03-2016, 09:31:02
Добрый день, коллеги!

Подскажите как получить список всех открытых проектов в Revit?

Или подсказку на какой-нибудь ресурс )
Название: Re: Как получить список всех открытых проектов?
Отправлено: Александр Игнатович от 17-03-2016, 09:32:44
Код - C# [Выбрать]
  1. Application.Documents
Название: Re: Как получить список всех открытых проектов?
Отправлено: Пашин Евгений от 17-03-2016, 09:34:40
Application.Documents

Александр, спасибо!!!
Не удивлен, что это должно быть просто )))
Название: Re: Как получить список всех открытых проектов?
Отправлено: Виктор Чекалин от 17-03-2016, 09:36:45
Application.Documents
Небольшое дополнение. Свойство возвратит не только открытые, но и связанные файлы, так как Revit их все равно загружает.
Название: Re: Как получить список всех открытых проектов?
Отправлено: Пашин Евгений от 17-03-2016, 09:38:31
Небольшое дополнение. Свойство возвратит не только открытые, но и связанные файлы, так как Revit их все равно загружает.

А есть другая лазеечка? Просто следующей задачей будет переключение на неактивный документ и закрытие предыдущего... А я бы не хотел словить Fatal при переключении.
Название: Re: Как получить список всех открытых проектов?
Отправлено: Александр Игнатович от 17-03-2016, 09:45:15
Тут на форуме где-то мелькала тема получения связанных файлов документа.
Название: Re: Как получить список всех открытых проектов?
Отправлено: Александр Игнатович от 17-03-2016, 09:47:04
Код - C# [Выбрать]
  1.     public static class DocumentExtensions
  2.     {
  3.         public static IEnumerable<Document> GetLinkedDocuments(this Document document)
  4.         {
  5.             var linkedfiles = GetLinkedFileReferences(document);
  6.  
  7.             var linkedFileNames = linkedfiles
  8.                 .Select(x => ModelPathUtils.ConvertModelPathToUserVisiblePath(x.GetAbsolutePath()))
  9.                 .ToList();
  10.  
  11.             return document.Application.Documents
  12.                 .Cast<Document>()
  13.                 .Where(doc => linkedFileNames
  14.                     .Any(fileName => doc.PathName.Equals(fileName)));
  15.         }
  16.  
  17.         public static IEnumerable<RevitLinkInstance> GetRevitLinkInstances(this Document document)
  18.         {
  19.             var collector = new FilteredElementCollector(document);
  20.  
  21.             var linkInstances = collector.WherePasses(RevitLinkInstanceExtensions.GetDocumentRevitLinksInstancesFilter());
  22.  
  23.             return linkInstances
  24.                 .OfType<RevitLinkInstance>();
  25.         }
  26.  
  27.         private static IEnumerable<ExternalFileReference> GetLinkedFileReferences(Document document)
  28.         {
  29.             var collector = new FilteredElementCollector(document);
  30.             var linkedElements = collector
  31.                 .OfClass(typeof(RevitLinkType))
  32.                 .Where(x => RevitLinkType.IsLoaded(document, x.Id))
  33.                 .Select(x => x.GetExternalFileReference())
  34.                 .ToList();
  35.  
  36.             return linkedElements;
  37.         }
  38.     }
  39.  
Название: Re: Как получить список всех открытых проектов?
Отправлено: Виктор Чекалин от 17-03-2016, 09:51:25
Тут на форуме где-то мелькала тема получения связанных файлов документа.
Так речь то не об этом, а о том, как понять, можно ли активировать документ или нет. Евгению нужно активировать любой документ, чтобы закрыть предыдущий, но можно получить ошибку, при попытке активирования.
А есть другая лазеечка? Просто следующей задачей будет переключение на неактивный документ и закрытие предыдущего...
Думаю нужно просто правильно определить, можно ли активировать документ или нет.
Название: Re: Как получить список всех открытых проектов?
Отправлено: Виктор Чекалин от 17-03-2016, 09:53:00
Думаю нужно просто правильно определить, можно ли активировать документ или нет.
Беглый взгляд на методы API уловил свойство Document.IsLinked. Есть предположение, что если значение равно true, то переключиться нельзя.
Название: Re: Как получить список всех открытых проектов?
Отправлено: Пашин Евгений от 17-03-2016, 10:23:02
Беглый взгляд на методы API уловил свойство Document.IsLinked. Есть предположение, что если значение равно true, то переключиться нельзя.

Шикарно, если так )