Переименование параметров семейства в открытом проекте.

Автор Тема: Переименование параметров семейства в открытом проекте.  (Прочитано 4240 раз)

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

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Добрый вечер!

Есть задача по переименванию параметров семейства в уже открытом проекте. На первый взгляд, хочется сделать следующим образом:
1. При загрузке плагина перехватить событие когда модель активна
application.ViewActivated += application_ViewActivated;

2. Открыть нужный фал в режиме Документа семейства(вот тут собственно вопрос возможно ли это) чтобы получить
FamilyManager mgr = fm_doc.FamilyManager;

3. Переименовать необходимый параметр
FamilyManager.RenameParameter

4. Загрузить семейства в активную модель

Есть ли смысл так делать или есть варианты попроще?
Спасибо

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Решил пока остаться на таком варианте, пока не найду получше:
Код - C# [Выбрать]
  1. UIApplication uiapp = commandData.Application;
  2. uiapp.OpenAndActivateDocument("C:\\Temp\\Test.rfa");
  3. UIDocument uidoc = uiapp.ActiveUIDocument;
  4. Application app = uiapp.Application;
  5. Document doc = uidoc.Document;
  6. FamilyManager fm = doc.FamilyManager;
  7. FamilyParameter param =  fm.get_Parameter("ReplacementPrmtr");
  8.             if (null != param)
  9.             using (Transaction tr = new Transaction(doc, "Renaming")) {
  10.                 tr.Start();
  11.                 fm.RenameParameter(param, "TEST_SUCCESS");
  12.                 tr.Commit();
  13.             }
  14.  
Минусы данного варианта, что приходится в активном проекте открывать много семейств, а Revit закрывает активные документы просто ужасно!
« Последнее редактирование: 14-06-2016, 07:00:39 от Виктор Чекалин »

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Сергей,
Идея с автообновлением при активации проекта имеет право на жизнь, но очень уж она не дружелюбна будет к пользователю. На большом проекте все это зависнет на несколько минут, и пользователь будет не понимать что происходит. Лучше как-то предупредить пользователя, что необходимо произвести обновление в проекте с подтверждением этого действия. Я бы сделал на открытие документа.
Получить документ семейства можно и довольно легко. Метод Document.EditFamily(Family family), который возвратит документ в режиме редактирования семейства. Но вот загвоздка в том, что данный метод на сколько я помню, откроет семейство в режиме редактирования в интерфейсе Revit. Т.е. работать будет не быстро.
Чтоб загрузить семейство обратно в проект, используй метод Document.LoadFamily

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Да, Виктор, не дружелюбна - это мягко сказано:)
Пришлось немного поиздеваться над пользователями и показывать окно процесса во время переименования параметров, и к тому же по завершении перегрузить Revit. Ну в целом это делается один раз при не совпадении языка.
Попробовал метод Document.EditFamily, в целом похожее решение (потому как редактор семейств также открывается в активном окне), но есть свои плюсы: docEditor.Close() - работает, в отличие от uidoc.SaveAndClose(), но из минусов по какойто причине не все семейства могут быть открыты и отредактированы, пишет, что нет доступа, хотя при этом он отлично открывается в редакторе (отдельно).
Остановлюсь пока на своем варианте, а позже скорее всего просто в одтельную процедуру (кнопку на панели) выведу, чтобы менять название параметров на усмотрение пользователя.