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"。

有没有人能告诉我如何添加或重命名已经在我的项目中的家庭参数?

Revit c# API重命名或添加参数内的家庭

如果您知道要更改的参数的名称,则可以使用以下解决方案(编辑族模式):

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时一直出错。

顺便让我知道,如果这是可行的,我正在尝试做一些类似的事情了!