2

我修改了许多 Revit 梁和柱族,以添加一个参数,用于关联一系列模型元素以进行调度。现在我的老板要求我更改该参数的名称(根据他最初建议的名称)。

请注意,此参数是实例参数,不是共享参数。

现在我想以编程方式做两件事——首先,我想在该参数使用新名称时将其重命名。其次,如果尚未在这些系列中定义该参数(新名称),我想将该参数(新名称)添加到其他梁/柱系列。

我在网上探索了几种方法,例如:

    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 ***** , "Label Group") 但 FamilyManager 选项没有很好的记录(我什至不确定列出的“FamilyParameter”是否与“.rfa”中定义的参数匹配文件,或完全是另一件事)。我尝试将与 ElementName.Parameters 关联的参数作为 FamilyParameter *******,但 Visual Studio 说类型错误,当我尝试添加“作为家庭参数”时,它说“无法将参数隐式转换为 FamilyParameter”。

谁能给我一些关于如何为我的项目中已经存在的家庭添加或重命名参数的指针?

4

2 回答 2

2

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

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();
    }
}
于 2016-08-01T13:34:36.210 回答
0

我认为您在文档中停留在正确的轨道上并尝试在那里修改项目参数;虽然我不确定你是否能够轻松地将这些人带回家庭。我会尝试查看 Element.ParametersMap 并尝试随时编辑文档本身。您甚至可以考虑每次打开文档时触发的事件,以查找带有“X_Name”的参数并从那里更改。最终,尽管您更改的是文档,而不是家庭,这就是为什么我认为您在尝试从 Parameter 转换为 FamilyParameter 时不断出错的原因。

顺便告诉我是否可行,我现在也在尝试做类似的事情!

于 2014-07-18T11:05:43.927 回答