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

ADN Club => Revit API => Тема начата: Iurii от 11-11-2020, 15:20:50

Название: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Iurii от 11-11-2020, 15:20:50
Здравствуйте!
Из-за авралов на работе почти год не было времени принимать попытки автоматизации.
Сейчас есть время и вопрос:
В приложении необходимо (для последующей обработки) проверить наличие параметра во всех семействах определённой категории. При отсутствии его в некоторых семействах - добавлять в них.
Вроде самый простой способ - добавить этот параметр для данной категории в параметры проекта, но как я понял в форуме Джереми Таммика, эта возможность не предусмотрена. В связи с почти почти полным отсутствием опыта Revit API, не могу разобраться сам. Примеры из интернета, как я понял предусматривают загрузку параметра в семейство из файла общих настроек, мне же достаточно просто установить новый текстовой параметр "по экземпляру".  Попытки просто считать список семейств по категории (при заранее установленным в Ревите параметром семейства), говорят, что параметр = null.
Код - C# [Выбрать]
  1. ICollection<FamilySymbol> famType =   new FilteredElementCollector(doc)
  2.                                 .OfCategory(BuiltInCategory.OST_ElectricalEquipment)
  3.                                 .OfClass(typeof(FamilySymbol))
  4.                                 .Cast<FamilySymbol>()
  5.                                 .ToList();
  6.  
  7.            
  8.             foreach (FamilySymbol ft in famType)
  9.             {
  10.                 var getPar = ft.LookupParameter(serParam);
  11.                 if (ft.LookupParameter(serParam) == null)
  12.                     serParam = "null";
  13.                 else
  14.                     serParam = "exist";
  15.  
  16.                 str += ft.Name + "   " + ft.Family.Name + "   " + serParam + Environment.NewLine;
  17.             }
  18.             Clipboard.SetText(str);
  19.             TaskDialog.Show("Systems", "Скопируйте текст в блокнот");
Есть ли какое-нибудь решение проблемы?
Название: Re: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Александр Ривилис от 11-11-2020, 15:49:50
Из-за авралов на работе почти год не было времени принимать попытки автоматизации.
И конечно за этот год ты забыл как следует форматировать код для форума. ;) Напоминаю!
Название: Re: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Iurii от 11-11-2020, 16:16:19
Постарался успеть исправиться.
Название: Re: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Iurii от 12-11-2020, 07:22:35
Что-то тут подумал, что при собирании по FamilySymbol собираются все типы семейств по категории. При добавлении параметра в семейство он добавляется во все его типы. Т.е достаточно собрать коллекцию семейств по категории и проверять наличие параметра (и добавлять новый параметр) не имея список всех типов семейств. С другой стороны

Код - C# [Выбрать]
  1. ICollection<Family> famType = new FilteredElementCollector(doc)
  2.                     .OfCategory(BuiltInCategory.OST_ElectricalEquipment)
  3.                     .OfClass(typeof(Family))
  4.                     .Cast<Family>()
  5.                     .ToList();

не собирает вообще ничего.
Название: Re: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Александр Игнатович от 12-11-2020, 11:09:40
Эм. Параметр проекта создать на заданную категорию?

Пример есть прямо в документации

(https://i.postimg.cc/RNzycz0h/instancebinding.png) (https://postimg.cc/RNzycz0h)

API позволяет создать параметры проекта на основе общих параметров. Нет возможности напрямую создавать "обычные", т.е. не общие параметры проекта. Но тут, на самом деле тоже есть одна хитрость, их можно скопировать из существующего проекта
Название: Re: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Iurii от 13-11-2020, 16:09:45
Попробовал, всё получилось, если бы не одно но - у нас файл общих параметров закрыт на запись, так что не думаю, что это вариант.
По поводу копирования из существующего проекта, то, в случае плагина, я так думаю, в плагине надо держать сам файл проекта - а он практически пустой весит нормально. Нашёл более интересный вариант - подменный файл общих параметров, у него с одним нужным параметром вес 1кБ. -
.
Т.е. вторая половина вопроса в общем-то решена, осталось разобраться с первой.
Название: Re: Проверка наличия параметра в семействе, и добавление параметра семейства
Отправлено: Iurii от 14-11-2020, 12:54:06
Опытным путём установил, что де обязательно проверять наличие параметра в семействе, и при его отсутствии добавлять его. Достаточно просто добавить параметр в семейство - если он уже есть - то он де-факто не добавляется, значения параметра не обнуляется.
Так что вопрос исчерпан.