Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
适用于 Revit 的 Dynamo 使用图形算法编辑器的数据和逻辑环境扩展建筑信息模型。它的灵活性与强大的 Revit 数据库相结合,可以提供全新的 BIM 视角。
本章着重介绍适用于 BIM 的 Dynamo 工作流。各部分主要基于练习,因为直接进入项目是熟悉 BIM 图形算法编辑器的最佳方式。首先,我们来谈谈程序的开头部分。
由于 Revit 和 Dynamo 都在不断发展,您可能会注意到,您使用的 Revit 版本与您计算机上安装的适用于 Revit 的 Dynamo 版本不兼容。下面概述了哪些适用于 Revit 的 Dynamo 版本与 Revit 兼容。
该项目最初非常简单,但凭借专门的开发者团队和充满激情的社区,已经发生了很大变化。
最初,Dynamo 旨在简化 Revit 中的 AEC 工作流。尽管 Revit 为每个项目创建了一个强大的数据库,但普通用户可能难以在界面约束之外访问此信息。Revit 托管全面的 API(应用程序程序界面),使第三方开发者可以创建自定义工具。程序员多年来一直在使用此 API,但并非所有人都可以访问基于文本的脚本。Dynamo 希望通过易得到的图形算法编辑器使 Revit 数据大众化。
使用核心 Dynamo 节点与自定义 Revit 节点,用户可以显著扩展参数化工作流以实现互操作性、文档编制、分析和生成。使用 Dynamo,可以自动执行繁琐的工作流,同时设计探索可以蓬勃发展。
在 Revit 项目或族编辑器中,导航到“附加模块”,然后单击 Dynamo。*
*Dynamo 仅在已打开的文件中运行。
在 Revit 中打开 Dynamo 时,有一个名为“Revit”的新类别。这是对用户界面完全新增的功能,可提供专门针对 Revit 工作流的节点。*
*通过使用 Revit 特定的节点族,Dynamo 图形将仅在适用于 Revit 的 Dynamo 中打开时可用。例如,如果在 Dynamo 沙盒中打开适用于 Revit 的 Dynamo 图形,Revit 节点将丢失。
由于 Revit 是一个提供强大项目管理的平台,因此 Dynamo 中的参数化操作可能非常复杂且计算速度缓慢。如果 Dynamo 计算节点需要较长时间,可能需要使用“冻结”节点功能,以便在开发图形时暂停执行 Revit 操作。
您可以在节点和导线部分,阅读有关冻结节点的详细信息。
由于 Dynamo 最初是为 AEC 开发的,因此其庞大且不断壮大的社区是一个绝佳资源,可供从业内专家处学习并与之联系。Dynamo 的社区由那些热衷于分享和创作的建筑师、工程师、程序员以及设计师组成。
Dynamo 是一个不断发展的开源项目,而且许多开发与 Revit 相关。如果您对于该游戏是新手,请访问论坛并开始发布问题!如果您是程序员并想参与 Dynamo 开发,请查看 GitHub 库。此外,Dynamo 软件包管理器是第三方库的绝佳资源。其中许多软件包都是由 AEC 制作的,我们将在本章中查看用于镶板的第三方软件包。
Dynamo 还维护着一个活跃的博客。阅读最近的帖子,了解最新进展!
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 个梁,我们是否需要将所有曲面都用来执行所需的参数化操作?或者,我们是否可以从梁中提取基本信息,并使用基本几何图元执行衍生式任务?在学习本章时,我们要牢记这个问题。例如,接下来让我们看一下桁架系统。
使用相同的节点图,选择桁架图元而不是梁图元。在执行此操作之前,请在上一步中删除“Element.Geometry”。
接下来,我们准备从桁架族类型中提取一些基本信息。
在 “Watch” 节点中,我们可以看到从 Revit 中选择的自适应构件列表。我们要提取基本信息,因此我们从自适应点开始操作。
将 “All Elements of Family Type” (所有族类型的图元)节点连接到 “AdaptiveComponent.Location” 节点。这样,我们就得到了一个包含列表的列表,每个列表都有三个点,这三个点代表自适应点的位置。
连接 “Polygon.ByPoints” 节点会返回一条复合线。我们可以在 Dynamo 视口中看到这一结果。通过此方法,我们已可视化了一个图元的几何图形,并对其余图元阵列的几何图形进行了抽象处理(其数量可能大于本示例)。
提示:如果在 Dynamo 中单击 Revit 图元的绿色数字,则 Revit 视口将缩放到该图元。
Revit 版本 | 第一个稳定的 Dynamo 版本 | 上次支持的适用于 Revit 的 Dynamo 版本 |
---|---|---|
如果我们有 500 个梁,该怎样办?将所有这些图元都转换为 Dynamo 几何图形会非常慢。如果 Dynamo 计算节点需要较长时间,可能需要使用“冻结”节点功能,以便在开发图形时暂停执行 Revit 操作。有关冻结节点的详细信息,请查看“实体”章节中的“”部分。
2013
2014
2015
2016
2017
2018
2019
2020+
2.1.0 - Revit 2020+ 现在包含 Dynamo,并像 Revit 一样接收更新。)
不适用
编辑文档记录的参数时遵循前面几节课程中学到的经验教训。在本节中,我们将查看编辑参数,这些参数不会影响图元的几何特性,而是为文档记录准备 Revit 文件。
在下面的练习中,我们将使用与平面节点的基本偏差,来为文档记录创建 Revit 图纸。参数化定义的屋顶结构上的每个嵌板都有不同的偏差值,我们希望使用颜色来突出值的范围,并通过安排自适应点来移交给外立面顾问、工程师或承包商。
“与平面的偏差”节点将计算四个点集与它们之间的最佳拟合平面之间的距离。这是一种研究可施工性快速而简便的方法。
单击下面的链接下载示例文件。
可以在附录中找到示例文件的完整列表。
从本部分的 Revit 文件开始(或从上一部分继续)。此文件中具有屋顶上 ETFE 嵌板的阵列。在本练习中,我们将参照这些嵌板。
向画布添加 “Family Types” 节点,然后选择 “ROOF-PANEL-4PT”。
将此节点连接到“Select All Elements of Family Type”节点,以将所有图元从 Revit 输入到 Dynamo。
使用 “AdaptiveComponent.Locations” 节点查询每个图元的自适应点位置。
使用 “Polygon.ByPoints” 节点基于这四个点创建多边形。请注意,我们现在在 Dynamo 中拥有镶板系统的抽象版本,无需输入 Revit 图元的完整几何图形。
使用 “Polygon.PlaneDeviation” 节点计算平面偏差。
接下来,与上一练习一样,我们会根据每个嵌板的平面偏差设置其孔径比。
将 “Element.SetParameterByName” 节点添加到画布,然后将自适应构件连接到 “element” 输入。将读取 “Aperture Ratio” 的 “代码块” 连接到 “parameterName” 输入。
我们无法直接将偏差结果连接到值输入,因为我们需要将这些值重新映射到参数范围。
使用 “Math.RemapRange”,通过在 “代码块” 中输入
0.15; 0.45;
,将偏差值重新映射到介于 0.15 和 0.45 之间的域。将这些结果连接到 “Element.SetParameterByName” 的值输入。
返回 Revit,我们可以 稍微 了解曲面上孔径的变化。
放大后,可以更清楚地看到闭合的嵌板在曲面的各个角落上都具有权重。开口角点朝向顶部。角点表示偏差较大的区域,而凸度具有最小曲率,因此这很有意义。
设置“Aperture Ratio”并不能清楚地显示屋顶上嵌板的偏差,而且我们还要修改实际图元的几何图形。假定我们只想研究制造可行性的偏差。根据我们文档的偏差范围对嵌板进行着色会很有帮助。我们可以通过以下一系列步骤实现,并且过程与上述步骤非常相似。
删除 “Element.SetParameterByName” 及其输入节点,然后添加 “Element.OverrideColorInView”。
将 “Color Range” 节点添加到画布,然后连接到 “Element.OverrideColorInView” 的颜色输入。为了创建渐变,我们仍需将偏差值连接到颜色范围。
将光标悬停在 “value” 输入上时,我们可以看到输入值必须介于 0 和 1 之间,以便将颜色映射到每个值。我们需要将偏差值重新映射到此范围。
使用 “Math.RemapRange”,将平面偏差值重新映射到介于 0 和 1 之间的范围(注意:也可以使用 “MapTo” 节点定义源域)。
将结果连接到 “Color Range” 节点。
请注意,我们的输出是颜色范围,而不是数字范围。
如果设置为“手动”,请点击 “运行” 。此时,应该能够无需再设置为“自动”。
返回 Revit,我们看到了更清晰的渐变,它代表了基于我们颜色范围的平面偏差。如果我们要自定义颜色,该怎么办?请注意,最小偏差值以红色表示,这似乎与我们的预期相反。我们希望最大偏差以红色表示,最小偏差以较柔和的颜色表示。我们返回 Dynamo,然后修复此问题。
使用 “代码块”,在两个不同代码行上添加两个数字:
0;
和255;
。通过将相应值连接到两个 “Color.ByARGB” 节点,即可创建红色和蓝色。
以这两种颜色创建列表。
将此列表连接到 “Color Range” 的 “colors” 输入,然后观察自定义颜色范围更新。
返回 Revit,我们现在可以更好地了解角点中偏差最大的区域。请记住,此节点用于替代视图中的颜色,因此如果我们在专注于特定分析类型的图形集中有特定图纸,这将非常有用。
在 Revit 中选择一个 ETFE 嵌板,我们会看到有四个实例参数:XYZ1、XYZ2、XYZ3 和 XYZ4。创建这些参数后,它们的内容都为空。这些是基于文字的参数,都需要值。我们会使用 Dynamo 将自适应点位置写入每个参数。如果需要将几何图形发送给外立面顾问工程师,这有助于实现互操作性。
在样例图纸中,我们有一个大的空明细表。XYZ 参数是 Revit 文件中的共享参数,这样我们便可将它们添加到明细表中。
放大后,XYZ 参数尚未填充。前两个参数由 Revit 处理。
为了写入这些值,我们将执行复杂的列表操作。该图形本身很简单,但这些概念主要基于列表一章中讨论的列表映射进行构建。
选择所有具有两个节点的自适应构件。
使用 “AdaptiveComponent.Locations” 提取每个点的位置。
将这些点转换为字符串。请记住,参数基于文字,因此我们需要输入正确的数据类型。
创建包含四个字符串的列表,该列表定义要更改的参数:XYZ1、XYZ2、XYZ3 和 XYZ4。
将此列表连接到 “Element.SetParameterByName” 的 “parameterName” 输入。
将 “Element.SetParameterByName” 连接到 “List.Combine” 的 “combinator” 输入。将 自适应构件 连接到 “list1”。将 Object 的 “String” 连接到 “list2”。
我们在此处进行列表映射,因为我们要为每个图元编写四个值,从而创建一个复杂的数据结构。“List.Combine” 节点在数据层次结构中定义一个向下步骤的操作。这就是 “Element.SetParameterByName” 的图元和值输入保留为空的原因。根据 “Element.SetParameterByName” 的空输入的连接顺序, “List.Combine” 会将其输入的子列表连接到这些空输入。
在 Revit 中选择一个嵌板后,现在会看到每个参数都有字符串值。实际上,我们将创建更简单的格式来写入点 (X,Y,Z)。这可以在 Dynamo 中使用字符串操作完成,但我们会绕过此处以停留在本章的范围内。
样例明细表的视图,其中已填充参数。
现在,每个 ETFE 嵌板都为每个自适应点写入了 XYZ 坐标,从而表示要预制的每个嵌板的角点。
尽管 Dynamo 是一个灵活的环境,旨在将其导入各种程序,但最初创建该环境是为了与 Revit 配合使用。可视化程序为建筑信息模型 (BIM) 带来了强大的选择。Dynamo 提供了专为 Revit 设计的一整套节点,以及来自蓬勃发展的 AEC 社区的第三方库。本章着重介绍在 Revit 中使用 Dynamo 的基础知识。
可以在 Dynamo 中使用完全参数化控制创建 Revit 图元阵列。Dynamo 中的 Revit 节点支持将常规几何图形中的图元输入到特定类别类型(如墙和楼板)。在本部分中,我们将重点介绍如何以参数化方式输入具有自适应构件的灵活图元。
自适应构件是一种灵活的族类别,非常适用于衍生应用程序。实例化后,即可创建复杂的几何图元,该图元由自适应点的基本位置驱动。
下面是族编辑器中三点自适应构件的示例。这将生成一个桁架,该桁架由每个自适应点的位置定义。在下面的练习中,我们将使用此构件在外墙上生成一系列桁架。
自适应构件是实现互操作性最佳实践的一个很好示例。我们可以通过定义基本自适应点来创建自适应构件阵列。在将该数据传输到其他程序时,我们能够将几何图形简化为简单数据。使用类似 Excel 的程序输入和输出遵循类似的逻辑。
假定外墙顾问想要知道桁架图元的位置,而无需通过完全铰接的几何图形进行解析。在准备制造时,顾问可以参照自适应点的位置,以在类似 Inventor 的程序中重新生成几何图形。
我们将在下面练习中设置的工作流允许我们在创建 Revit 图元时创建定义的同时访问所有这些数据。通过此流程,我们可以将概念化、文档编制和制造合并为一个无缝工作流。这将为互操作性创造更智能、更高效的流程。
下面的第一个练习将分步介绍 Dynamo 如何参照数据以创建 Revit 图元。为了生成多个自适应构件,我们会定义一个包含列表的列表,其中每个列表中都有表示自适应构件的每个点的三个点。在 Dynamo 中管理数据结构时,我们要记住这一点。
将参数化 Dynamo 几何图形输入 Revit 的另一种方法是使用 DirectShape。总之,DirectShape 图元和相关类支持将外部创建的几何形状存储在 Revit 文档中。几何图形可以包含闭合实体或网格。DirectShape 主要用于从 IFC 或 STEP 等其他数据格式输入形状,这些格式中没有足够信息可用于创建“真实”的 Revit 图元。与 IFC 和 STEP 工作流一样,DirectShape 功能非常适用于将 Dynamo 创建的几何图形作为真实图元输入到 Revit 项目。
让我们通过第二个练习来分步介绍如何将 Dynamo 几何图形作为 DirectShape 输入到 Revit 项目中。使用此方法,我们可以指定输入的几何图形的类别、材质和名称,同时保留指向 Dynamo 图形的参数化链接。
单击下面的链接下载示例文件。
可以在附录中找到示例文件的完整列表。
从本部分的示例文件开始(或从上一任务中的 Revit 文件继续操作),我们会看到相同的 Revit 体量。
这是已打开的文件。
这是我们使用 Dynamo 创建的桁架系统,与 Revit 体量智能链接。
我们已使用 “Select Model Element” (选择模型图元)和 “Select Face” (选择面)节点,现在我们在几何图形层次结构中向下进一步,并使用 “Select Edge” (选择边)。将 Dynamo 求解器设置为 “自动” 运行后,图形将不断更新到 Revit 文件中的更改。我们选择的边与 Revit 图元拓扑动态关联。只要拓扑*不改变,Revit 和 Dynamo 之间的连接就会保持链接。
选择玻璃外墙的最顶部曲线。这将跨越建筑的整个长度。如果在选择边时遇到问题,请记得在 Revit 中进行选择,方法是将光标悬停在相应边上,然后点击 “Tab” ,直到所需边亮显。
使用两个 “Select Edge” (选择边)节点,选择表示外墙中间的斜面处的每条边。
在 Revit 中,对外墙的底边执行相同的操作。
“Watch”(观察)节点显示我们现在在 Dynamo 中有线。这会自动转换为 Dynamo 几何图形,因为边本身不是 Revit 图元。这些曲线是我们将用于实例化整个外墙的自适应桁架的参照。
*为了保持拓扑一致,我们所引用的模型没有添加额外面或边。尽管参数可以更改其形状,但构建方式仍保持一致。
首先,我们需要连接曲线并将它们合并到一个列表中。这样,我们就可以对曲线 “分组” 以执行几何图形操作。
为外墙中间的两条曲线创建一个列表。
通过将 “List.Create” 组件插入到 “Polycurve.ByJoinedCurves” 节点,从而将两条曲线连接到复合线。
为外墙底部的两条曲线创建一个列表。
通过将 “List.Create” 组件插入到 “Polycurve.ByJoinedCurves” 节点,从而将两条曲线连接到复合线。
最后,将三条主要曲线(一条线和两条复合线)合并到一个列表中。
我们要利用顶部曲线(即一条线),它表示外墙的整个跨度。我们将沿这条线创建平面,以与我们在列表中分组在一起的一组曲线相交。
借助 “代码块”,使用以下语法定义一个范围:
0..1..#numberOfTrusses;
将整数滑块连接到代码块的输入。如您所料,这将表示桁架数。请注意,滑块控制在 0 至 1 所定义范围内的项目数。
将 “代码块” 插入到 “Curve.PlaneAtParameter” 节点的 “param” 输入,并将顶边插入到 “curve” 输入。这样,我们将获得十个平面,这些平面均匀分布在外墙的跨度上。
平面是几何图形的抽象部分,表示无限的二维空间。由于我们在此步骤中进行设置,因此平面非常适合轮廓和相交。
使用 “Geometry.Intersect” 节点(将连缀选项设置为叉积),将 “Curve.PlaneAtParameter” 连接到 “Geometry.Intersect” 节点的 “entity” 输入。将主 “List.Create” 节点插入到 “geometry” 输入。现在,我们在 Dynamo 视口中会看到代表每个曲线与定义平面相交的点。
请注意,输出是一列包含列表的列表。对于我们的目的而言,列表过多。我们想在这里进行部分展平。我们需要在列表中向下一步,然后展平结果。为此,我们使用 “List.Map” 操作,如 Primer 的列表章节中所述。
将 “Geometry.Intersect” 节点插入到 “List.Map” 的列表输入。
将 “Flatten” (展平)节点插入到 “List.Map” 的 f(x) 输入。结果给出 3 个列表,每个列表的计数等于桁架数。
我们需要更改此数据。如果要实例化桁架,我们需要使用在族中定义的相同数量的自适应点。这是一个三点自适应构件,因此我们想要的不是三个列表(每个列表 10 个项目 (numberOfTrusses)),而是 10 个列表(每个列表三个项目)。这样,我们就可以创建 10 个自适应构件。
将 “List.Map” 插入到 “List.Transpose” 节点。现在,我们得到了所需的数据输出。
要确认数据正确无误,请将 “Polygon.ByPoints” 节点添加到画布,然后使用 Dynamo 预览仔细检查。
采用创建多边形的相同方式,我们对自适应构件进行排列。
将 “AdaptiveComponent.ByPoints” 节点添加到画布,将 “List.Transpose” 节点插入到 “points” 输入。
使用 “Family Types” 节点,选择 “自适应桁架” 族,然后将其连接到 “AdaptiveComponent.ByPoints” 节点的 “FamilyType” 输入。
在 Revit 中,我们现在有十个桁架均匀分布在外立面上!
“调整”图形,我们通过更改滑块将“numberOfTrusses”调大为“30”。许多桁架,不太真实,但参数化链接仍起作用。验证后,将“numberOfTrusses”设置为“15”。
在最后一次测试中,通过在 Revit 中选择体量并编辑实例参数,我们可以修改建筑的形状,并观察桁架的跟随效果。请记住,必须打开此 Dynamo 图形才能看到此更新,并且链接会在该图形关闭后立即断开。
单击下面的链接下载示例文件。
可以在附录中找到示例文件的完整列表。
首先,打开本课程的示例文件“ARCH-DirectShape-BaseFile.rvt”。
在三维视图中,我们可以看到上一课程中的建筑体量。
沿着中庭的边是一条参照曲线,我们将此曲线用作 Dynamo 中的参照曲线。
沿着中庭的相对边是另一条参照曲线,我们也将在 Dynamo 中参照该曲线。
为了在 Dynamo 中参照我们的几何图形,我们将为 Revit 中的每个构件使用 “Select Model Element”。在 Revit 中选择体量,然后使用 “Element.Faces” 将几何图形输入到 Dynamo - 体量现在应该在 Dynamo 预览中可见。
使用 “Select Model Element” 和 “CurveElement.Curve” 将一条参照曲线输入到 Dynamo。
使用 “Select Model Element” 和 “CurveElement.Curve” 将其他参照曲线输入到 Dynamo。
缩小并平移到示例图的右侧,我们会看到一组大节点 - 这些是几何操作,可生成在 Dynamo 预览中可见的格子架屋顶结构。这些节点使用 “节点到代码” 功能生成,如 Primer 的 “代码块”部分 中所述。
结构由三个主要参数(对角偏移、拱形和半径)驱动。
缩放此图形的参数特写。我们可以进行调整,以获得不同的几何图形输出。
将 “DirectShape.ByGeometry” 节点拖放到画布上,我们会看到它有四个输入:“geometry”、“category”、“material” 和 “name”。
几何图形将是从图形的几何图形创建部分创建的实体
使用下拉 “Categories” (类别)节点选择类别输入。在本例中,我们将使用“Structural Framing”(结构框架)。
通过上述节点阵列选择材质输入 - 尽管在这种情况下,可以更加简单地将其定义为“默认”。
运行 Dynamo 后,返回 Revit,我们将输入的几何图形放置在项目的屋顶上。这是结构框架图元,而不是常规模型。指向 Dynamo 的参数化链接保持不变。
Dynamo 的一个强大功能是,可以在参数化级别上编辑参数。例如,衍生式算法或模拟结果可用于驱动图元阵列的参数。这样,同一族中的一组实例可以在 Revit 项目中具有自定义特性。
实例参数定义屋顶表面上嵌板的孔径,Aperture Ratio 的范围介于 0.1 到 0.4 之间。
基于类型的参数将应用于表面上的每个图元,因为它们的族类型相同。例如,每个嵌板的材质都可以由基于类型的参数驱动。
如果之前已设置过 Revit 族,请记住,需要指定参数类型(字符串、数字、尺寸标注等)。 在 Dynamo 中指定参数时,请务必使用正确的数据类型。
还可以将 Dynamo 与在 Revit 族的特性中定义的参数化约束结合使用。
在 Revit 中快速查看参数时,我们要记得有类型参数和实例参数。这两个参数在 Dynamo 中都可以进行编辑,但我们在下面的练习中使用的是实例参数。
从版本 0.8 开始,Dynamo 基本上是无单位的。这样,Dynamo 便可保持抽象的可视化编程环境。与 Revit 尺寸标注交互的 Dynamo 节点将参照 Revit 项目的单位。例如,如果在 Revit 中设置 Dynamo 的长度参数,则 Dynamo 中的数值将对应 Revit 项目中的默认单位。下面的练习以“米”为单位。
要快速转换单位,请使用 “Convert Between Units” 节点。这是一个方便工具,可用于即时转换长度、面积和体积单位。
单击下面的链接下载示例文件。
可以在附录中找到示例文件的完整列表。
下面的练习以“米”为单位。
本练习重点介绍如何编辑 Revit 图元,而无需在 Dynamo 中执行几何操作。我们在此处不会输入 Dynamo 几何图形,只需在 Revit 项目中编辑参数即可。本练习是基本练习,对于更高级的 Revit 用户,请注意这些是体量的实例参数,但可以将相同逻辑应用于图元阵列以进行大规模自定义。这全部是通过“Element.SetParameterByName”节点完成的。
从本部分的 Revit 示例文件开始。我们已从上一部分中删除了结构图元和自适应桁架。在本练习中,我们将重点介绍 Revit 中的参数化装备,以及 Dynamo 中的操作。
在 Revit 中,选择体量中的建筑,我们可以在“特性”面板中看到实例参数的阵列。
在 Dynamo 中,我们可以通过选择目标图元来检索参数。
使用 “Select Model Element” 节点选择建筑体量。
我们可以使用 “Element.Parameters” 节点查询此体量的所有参数。这包括类型和实例参数。
参照 “Element.Parameters” 节点以查找目标参数。或者,我们可以查看上一步中的“特性”面板,以选择要编辑的参数名称。在本例中,我们将查找影响建筑体量上较大几何移动的参数。
我们将使用 “Element.SetParameterByName” 节点对 Revit 图元进行更改
使用“代码块”定义参数列表,其中用引号括起来每个项目以表示字符串。我们还可以将“List.Create”节点与一系列连接到多个输入的 “string” 节点一起使用,但代码块更便捷。在 Revit 中,确保字符串与精确名称匹配,具体情况如下:
{"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};
我们还要为每个参数指定值。向画布添加六个 “整数滑块” ,然后重命名为列表中相应的参数。此外,根据上图设置每个滑块的值。按从上到下的顺序:62、92、25、22、8、12
定义另一个 “代码块” ,其中列表与参数名称的长度相同。在本例中,我们命名变量(不带引号),这将为 “代码块” 创建输入。将 “滑块” 连接到各自的输入:
{bw,bl,bh,ao,io,lu};
将“代码块”连接到 “Element.SetParameterByName”* 值输入。在选中“自动运行”后,我们会自动看到结果。
*此演示使用的是实例参数,而不是类型参数。
就像在 Revit 中一样,其中许多参数相互依赖。当然,在这些组合中几何图形可能会中断。我们可以在参数特性中定义公式来解决这个问题,也可以在 Dynamo 中使用数学运算设置类似逻辑(如果您想扩展练习,这也是一项额外的挑战)。
此组合为建筑体量提供了功能强大的新设计:100、92、100、25、13、51
接下来,我们来了解一下如何使用类似过程编辑外立面。
复制图形,然后专注于将容纳桁架系统的外立面玻璃。在本例中,我们将隔离四个参数:
{"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};
此外,我们还会创建 “数字滑块” ,然后重命名为相应的参数。前三个滑块(从上到下)应重新映射到 [0,10] 的域,而最后一个滑块( “外立面弯曲位置” )应重新映射到 [0,1] 的域。这些值(从上到下)应从以下这些值开始(尽管它们是任意值):2.68、2.64、2.29、0.5
定义新的代码块并连接滑块:
{so,mo,no,fbl};
通过更改图形此部分中的 “滑块”,我们可以使外立面玻璃更加实质:9.98、10.0、9.71、0.31
尽管我们之前介绍了如何编辑基本建筑体量,但我们希望一次编辑大量图元,以便深入了解 Dynamo/Revit 链接。由于数据结构需要更高级的列表操作,因此大比例自定义会变得更加复杂。但是,其执行背后的基本原则在根本上是相同的。让我们基于一组自适应构件来研究一些可能的分析。
假定我们创建了一系列自适应构件,并希望根据其点位置编辑参数。例如,这些点可以驱动与图元面积相关的厚度参数。或者,它们可以驱动一年内与日光曝晒相关的不透明度参数。Dynamo 支持通过几个简单步骤将分析与参数相连接,我们将在下面的练习中探讨基本版本。
使用 “AdaptiveComponent.Locations” 节点查询选定自适应构件的自适应点。这样,我们便可以使用 Revit 图元的抽象版本进行分析。
通过提取自适应构件的点位置,我们可以针对该图元运行一系列分析。例如,通过四点自适应构件可以研究与给定嵌板的平面之间的偏差。
使用“重映射”将一组数据映射到参数范围。这是参数化模型中所使用的基本工具,我们将在下面的练习中进行演示。
使用 Dynamo,自适应构件的点位置可用于创建每个图元的最佳拟合平面。我们还可以在 Revit 文件中查询太阳位置,并研究该平面与太阳的相对方向与其他自适应构件的比较。让我们在下面的练习中通过创建算法屋顶图来进行设置。
单击下面的链接下载示例文件。
可以在附录中找到示例文件的完整列表。
本练习将进一步介绍上一节中演示的技术。在本例中,我们将基于 Revit 图元定义参数化曲面、实例化四点自适应构件,然后根据太阳的方向对其进行编辑。
首先,使用 “Select Edge” 节点选择两条边。这两条边是中庭的长跨度。
使用 “List.Create” 节点将两条边合并为一个列表。
使用 “Surface.ByLoft” 在两条边之间创建曲面。
使用 “代码块”,定义介于 0 到 1 之间的一个范围(包含 10 个等间距值):
0..1..#10;
将 “代码块” 连接到 “Surface.PointAtParameter” 节点的*“u”*和 “v” 输入,并将 “Surface.ByLoft” 节点连接到 “surface” 输入。在节点上单击鼠标右键,并将 “连缀” 更改为 “笛卡尔积”。这将在曲面上提供点栅格。
该点栅格用作参数化定义的曲面的控制点。我们要提取其中每个点的 u 和 v 位置,以便可以将它们连接到参数化公式并保持相同的数据结构。可以通过查询刚才创建的点的参数位置来执行此操作。
将 “Surface.ParameterAtPoint” 节点添加到画布,连接输入,如上所示。
使用“UV.U”节点查询这些参数的 “u” 值。
使用“UV.V”节点查询这些参数的 “v” 值。
输出显示曲面每个点对应的 “u” 和 “v” 值。现在,在正确的数据结构中,每个值的范围介于 0 到 1 之间,因此我们准备好应用参数算法。
将 “代码块” 添加到画布,然后输入代码:
Math.Sin(u*180)*Math.Sin(v*180)*w;
。这是一个参数化函数,可从平面创建正弦平滑。将 “UV.U” 连接到 “u” 输入,并将“UV.V”连接到 “v” 输入。
“w” 输入表示形状的 “振幅”,因此我们向其附加 “数字滑块”。
现在,我们得到了由算法定义的一列值。让我们使用该列值在 “+Z” 方向上上移点。使用 “Geometry.Translate”,将*“代码块”*连接到 “zTranslation”,并将 “Surface.PointAtParameter” 连接到 “geometry” 输入。您应该会看到新点显示在 Dynamo 预览中。
最后,我们使用 “NurbsSurface.ByPoints” 节点创建曲面,从而将上一步中的节点连接到点输入。我们自己有一个参数化曲面。可以随意拖动滑块来观察多边形收缩和扩展。
使用参数化曲面,我们需要定义一种方法来进行镶板,以便布置四点自适应构件。Dynamo 没有现成的功能来进行曲面镶板,因此我们可以向社区寻求有用的 Dynamo 软件包。
转到 “软件包”>“搜索软件包...”
搜索 “LunchBox”,然后安装 “LunchBox for Dynamo”。对于此种情况,这是一组非常有用的几何图形操作工具。
完成下载后,现在可以完全访问 LunchBox 套件。搜索 “四边形栅格”,然后选择 “LunchBox 四边形栅格(按面)”。将参数化曲面连接到 “surface” 输入,并分别将 “U” 和 “V” 设置为 “15”。您应该会在 Dynamo 预览中看到四分面板的曲面。
如果您对其设置很满意,可以双击 “Lunch Box” 节点,查看其设置。
返回 Revit,让我们快速看一下在此处使用的自适应构件。无需再继续,但这是我们要实例化的屋顶嵌板。它是四点自适应构件,是 ETFE 系统的粗略表示。中心空心的光圈位于名为 “ApertureRatio” 的参数上。
我们要在 Revit 中实例化许多几何图形,因此请确保将 Dynamo 解算器设置为 “手动”。
向画布添加 “Family Types” 节点,然后选择 “ROOF-PANEL-4PT”。
将 “AdaptiveComponent.ByPoints” 节点添加到画布,将 “LunchBox 四边形栅格(按面)” 输出中的 “Panel Pts” 连接到 “points” 输入。将 “Family Types” 节点连接到 “familySymbol” 输入。
点击 “运行”。当创建几何图形时,Revit 必定会 考虑 一下。如果需要太长时间,请将 代码块的“15” 减少到较小数字。这将减少屋顶上嵌板的数量。
注意:如果 Dynamo 计算节点需要较长时间,可能需要使用“冻结”节点功能,以便在开发图形时暂停执行 Revit 操作。有关冻结节点的详细信息,请参见“实体”章节中的“冻结”部分。
返回 Revit,我们在屋顶上有一组嵌板。
放大后,可以更仔细地查看其曲面质量。
从上一步继续操作,我们进一步根据每个嵌板到太阳的曝光来驱动其光圈。放大 Revit 并选择一个嵌板,我们在特性栏中可以看到有一个名为 “Aperture Ratio” 的参数。设置族,以便使光圈范围大致介于 “0.05” 到 “0.45” 之间。
如果打开日光路径,可以在 Revit 中看到当前的太阳位置。
我们可以使用 “SunSettings.Current” 节点来参照此太阳的位置。
将“日光设置”连接到 “Sunsetting.SunDirection” 以获得太阳向量。
从用于创建自适应构件的 “Panel Pts”,使用 “Plane.ByBestFitThroughPoints” 以近似计算构件的平面。
查询此平面的 “法线”。
使用 “点积” 计算太阳方向。点积是一个用于确定两个向量的平行度或反平行度的公式。我们采用每个自适应构件的平面法线,并将其与太阳向量进行比较以粗略模拟太阳方向。
获取结果的 “绝对值”。这可确保点积在平面法线朝向反转方向时是准确的。
点击 “运行”。
我们看一下 “点积”,这里有很多数字。我们想要使用它们的相对分布,但我们需要将数字压缩到计划编辑的 “Aperture Ratio” 参数的适当范围。
“Math.RemapRange” 是一个适用于此种情况的优秀工具。它采用输入列表并将其边界重新映射到两个目标值。
在 “代码块” 中,将目标值定义为 “0.15” 和 “0.45”。
点击 “运行”。
将重映射的值连接到 “Element.SetParameterByName” 节点。
将字符串 “Aperture Ratio” 连接到 “parameterName” 输入。
将 “自适应构件” 连接到 “element” 输入。
点击 “运行”。
返回 Revit,从远处我们可以看出太阳方向对 ETFE 嵌板光圈的影响。
放大,我们看到 ETFE 嵌板在面对太阳时更加闭合。此处,我们的目标是减少因日光曝晒而导致的过热情况。如果我们要根据日光曝晒让更多光线进入,只需切换 “Math.RemapRange” 上的域即可。
在发现了编辑参数的广泛应用后,您可能想要在 Revit 中使用 Dynamo 编辑大量图元。这可能是_计算成本高昂_的操作,这意味着它的速度可能会很慢。如果要编辑大量图元,可能需要使用“冻结”节点功能,以便在开发图形时暂停执行 Revit 操作。有关冻结节点的详细信息,请查看“实体”章节中的“”部分。