选择
Last updated
Last updated
Revit 是一个数据丰富的环境。这为我们提供了一系列选择功能,使其远超“点击”范围。我们可以查询 Revit 数据库,以及在执行参数化操作的同时将 Revit 图元动态链接到 Dynamo 几何图形。
UI 中的 Revit 库提供了“选择”类别,该类别允许通过多种方式选择几何图形。
要正确选择 Revit 图元,请务必全面了解 Revit 图元层次结构。要选择项目中的所有墙?选择“按类别”。要选择您中世纪风格大厅中的每把埃姆斯椅?选择“按族”。
我们快速回顾一下 Revit 层次结构。
还记得生物学的分类法吗?界、门类、类别、等级、族、属、种?Revit 图元以类似方式分类。在基本级别上,Revit 层次结构可以分解为“类别”、“族”、“类型*”和“实例”。实例是一个模型图元(具有唯一 ID),而类别则定义常规组(如“墙”或“楼板”)。通过这种方式组织 Revit 数据库,我们可以选择一个图元,并根据层次结构中的指定级别选择所有相似图元。
*Revit 中的类型定义与编程中的类型不同。在 Revit 中,类型是指层次结构的分支,而不是“数据类型”。
下面的三幅图像对 Dynamo 中 Revit 图元选择的主要类别进行了细分。这些是可结合使用的优秀工具,我们将在以下练习中介绍其中一些工具。
“点击” 是直接选择 Revit 图元的最简单方法。可以选择完整的模型图元或其一部分拓扑(如面或边)。这会保持与该 Revit 对象的动态链接,因此,当 Revit 文件更新其位置或参数时,参照的 Dynamo 图元将在图形中更新。
“下拉”菜单 在 Revit 项目中创建所有可访问图元的列表。可以使用此选项来参照在视图中不一定可见的 Revit 图元。这是一款优秀的工具,可用于查询现有图元或者在 Revit 项目或族编辑器中创建新图元。
![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)
还可以在 Revit 层次结构 中按特定层级选择 Revit 图元。这是一个功能强大的选项,可用于自定义大型数据阵列,以准备文档或衍生式实例化和自定义。
在上述三幅图中,我们将深入探讨一个练习,该练习从基本 Revit 项目中选择图元,为我们将在本章的其余部分创建的参数化应用程序做好准备。
单击下面的链接下载示例文件。
可以在附录中找到示例文件的完整列表。
在此 Revit 文件示例中,我们有三种图元类型的简单建筑。我们将以此为例,在 Revit 层次结构的上下文中选择 Revit 图元。
建筑体量
梁(结构框架)
桁架(自适应构件)
基于 Revit 项目视图中当前的图元,我们可以得出哪些结论?我们需要在层次结构中向下行进多远来选择相应图元?当然,在处理大型项目时,这将成为一项更为复杂的任务。有许多可用选项:我们可以按“类别”、“标高”、“族”、“实例”等选择图元。
由于我们使用的是基本设置,因此我们选择“Categories”下拉节点中的 “Mass” 来选择建筑体量。这可在“Revit”>“选择”选项卡中找到。
“Mass”类别的输出只是类别本身。我们需要选择相应图元。为此,我们使用 “All Elements of Category” 节点。
请注意,此时我们在 Dynamo 中看不到任何几何图形。我们已选择 Revit 图元,但尚未将该图元转换为 Dynamo 几何图形。这是非常重要的差异。如果要选择大量图元,您不会希望在 Dynamo 中预览所有这些图元,因为这会降低所有操作的速度。Dynamo 是一款用于管理 Revit 项目的工具(无需执行几何图形操作),我们将在本章的下一部分中进行介绍。
在本例中,我们使用的是简单几何图形,因此我们希望将几何图形输入 Dynamo 预览。上述“Watch”节点中的“BldgMass”旁边有一个绿色数字。这表示该图元的 ID,指示处理的是 Revit 图元,而不是 Dynamo 几何图形。下一步是在 Dynamo 中将此 Revit 图元转换为几何图形。
使用 “Element.Faces” 节点,我们会得到一个包含曲面的列表,表示 Revit 体量的每个面。现在,我们可以在 Dynamo 视口中看到几何图形,然后开始参照相应面进行参数化操作。
以下是另一种方法。在这种情况下,我们将不会通过 Revit 层次结构 (“All Elements of Category”) 进行选择,而是改为在 Revit 中明确选择几何图形。
使用 “Select Model Element” 节点,单击*“select”*(或 “change” )按钮。在 Revit 视口中,选择所需的图元。在本例中,我们选择的是建筑体量。
我们可以使用 “Element.Geometry” 将完整体量作为一个实体几何图形进行选择,而不是使用 “Element.Faces”。这将选择该体量中包含的所有几何图形。
使用 “Geometry.Explode” ,我们可以再次获得包含曲面的列表。这两个节点的工作方式与 “Element.Faces” 相同,但提供了用于深入到 Revit 图元的几何图形的替代选项。
使用一些基本列表操作,我们可以查询关注的面。
首先,将之前选定的图元输出到“Element.Faces”节点。
接着,“List.Count” 节点会显示我们正在处理体量中的 23 个曲面。
参照此数字,我们将整数滑块的最大值更改为 “22”。
使用 “List.GetItemAtIndex”,我们为 “index” 输入列表和整数滑块。在选定内容之间滑动,当到达 “索引 9” 并隔离将桁架用作主要外立面时,便会停止。
上一步有点麻烦。我们可以使用 “Select Face” 节点更快地完成此操作。这样,我们便可以隔离 Revit 项目中本身不是图元的面。除了我们选择曲面而非完整图元之外,与 “Select Model Element” 相同的交互也适用。
假定我们要隔离建筑的主要外立面墙。我们可以使用 “Select Faces” 节点来执行此操作。单击“Select”按钮,然后在 Revit 中选择四个主要外立面。
选择四面墙后,确保在 Revit 中单击“完成”按钮。
现在,面作为曲面输入到 Dynamo 中。
现在,我们看一下横跨中庭的梁。
使用 “Select Model Element” 节点,选择其中一个梁。
将梁图元连接到 “Element.Geometry” 节点,现在在 Dynamo 视口中便有了梁。
我们可以使用 “Watch3D” 节点放大几何图形(如果在“Watch 3D”中看不到梁,请单击鼠标右键,然后点击“zoom to fit”)。
Revit/Dynamo 工作流中可能经常遇到的问题:如何选择一个图元并获取所有相似图元?由于选定的 Revit 图元中包含其所有层次结构信息,因此我们可以查询其族类型并选择该类型的所有图元。
将梁图元连接到 “Element.ElementType” 节点。
“Watch” 节点显示,输出现在是族符号,而不是 Revit 图元。
“Element.ElementType” 是一个简单查询,因此我们可以在代码块中执行此操作(就像使用
x.ElementType;
一样简单)并获得相同的结果。
要选择其余梁,我们使用 “All Elements of Family Type” (所有族类型的图元)节点。
“Watch”节点显示我们已选择了五个 Revit 图元。
我们也可以将所有这五个图元都转换为 Dynamo 几何图形。
如果我们有 500 个梁,该怎样办?将所有这些图元都转换为 Dynamo 几何图形会非常慢。如果 Dynamo 计算节点需要较长时间,可能需要使用“冻结”节点功能,以便在开发图形时暂停执行 Revit 操作。有关冻结节点的详细信息,请查看“实体”章节中的“冻结”部分。
在任何情况下,如果要输入 500 个梁,我们是否需要将所有曲面都用来执行所需的参数化操作?或者,我们是否可以从梁中提取基本信息,并使用基本几何图元执行衍生式任务?在学习本章时,我们要牢记这个问题。例如,接下来让我们看一下桁架系统。
使用相同的节点图,选择桁架图元而不是梁图元。在执行此操作之前,请在上一步中删除“Element.Geometry”。
接下来,我们准备从桁架族类型中提取一些基本信息。
在 “Watch” 节点中,我们可以看到从 Revit 中选择的自适应构件列表。我们要提取基本信息,因此我们从自适应点开始操作。
将 “All Elements of Family Type” (所有族类型的图元)节点连接到 “AdaptiveComponent.Location” 节点。这样,我们就得到了一个包含列表的列表,每个列表都有三个点,这三个点代表自适应点的位置。
连接 “Polygon.ByPoints” 节点会返回一条复合线。我们可以在 Dynamo 视口中看到这一结果。通过此方法,我们已可视化了一个图元的几何图形,并对其余图元阵列的几何图形进行了抽象处理(其数量可能大于本示例)。
提示:如果在 Dynamo 中单击 Revit 图元的绿色数字,则 Revit 视口将缩放到该图元。