如何在 revit-api c# 中将参数添加到 revit 文档中的 revit 族元素
How to add parameters to a revit family element from revit document in 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".
的参数
是的,您也可以通过 API 以编程方式实现相同的目的。
正如手动方式需要打开family文件一样,在API中调用EditFamily
方法即可:
https://apidocs.co/apps/revit/2019/56e636ee-5008-0ee5-9d6c-5f622dedfbcb.htm
查看 The Building Coder 提到此方法的各种帖子,例如 Modifying, Saving and Reloading Families。
我正在开展一个项目,我需要在 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".
的参数是的,您也可以通过 API 以编程方式实现相同的目的。
正如手动方式需要打开family文件一样,在API中调用EditFamily
方法即可:
https://apidocs.co/apps/revit/2019/56e636ee-5008-0ee5-9d6c-5f622dedfbcb.htm
查看 The Building Coder 提到此方法的各种帖子,例如 Modifying, Saving and Reloading Families。