Как добавить параметры к элементу семейства Revit из документа Revit в revit-api c #

Я работаю над проектом, в котором мне нужно загрузить семейства Revit фитингов (изгибов) труб в документ Revit и обновить его общие параметры как параметры типа.

Мне удалось выполнить эту задачу, поскольку мне нужно было получить доступ к семейству изгибов как к экземпляру семейства.

Вторая часть требования - также обновить параметры семейства муфт гиба. Проблема в том, что я не могу получить доступ к параметру связи из документа Revit.

Если я попробую это сделать вручную, параметр соединения будет доступен только при двойном щелчке по семейству сгибов, при этом откроется файл семейства Revit. Затем я могу получить доступ к обеим муфтам по обе стороны от изгиба. Как я могу выполнить указанную выше задачу программного добавления параметров к элементу семейства Revit из документа Revit.

Пожалуйста, направь меня.

Заранее спасибо.

Мой код:

 foreach (var item in MainModel.listElement)//List<Element>
 {
    FamilyInstance elFamInst = item as FamilyInstance;
    if (elFamInst.Symbol.FamilyName == "MainFamilyName")//Bend Family
    {
       ElementId id = item.GetTypeId();
       ElementType et = doc.GetElement(id) as ElementType;

       Family fam = elFamInst.Symbol.Family;

       if (elFamInst.SuperComponent == null)
       {
          var subElements = elFamInst.GetSubComponentIds();
          if (subElements.Count != 0)
          {
             foreach (var aSubElemId in subElements)
             {
                var aSubElem = doc.GetElement(aSubElemId);
                if (aSubElem is FamilyInstance)
                {
                   FamilyInstance subEl = aSubElem as FamilyInstance;
                   Family fm = subEl.Symbol.Family;
                   if(subEl.Symbol.FamilyName == "subFamilyName")//coupling family
                   {
                       Document docfamily = doc.EditFamily(fam);
                       if (null != docfamily && docfamily.IsFamilyDocument == true)
                       {
                          FamilyManager familyManager = docfamily.FamilyManager;
                          using (Transaction trans = new Transaction(docfamily, "param"))
                          {
                              trans.Start();
                              FamilyParameter fp = familyManager.AddParameter("Namess",BuiltInParameterGroup.PG_IDENTITY_DATA,ParameterType.Text, false);
                              familyManager.Set(fp, "JP");
                              trans.Commit();
                          }
                        }

                    }

                  }
               }
             }
          }
       }
    }

Мне не удается добиться результата, также я хочу, чтобы параметр «JP» был установлен только в семействе соединений, т.е. параметр с именем «subFamilyName».


person JPais    schedule 24.10.2018    source источник


Ответы (1)


Да, вы можете достичь того же программно, а также через API.

Так же, как вам нужно открыть файл семейства в ручном режиме, вы можете вызвать метод EditFamily, чтобы сделать это в API:

https://apidocs.co/apps/revit/2019/56e636ee-5008-0ee5-9d6c-5f622dedfbcb.htm

Ознакомьтесь с различными сообщениями The Building Coder, в которых упоминается этот метод, например, Изменение, сохранение и перезагрузка семейств.

person Jeremy Tammik    schedule 25.10.2018
comment
Спасибо, Джереми, за ответ, но, возможно, я что-то упускаю. Я добавил свой код, если это проясняет мой запрос. Еще раз, спасибо. - person JPais; 26.10.2018