Переименование типоразмера в семействе

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

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

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Код - 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();
Код, который должен переименовывать типоразмер в семействе. Переименовывает, но с одним существенным минусом: не тот типоразмер, а просто последний.
Пробовала завершение транзакции ставить перед прерыванием цикла, все равно переименовывает последний типоразмер.
Само выполнение операции срабатывается, когда надо, но почему текущим типоразмером становится последним, остается загадкой.

Отмечено как Решение Bazinga 27-02-2018, 12:00:24

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Bazinga, все-таки я заставил вас создать тему =)
Итак, я код не проверял, но вангую что причина в следующем:
Для переименования вы используете метод FamilyManager.RenameCurrentType(string typeName). Но если вы внимательно прочитаете описание (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

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Александр Пекшев aka Modis, да проблема была в том, чтобы нужный типоразмер сделать текущим. Тонкость Revit Api. Обычно по умолчанию выбранный элемент текущий.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Обычно по умолчанию выбранный элемент текущий.
Так у вас в коде нет выбранного типоразмера =)