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

ADN Club => Revit API => Тема начата: Bazinga от 27-02-2018, 10:37:58

Название: Переименование типоразмера в семействе
Отправлено: Bazinga от 27-02-2018, 10:37:58
Код - C# [Выбрать]
  1. Document doc = application.Application.OpenDocumentFile(System.IO.Path.Combine(path, name));
  2.             FamilyManager fmg = doc.FamilyManager;
  3.             using (Transaction remT = new Transaction(doc, "remove"))
  4.             {
  5.                 remT.Start();
  6.                 try
  7.                 {
  8.                     foreach (FamilyType _type in fmg.Types)
  9.                     {
  10.                         if (_type.Name == typeold)
  11.                         {
  12.                             fmg.RenameCurrentType(typenew);
  13.                             break;
  14.                         }
  15.                     }
  16.                     remT.Commit();
  17.                 }
  18.                 catch (Exception ex)
  19.                 {
  20.                     remT.RollBack();
  21.                 }
  22.             }
  23.             doc.Save();
  24.             doc.Close();
Код, который должен переименовывать типоразмер в семействе. Переименовывает, но с одним существенным минусом: не тот типоразмер, а просто последний.
Пробовала завершение транзакции ставить перед прерыванием цикла, все равно переименовывает последний типоразмер.
Само выполнение операции срабатывается, когда надо, но почему текущим типоразмером становится последним, остается загадкой.
Название: Re: Переименование типоразмера в семействе
Отправлено: Александр Пекшев aka Modis от 27-02-2018, 10:50:54
Bazinga, все-таки я заставил вас создать тему =)
Итак, я код не проверял, но вангую что причина в следующем:
Для переименования вы используете метод FamilyManager.RenameCurrentType(string typeName) (http://www.revitapidocs.com/2018.1/ddd98706-5a07-feac-4b1f-49d52471a8c8.htm). Но если вы внимательно прочитаете описание (Rename the current family type.) и обратите внимание на то, что метод принимает всего один параметр, то заметите, что чего-то не хватает - метод переименовывает текущий типоразмер и принимает один параметр "новое имя". Ну а текущий типоразмер - это что?
Поэтому, нужно сделать так:
Код - C# [Выбрать]
  1. foreach (FamilyType type in fmg.Types)
  2. {
  3.     if (type.Name == typeold)
  4.     {
  5.         fmg.CurrentType = type;
  6.         fmg.RenameCurrentType(typenew);
  7.         break;
  8.     }
  9. }
Т.е. задать текущий типоразмер для FamilyManager
Название: Re: Переименование типоразмера в семействе
Отправлено: Bazinga от 27-02-2018, 11:04:04
Александр Пекшев aka Modis, да проблема была в том, чтобы нужный типоразмер сделать текущим. Тонкость Revit Api. Обычно по умолчанию выбранный элемент текущий.
Название: Re: Переименование типоразмера в семействе
Отправлено: Александр Пекшев aka Modis от 27-02-2018, 11:08:46
Обычно по умолчанию выбранный элемент текущий.
Так у вас в коде нет выбранного типоразмера =)