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

ADN Club => Revit API => Тема начата: Пашин Евгений от 06-10-2017, 11:07:51

Название: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 06-10-2017, 11:07:51
Добрый день, коллеги.

Требуется помощь в определении пути к файлу центральной модели.

В справочнике нашёл упоминание о свойстве CentralPath, но как именно его определить - пока не нашёл.

На форуме Autodesk нашёл такое решение, правда не уверен, что оно рабочее, с помощью BasicFileInfo:



Код - C# [Выбрать]
  1. public void WorksharedProperties()
  2.                 {
  3.                         Document doc = Application.ActiveUIDocument.Document;
  4.                         string docPath = doc.PathName;
  5.                        
  6.                         try {
  7.                                 bool docIsLocal = BasicFileInfo.Extract(docPath).IsLocal;
  8.                                 bool docIsCreatedLocal = BasicFileInfo.Extract(docPath).IsCreatedLocal;
  9.                                 bool docIsCentral = BasicFileInfo.Extract(docPath).IsCentral;
  10.                                
  11.                                 string centralPath = BasicFileInfo.Extract(docPath).CentralPath;
  12.                                 bool pathsMatch = docPath == centralPath;
  13.                                
  14.                                 TaskDialog td = new TaskDialog("Bimorph")
  15.                     {
  16.                         Title = "Results",
  17.                         MainContent = "IsLocal Property result : " + docIsLocal.ToString() +
  18.                                 "\nIsCreatedLocal Property result : " + docIsCreatedLocal.ToString() +
  19.                                 "\nIsCentral Property result : " + docIsCentral.ToString() +
  20.                                 "\nCentral path == active doc path result : " + pathsMatch.ToString()
  21.                     };
  22.                     td.Show();
  23.                         }
  24.                         catch (Exception) {
  25.                                
  26.                                 TaskDialog td = new TaskDialog("Bimorph")
  27.                     {
  28.                         Title = "Results",
  29.                         MainContent = "This is not a workshared file"
  30.                     };
  31.                     td.Show();
  32.                         }
  33.                        
  34.                 }

Может кто-нибудь сказать, как этот BasicFileInfo получить, чтобы воспользоваться его методом Extract?
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 06-10-2017, 11:28:39
М-да уж, решение, как я и говорил, странное:

Код - C# [Выбрать]
  1. string centralPath = BasicFileInfo.Extract(docPath).CentralPath;

Класс Autodesk.Revit.DB.BasicFileInfo, как оказалось, можно использовать без объявления конструктора New.

Спасибо за решение вот этой статье: http://adn-cis.org/versiya-dokumenta-i-kolichestvo-soxranenij.html
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Александр Ривилис от 06-10-2017, 15:44:10
М-да уж, решение, как я и говорил, странное:

Код - C# [Выбрать]
  1. string centralPath = BasicFileInfo.Extract(docPath).CentralPath;

Класс Autodesk.Revit.DB.BasicFileInfo, как оказалось, можно использовать без объявления конструктора New.
Вообще-то не класс, а метод Extract - этот метод статический, т.е. не требует экземпляра класса.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 06-10-2017, 15:53:03
Вообще-то не класс, а метод Extract - этот метод статический, т.е. не требует экземпляра класса.

Спасибо, буду знать.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 12:41:49
Вообще-то не класс

Александр Наумович, можете подсказать мне, что Вы имели в виду? Как-то мимолётно пропустил это выражение. Со статическим классом мне всё понятно. А вот с тем, что Autodesk.Revit.DB.BasicFileInfo - это не класс, это как-то не очень понял.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Александр Ривилис от 19-10-2017, 12:48:55
А вот с тем, что Autodesk.Revit.DB.BasicFileInfo - это не класс, это как-то не очень понял.
Autodesk.Revit.DB.BasicFileInfo - это класс. Autodesk.Revit.DB.BasicFileInfo.Extract - это статический метод класса Autodesk.Revit.DB.BasicFileInfo.
Так как Extract - это статический метод, то для него не требуется экземпляр класса - это метод один общий для всех экземпляров класса. И вызывается он без указания экземпляра класса.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 12:59:59
Autodesk.Revit.DB.BasicFileInfo - это класс. Autodesk.Revit.DB.BasicFileInfo.Extract - это статический метод класса Autodesk.Revit.DB.BasicFileInfo.
Так как Extract - это статический метод, то для него не требуется экземпляр класса - это метод один общий для всех экземпляров класса. И вызывается он без указания экземпляра класса.

Правильно ли я понимаю, что любой класс может быть статическим/НЕ статическим, но при этом всегда имеется доступ к его статическим методам без создания экземпляра такого класса?
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Александр Ривилис от 19-10-2017, 13:01:02
всегда имеется доступ к его статическим методам без создания экземпляра такого класса?
Да.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 13:03:11
Спасибо, теперь я лучше стал понимать справочные материалы по продуктам Autodesk.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 13:07:43
Действительно это просто:

Код - vb.net [Выбрать]
  1. Imports Autodesk.Revit.DB.BasicFileInfo

и теперь все его статические методы доступны (правда там всего лишь один :) ).

Получается так можно с любым классом работать, у которого есть статические методы. Удобно!
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 13:25:28
Тоже самое относится и к статическим свойствам?
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Александр Ривилис от 19-10-2017, 13:26:40
Тоже самое относится и к статическим свойствам?
Да.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 13:31:29
Ещё раз, спасибо.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Александр Ривилис от 19-10-2017, 13:34:21
Пример из AutoCAD: HostApplicationServices.WorkingDatabase - статическое свойство.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 19-10-2017, 13:45:09
Пример из AutoCAD: HostApplicationServices.WorkingDatabase - статическое свойство.

Теперь всё понятно.
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Александр Пекшев aka Modis от 08-11-2017, 17:09:43
Если вдруг интересно, то есть второй вариант
Код - C# [Выбрать]
  1. ModelPathUtils.ConvertModelPathToUserVisiblePath(doc.GetWorksharingCentralModelPath())
Потестил немного - разницы (конкретно для полного пути к центральной модели) не заметил =)
Название: Re: Как получить полный путь к файлу центральной модели?
Отправлено: Пашин Евгений от 09-11-2017, 09:04:17
Отвечаю в надежде получить плюсики в карму =))

No problem :)