Как получить полный путь к файлу центральной модели?

Автор Тема: Как получить полный путь к файлу центральной модели?  (Прочитано 6110 раз)

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

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Добрый день, коллеги.

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

В справочнике нашёл упоминание о свойстве 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?

Отмечено как Решение Пашин Евгений 06-10-2017, 11:29:55

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
М-да уж, решение, как я и говорил, странное:

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

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

Спасибо за решение вот этой статье: http://adn-cis.org/versiya-dokumenta-i-kolichestvo-soxranenij.html

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
М-да уж, решение, как я и говорил, странное:

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

Класс Autodesk.Revit.DB.BasicFileInfo, как оказалось, можно использовать без объявления конструктора New.
Вообще-то не класс, а метод Extract - этот метод статический, т.е. не требует экземпляра класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вообще-то не класс, а метод Extract - этот метод статический, т.е. не требует экземпляра класса.

Спасибо, буду знать.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вообще-то не класс

Александр Наумович, можете подсказать мне, что Вы имели в виду? Как-то мимолётно пропустил это выражение. Со статическим классом мне всё понятно. А вот с тем, что Autodesk.Revit.DB.BasicFileInfo - это не класс, это как-то не очень понял.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот с тем, что Autodesk.Revit.DB.BasicFileInfo - это не класс, это как-то не очень понял.
Autodesk.Revit.DB.BasicFileInfo - это класс. Autodesk.Revit.DB.BasicFileInfo.Extract - это статический метод класса Autodesk.Revit.DB.BasicFileInfo.
Так как Extract - это статический метод, то для него не требуется экземпляр класса - это метод один общий для всех экземпляров класса. И вызывается он без указания экземпляра класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Autodesk.Revit.DB.BasicFileInfo - это класс. Autodesk.Revit.DB.BasicFileInfo.Extract - это статический метод класса Autodesk.Revit.DB.BasicFileInfo.
Так как Extract - это статический метод, то для него не требуется экземпляр класса - это метод один общий для всех экземпляров класса. И вызывается он без указания экземпляра класса.

Правильно ли я понимаю, что любой класс может быть статическим/НЕ статическим, но при этом всегда имеется доступ к его статическим методам без создания экземпляра такого класса?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
всегда имеется доступ к его статическим методам без создания экземпляра такого класса?
Да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Спасибо, теперь я лучше стал понимать справочные материалы по продуктам Autodesk.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Действительно это просто:

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

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

Получается так можно с любым классом работать, у которого есть статические методы. Удобно!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Тоже самое относится и к статическим свойствам?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Тоже самое относится и к статическим свойствам?
Да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Ещё раз, спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Пример из AutoCAD: HostApplicationServices.WorkingDatabase - статическое свойство.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Пример из AutoCAD: HostApplicationServices.WorkingDatabase - статическое свойство.

Теперь всё понятно.