Revit C#API在Family内重命名或添加参数

时间:2014-07-11 15:11:38

标签: c# revit-api

我修改了许多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.RenameParameter(FamilyParameter ***** ,“标签组”) 但FamilyManager选项没有很好地记录(我甚至不确定列出的“FamilyParameter”是否匹配“.rfa”文件中定义的参数,或者完全是另一件事)。我尝试将与ElementName.Parameters关联的Parameter作为FamilyParameter ******* ,但Visual Studio说错了类型,当我尝试添加“as Family Parameter”时,它说“不能”隐式地将Parameter转换为FamilyParameter“。

有人可以向我提供有关如何为我项目中的家庭添加或重命名参数的指示吗?

2 个答案:

答案 0 :(得分:1)

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

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();
    }
}

答案 1 :(得分:0)

我认为你在文档中保持正确的轨道并尝试修改项目参数;虽然我不确定你是否能够轻松地让那些回到家里。我会尝试查看Element.ParametersMap,并尝试随时编辑文档本身。您甚至可以考虑每次打开文档时触发的事件,以查找具有“X_Name”的参数并使其从那里更改。最终,虽然您正在更改文档,而不是系列,这就是为什么我认为您在尝试从Parameter转换为FamilyParameter时仍然遇到错误。

如果顺便说一下,请告诉我,我现在也想尝试做类似的事情!