如何在 Revit API 中的所有元素上设置 "Room Bounding" 属性

How to set "Room Bounding" attribute on all elements in Revit API

我想遍历文档中的所有元素,如果它们具有 Room Bounding 属性,则将它们的 "Room Bounding" 属性设置为正值。

迭代墙壁我可以这样做:

Parameter param = e.get_Parameter(BuiltInParameter.WALL_ATTR_ROOM_BOUNDING).Set("Yes");

但是,如何为列执行此操作?或者其他有这个属性的元素?

我尝试遍历所有元素并使用以下方法获取它们的参数:

IList<Parameter> ps = e.GetOrderedParameters();

但我要寻找哪个属性?是"Room Bounding"吗?我是将它设置为 "Yes" 还是其他任何东西?

编辑: 我首先从这个开始: https://thebuildingcoder.typepad.com/blog/2008/09/selecting-all-w.html 调整代码以检索 Room Bounding 参数。

然后更改我的代码以支持所有元素,正如我提到的问题并使用: https://thebuildingcoder.typepad.com/blog/2018/05/getting-all-parameter-values.html

我用它来打印所有参数名称及其值,但是我在列中找不到 Room Bounding 参数。 我可以轻松地在墙上做到这一点。

我试过使用 https://forums.autodesk.com/t5/revit-api-forum/get-the-value-of-shared-a-parameter-of-a-structural-column/td-p/8249860 并使用

mycolumnList[i].LookupParameter("Room Bounding").AsInteger() != 1)

但这也没有用。

我应该在实例参数还是类型参数中查找 "Room Bounding"?

请关注 standard approach to research and solve a Revit API programming task:

  1. 通过最终用户界面手动确定最佳解决方案。确保遵循最佳实践并利用现有的内置 Revit 功能。如果您跳过此步骤或研究不够深入,您将 运行 编写一些难以实现、维护、调试和使用的东西的很大风险。
  2. 确定将帮助您完成任务的 Revit 类、方法和属性的名称。例如,创建适当的情况并通过用户界面对 BIM 进行采样,并在进行所需修改之前和之后对其进行分析,例如,使用:
  3. 了解需要哪些 Revit API 对象后,了解如何访问、操纵和驱动它们、它们之间的关系以及它们如何相互作用:
    • Revit API 帮助文件 RevitAPI.chm 在本地安装或 online at revitapidocs.com 提供有关 类、属性和方法的详细信息。
    • Revit online help > Developers > Revit API Developers Guide 更深入地解释了 Revit API 的用法并提供了宝贵的背景信息。
    • 本地安装并由 Visual Studio 通过 SDKSamples.sln 管理的 Revit SDK 示例集合展示了 Revit API 对象如何协同工作以解决特定任务。
    • The Building Coder samples 提供了另一大堆示例外部命令来实现许多不同的任务。

用尽这些选项后,在 Internet 上搜索 'revit api' 或 'thebuildingcoder' 以及您感兴趣的 Revit API 名称。

我非常希望这能全面解决您的问题,不仅能暂时满足您的需求,还能在您成为未来有能力的渔夫的过程中为您提供支持。

我想我会 post 一个解决方案来帮助遇到类似问题的其他人。

给定列 e,以下代码将 "Room Bounding" 参数更改为 True。 (请注意此代码不处理异常)

FamilyInstance famInst = e as FamilyInstance;
Parameter family_bound_param = famInst.LookupParameter("Room Bounding");
if (family_bound_param.AsValueString() == "No")
{                           
    using (Transaction t = new Transaction(doc, "param"))
    {
        t.Start();
        family_bound_param.Set(1);
        t.Commit();
    }
}

感谢 Jeremy 的指导!