如何在 Revit API 中的所有元素上设置“房间边界”属性

Posted

技术标签:

【中文标题】如何在 Revit API 中的所有元素上设置“房间边界”属性【英文标题】:How to set "Room Bounding" attribute on all elements in Revit API 【发布时间】:2020-07-25 20:37:38 【问题描述】:

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

迭代墙壁我可以这样做:

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

但是,我该如何为 Columns 做到这一点?或者任何其他具有此属性的元素?

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

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

但是我要寻找哪个属性?是“房间边界”吗?我是否将其设置为“是”或其他任何内容?

编辑: 我首先从这个开始: 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)

但这也没有用。

我应该在实例参数或类型参数中寻找“房间边界”吗?

【问题讨论】:

【参考方案1】:

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

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

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

我非常希望这能全面解决您的问题,不仅可以满足您的需求,还可以支持您转变为称职的未来渔夫。

【讨论】:

您好 Jeremy,我将定期查看 The Building Coder 示例和说明,他们帮助分配。我已经可以在 Revit API 中进行分配,而且我一直在学习,但是我无法解决这个具体问题,也无法在网上找到这个答案(即使有一些接近的例子)。我已经编辑了我的问题,以便更好地了解我已经尝试过的内容。我知道您不想给我答案,但是您的回答对我的问题来说有点笼统。你能给我指出一个更具体的方向吗? 您好 Raz,很高兴听到 The Building Coder 很有用且有帮助。不幸的是,由于缺乏知识,我无法更具体。我建议您向架构最终用户专家寻求有关如何在最终用户界面中手动解决此问题的帮助。整理好该部分后,就该进入编程环境并研究如何通过 API 以编程方式实现相同的结果了。 这是我上面提到的标准方法的一部分。我无法想象任何其他方法可以继续,因为程序员永远不知道高级 BIM 建模的所有细节复杂性。 一般来说,如果 Revit 产品中没有通过用户界面手动提供的功能,那么 Revit API 也不会提供它。因此,您应该研究最佳工作流程和最佳实践,以首先通过用户界面手动解决您手头的任务。为此,请与经验丰富的应用工程师、产品使用专家或产品支持人员讨论和分析。 请告诉我们您最终是如何解决这个问题的,以防其他人遇到同样的问题。谢谢!【参考方案2】:

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

给定 e 列,以下代码将“房间边界”参数更改为 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();
    

感谢杰里米的指导!

【讨论】:

以上是关于如何在 Revit API 中的所有元素上设置“房间边界”属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Forge API 从模型 Revit 2022 获取零件类别

获取出现在 Schedule Revit API 上的链接元素

revit墙分为两段,三段颜色如何设置?

Revit API - 创建新的 ScheduleField

在 Revit 2017 API 中获取房间的邻居

请问在revit2016中怎样设置不同颜色的墙