Revit c# API重命名或添加参数内的家庭
本文关键字:参数 家庭 添加 API 重命名 Revit | 更新日期: 2023-09-27 18:12:42
我修改了一些Revit Beam和Column族,以添加一个参数,用于关联一系列用于调度目的的模型元素。现在我的老板要求我更改那个参数的名称(从他最初建议的名称)。
注意,这个参数是一个实例参数,不是一个共享参数。
现在我想用编程的方式做两件事——首先,我想在使用新名称时将该参数重命名。其次,我想将该参数(新名称)添加到其他梁/列族中,如果它尚未在这些族中定义。
我已经在网上探索了一些方法,例如:
BindingMap All_Binding = doc.ParameterBindings;
DefinitionBindingMapIterator Iterator = All_Binding.ForwardIterator();
Iterator.Reset(); List<string> BindingList = new List<string>();
while (Iterator.MoveNext())
{
Definition def = Iterator.Key;
ElementBinding Binders = (ElementBinding)Iterator.Current;
BindingList.Add(def.Name);
}
BindingList.Sort();
返回项目中可用的共享参数列表。
我还研究了FamilyManager,但没有很好的文档。我试着:
doc.FamilyManager。重命名参数(FamilyParameter *****, "Label Group")但是FamilyManager选项没有很好的记录(我甚至不确定列出的"FamilyParameter"是否与定义在"中的参数匹配。Rfa"文件,或者完全是另一回事)。我尝试将参数与ElementName相关联。参数作为FamilyParameter *******,但Visual Studio说错误的类型,当我尝试添加"作为家庭参数"时,它说"不能隐式地将参数转换为FamilyParameter"。
有没有人能告诉我如何添加或重命名已经在我的项目中的家庭参数?
如果您知道要更改的参数的名称,则可以使用以下解决方案(编辑族模式):
Document doc = this.ActiveUIDocument.Document;
if( !doc.IsFamilyDocument )
{
TaskDialog.Show("Error","This is not a family document");
return;
}
//give here old and new name
string oldname = "Reverse_direction";
string newname = "Reverse direction";
FamilyManager fman = doc.FamilyManager;
if (fman.get_Parameter(oldname) != null)
{
using (Transaction t = new Transaction(doc,"Change name"))
{
t.Start();
FamilyParameter param = fman.get_Parameter(oldname);
fman.RenameParameter(param, newname);
t.Commit();
}
}
我认为你在正确的轨道上停留在文档中,并试图修改那里的项目参数;不过我不确定你能不能轻易地把它们放回家里。我会试着看看Element。而不是ParametersMap,并尝试随时编辑文档本身。您甚至可以考虑在每次打开文档时触发一个事件,以查找带有"X_Name"的参数,并从那里进行更改。最终,虽然您正在更改文档,而不是家庭,这就是为什么我认为您在尝试从Parameter转换为FamilyParameter时一直出错。
顺便让我知道,如果这是可行的,我正在尝试做一些类似的事情了!