Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamo 的许多绝佳用例之一是沿道路模型动态放置离散对象。通常情况下,需要将对象放置在与沿道路插入的装配无关的位置,手动完成这项任务非常繁琐。当道路的水平或垂直几何图形发生更改时,会引入大量返工。
从外部文件读取数据(在本例中为 Excel)
组织词典中的数据
使用坐标系控制位置/比例/旋转
放置块参照
在 Dynamo 中可视化几何图形
此图形将在 **Civil 3D 2020** 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
最好将 Excel 文件和 Dynamo 图形保存在同一目录中。
下面概述了此图形中的逻辑。
读取 Excel 文件并将数据输入到 Dynamo 中
从指定的道路基准线获取要素线
沿道路要素线以所需的桩号生成坐标系
使用坐标系将块参照放置在模型空间中
开始吧!
在本示例图形中,我们将使用 Excel 文件来存储 Dynamo 将用于放置灯杆块参照的数据。该表如下所示。
使用 Dynamo 从外部文件(如 Excel 文件)读取数据是一个很好的策略,尤其是当数据需要与其他团队成员共享时。
Excel 会如下所示输入到 Dynamo 中。
现在,我们已有数据,需要按列(“道路”、“基准线”、“点代码” 等)对数据进行拆分,以便可以在图形的其余部分中使用该数据。执行此操作的常见方法是使用 List.GetItemAtIndex 节点并指定我们所需每列的索引号。例如,“道路” 列位于索引 0 处,“基准线” 列位于索引 1 处,依此类推。
看起来不错,对吧?但这种方法有潜在问题。如果 Excel 文件中列的顺序将来发生更改,该怎么办?在两列之间添加新列,又该怎么办?然后,图形将无法正常运行,需要更新。我们可以通过将数据放入到词典中、将 Excel 列标题作为 键、将数据的其余部分作为 值,来使图形适应未来变化。
如果您对使用词典不熟悉,请参见 [5-5_Dynamo 中的词典](../../../5\_essential\_nodes\_and\_concepts/5-5\_dictionaries-in-dynamo/ "mention")部分。
由于这允许灵活更改 Excel 中列的顺序,从而使图形更具弹性。只要列标题保持不变,即可使用 键(即列标题)从词典中检索数据,这是我们接下来要执行的操作。
现在,我们已输入 Excel 数据并准备就绪,让我们开始使用该数据以从 Civil 3D 中获取有关道路模型的一些信息。
按名称选择道路模型。
获取道路内的特定基准线。
通过点代码获取基准线内的要素线。
现在,我们将沿道路要素线以我们在 Excel 文件中指定的桩号值生成坐标系。这些坐标系将用于定义灯杆块参照的位置、旋转和比例。
如果您对使用坐标系不熟悉,请参见 [2-向量.md](../../../5\_essential\_nodes\_and\_concepts/5-2\_geometry-for-computational-design/2-vectors.md "mention")部分。
请注意,在此处使用代码块可旋转坐标系,具体取决于坐标系位于基准线的哪一侧。这可以使用多个节点序列来实现,但这是一个很好的例子,说明只需编写代码块即可。
如果您对使用代码块不熟悉,请参见 [8-1_代码块和 DesignScript](../../../8\_coding\_in\_dynamo/8-1\_code-blocks-and-design-script/ "mention")部分。
我们即将完成!我们已有能够实际放置块参照所需的所有信息。首先,使用 Excel 文件中的 块名称 列获取我们所需的块定义。
在此处,最后一步是创建块参照。
当运行图形时,您应该会在模型空间中看到新的块参照沿道路显示。以下是一个很酷的部分 - 如果图形的执行模式设置为“自动”,然后您编辑 Excel 文件,则块参照会自动更新!
可以在 [3_用户界面](../../../3\_user\_interface/ "mention")部分中,了解有关图形执行模式的详细信息。
以下是一个使用 Dynamo 播放器运行图形的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 [Dynamo 播放器.md](../../dynamo-player.md "mention")部分。
在 Dynamo 中可视化道路几何图形以提供上下文可能会很有帮助。此特定模型已在模型空间中提取了道路实体,因此让我们将这些道路实体输入到 Dynamo 中。
但我们还需要考虑其他一些事项。实体是一种较“重”的几何图形类型,这意味着此操作会降低图形的运行速度。如果有一种简单方法来_选择_我们是否需要查看实体,那就太好了。显而易见的答案是,只需断开连接 Corridor.GetSolids 节点,但这会对所有下游节点产生警告,这有点乱。在这种情况下,ScopeIf 节点的作用确实显著。
请注意,Object.Geometry 节点的底部有一个灰色条。这意味着节点预览处于关闭状态(可通过在节点上单击鼠标右键进行访问),从而使 GeometryColor.ByGeometryColor 节点能够避免与其他几何图形“争抢”后台预览中的显示优先级。
ScopeIf 节点基本上使您能够有选择地运行整个节点分支。如果 test 输入为 false,则连接到 ScopeIf 节点的每个节点都不会运行。
以下是 Dynamo 后台预览中的结果。
以下是一些有关如何扩展此图形功能的想法。
将 **旋转** 列添加到 Excel 文件中,然后使用该列来驱动旋转坐标系。
将 **水平或垂直偏移** 添加到 Excel 文件中,以便灯杆可以根据需要偏离道路要素线。
**直接在 Dynamo** 中使用起点桩号和典型间距生成桩号值,而不是使用具有桩号值的 Excel 文件。
典型住宅开发的工程设计涉及使用多个地下公共设施(如生活污水管、雨水排水、饮用水等)。本例将演示如何使用 Dynamo 来绘制从配水总管到给定小块土地(即地块)的服务设施连接。每个地块都需要连接服务设施,这会导致放置所有服务设施的工作非常繁琐。Dynamo 可以通过自动精确绘制必要的几何图形,并提供可调整以符合当地机构标准的灵活输入,从而加快该过程。
使用 Select Object 节点进行用户输入
使用坐标系
使用几何操作(如 Geometry.DistanceTo 和 Geometry.ClosestPointTo)
创建块参照
控制对象绑定设置
此图形将在 **Civil 3D 2020** 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
获取配水总管的曲线几何图形
获取用户选定地块线的曲线几何图形,必要时反转
生成服务设施计量表的插入点
获取配水总管上距服务设施计量表位置最近的点
在模型空间中创建块参照和线
开始吧!
我们的第一步是将配水总管的几何图形输入到 Dynamo 中。我们将改为获取特定图层上的所有对象,并将这些对象一起连接为 Dynamo PolyCurve,而不是选择单条直线或多段线。
如果您对使用 Dynamo 曲线几何图形不熟悉,请参见 [4-曲线.md](../../../5\_essential\_nodes\_and\_concepts/5-2\_geometry-for-computational-design/4-curves.md "mention")部分。
接下来,我们需要将选定地块线的几何图形输入到 Dynamo 中,以便我们可以使用该几何图形。适合该作业的合适工具是 Select Object 节点,该节点使图形的用户能够拾取 Civil 3D 中的特定对象。
我们还需要处理可能会出现的潜在问题。地块线有起点和终点,这意味着它有方向。为了使图形能够生成一致的结果,我们需要所有地块线都有一致的方向。我们可以直接在图形逻辑中考虑此情况,这会使图形更具弹性。
获取地块线的起点和终点。
测量每个点到配水总管的距离,然后确定哪个距离更大。
所需结果是该线的起点距离配水总管最近。如果不是这种情况的话,则我们反转地块线的方向。否则,我们只需返回原始地块线。
现在应该确定服务设施计量表将放置的位置。通常情况下,放置位置由当地机构的要求确定,因此我们只需提供可以更改以适应各种情况的输入值。我们会将沿地块线的坐标系用作创建点的参照。这使得定义相对于地块线的偏移非常容易,而无需考虑地块线的方向。
如果您对使用坐标系不熟悉,请参见 [2-向量.md](../../../5\_essential\_nodes\_and\_concepts/5-2\_geometry-for-computational-design/2-vectors.md "mention")部分。
现在,我们需要获取配水总管上距服务设施计量表位置最近的点。这将使我们能够在模型空间中绘制服务设施连接,以便它们始终垂直于配水总管。Geometry.ClosestPointTo 节点是完美解决方案。
这是配水总管 PolyCurve
这些是服务设施计量表插入点
最后一步是在模型空间中实际创建对象。我们将使用之前生成的插入点来创建块参照,然后使用配水总管上的点来绘制到服务设施连接的线。
当运行图形时,您应该会在模型空间中看到新的块参照和服务设施连接线。尝试更改某些输入,并观察所有内容自动更新!
您可能会注意到,在为一条地块线放置对象后,选择其他地块线会导致对象被“移动”。
这是 Dynamo 的默认行为,在许多情况下非常有用。但是,您可能会发现需要按顺序放置多个服务设施连接,并让 Dynamo 使用每个管路创建新对象,而不是修改原始对象。可以通过更改对象绑定设置来控制此行为。
有关详细信息,请参见[对象绑定.md](../../advanced-topics/object-binding.md "mention")部分。
更改此设置会强制 Dynamo“忘记”它使用每个管路创建的对象。以下是一个使用 Dynamo 播放器运行图形(其对象绑定已关闭)的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 [Dynamo 播放器.md](../../dynamo-player.md "mention")部分。
以下是一些有关如何扩展此图形功能的想法。
同时放置 **多个服务设施连接**,而不是选择每条地块线。
调整输入以改为放置 **污水管清扫口**,而不是放置水表。
**添加开关**,以允许在地块线的特定侧(而不是两侧)放置单个服务设施连接。
当将管道和结构添加到管网时,Civil 3D 会使用模板自动指定名称。通常,这在初始放置期间已够用;但随着设计的展开,这些名称在将来不可避免地需要更改。此外,可能还需要许多不同的命名模式;例如,从最远的下游结构开始按顺序命名管道管路中的结构,或遵循与本地机构的数据模式保持一致的命名模式。本例将演示如何使用 Dynamo 来定义任何类型的一贯应用的命名策略。
使用边界框
使用 List.FilterByBoolMask 节点过滤数据
使用 List.SortByKey 节点对数据排序
生成和修改文字字符串
此图形将在 **Civil 3D 2020** 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
按图层选择结构
获取结构位置
按偏移过滤结构,然后按桩号对结构排序
生成新名称
重命名结构
开始吧!
首先,我们需要选择要处理的所有结构。为此,我们只需选择特定图层上的所有对象,这意味着我们可以选择不同管网中的结构(假定它们共享同一图层)。
此节点确保我们不会意外检索到任何可能与结构共享同一图层的并不需要的对象类型。
现在,我们已有这些结构,我们需要确定它们在空间中的位置,以便可以根据它们的位置对它们进行排序。为此,我们将利用每个对象的边界框。对象的边界框是完全包含该对象几何范围的最小大小的框。通过计算边界框的中心,我们会获取结构插入点的较佳近似值。
我们将使用这些点,来获取结构相对于选定路线的桩号和偏移。
以下是事情开始变得有点棘手的地方。在此阶段,我们已有一个包含指定图层上所有结构的大列表,然后选择我们要对沿其的结构排序的路线。问题是列表中可能有我们不想要重命名的结构。例如,它们可能不是我们感兴趣的特定管路的一部分。
选定的路线
要重命名的结构
应忽略的结构
因此,我们需要过滤结构列表,以便我们不必考虑大于与路线的特定偏移量的结构。最好使用 List.FilterByBoolMask 节点完成此操作。过滤结构列表后,我们使用 List.SortByKey 节点以按其桩号值对结构进行排序。
如果您对操作列表不熟悉,请参见 [2-使用列表.md](../../../5\_essential\_nodes\_and\_concepts/5-4\_designing-with-lists/2-working-with-lists.md "mention")部分。
检查以查看结构的偏移量是否小于阈值
将任何空值替换为 false
过滤结构和桩号列表
按桩号对结构排序
最后,我们需要为结构创建新名称。我们将使用的格式是 <alignment name>-STRC-<number>
。此处有一些额外节点,可用于根据需要为数字填充额外的零(例如,“01”而不是“1”)。
最后但同样重要的是,我们重命名结构。
以下是一个使用 Dynamo 播放器运行图形的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 [Dynamo 播放器.md](../../dynamo-player.md "mention")部分。
它有助于利用 Dynamo 的三维背景预览来可视化图形的中间输出,而不仅仅是可视化最终结果。我们可以轻松地显示结构的边界框。此外,此特定数据集在文档中包含“道路”,因此我们可以将“道路要素线”几何图形导入 Dynamo,以便为结构在空间中的位置提供一些上下文。如果图形用于没有任何道路的数据集,这些节点将不会执行任何操作。
现在,我们可以更好地了解按偏移过滤结构的过程是如何工作的。
以下是一些有关如何扩展此图形功能的想法。
根据结构的 **最近路线** 来重命名结构,而不是选择特定路线。
除了结构外,还 **重命名管道**。
根据结构的管路,来 **设置其图层**。
沿道路在 Excel 文件中指定的桩号值处放置灯杆块参照。
任务完成!
将水表块参照放置在距地块线的指定偏移处,并为垂直于配水总管的每个服务设施连接绘制一条线。
任务完成!
根据路线的桩号标注按顺序重命名管网结构。
任务完成!
道路、铁路、土地、公共设施、勘测、GIS...
土木基础设施包括但不限于所有这些内容!本部分包含多个实用的相关示例图形,有助于您熟练掌握 Dynamo,并充分挖掘 Dynamo for Civil 3D 的潜力。每个图形都完整提供(其中包含创建该图形时所用逻辑的详细描述),因此您不仅可以 使用 它,还可以 了解 它。
此外,这些示例还体现了用于构建强图形的最佳实践,这些实践都已经受时间的考验。当您完成学习示例后,建议您还要让自己熟悉 最佳做法部分,以了解有关如何构建功能强大、灵活且可维护的图形的更多想法。
在 Civil 3D 中使用几何空间点和点编组是许多现场完成过程的核心要素。Dynamo 在数据管理方面非常出色,我们将在本例中演示一个潜在用例。
使用列表
使用 List.GroupByKey 节点对类似对象进行分组
在 Dynamo 播放器中显示自定义输出
此图形将在 **Civil 3D 2020** 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
获取文档中的所有几何空间点
按描述对几何空间点进行编组
创建点编组
将摘要输出到 Dynamo 播放器
开始吧!
我们的第一步是获取文档中的所有点编组,然后获取每个编组中的所有几何空间点。这将为我们提供 嵌套列表 或“列表的列表”(稍后如果我们使用 List.Flatten 节点将所有内容都向下展平为单个列表,将更易于使用它们)。
如果您对操作列表不熟悉,请参见 [2-使用列表.md](../../../5\_essential\_nodes\_and\_concepts/5-4\_designing-with-lists/2-working-with-lists.md "mention")部分。
现在,我们已有所有几何空间点,需要根据这些几何空间点的描述将它们分成多个组。这正是 List.GroupByKey 节点的作用。它本质上是将共享相同键的任何项目分组在一起。
艰苦的工作已完成!最后一步是从分组的几何空间点创建新的 Civil 3D 点编组。
当您运行图形时,由于我们不在处理任何几何图形,因此在 Dynamo 后台预览中看不到任何内容。因此,查看图形是否正确执行的唯一方法是检查“工具空间”,或查看节点输出预览。但是,如果我们使用 Dynamo 播放器运行图形,则可以通过输出已创建的点编组的摘要来提供有关图形结果的更多反馈。您只需在节点上单击鼠标右键,然后将其设置为 “为输出”(Is Output)。在本例中,我们使用重命名的 Watch 节点来查看结果。
以下是一个使用 Dynamo 播放器运行图形的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 [Dynamo 播放器.md](../../dynamo-player.md "mention")部分。
以下是一些有关如何扩展此图形功能的想法。
将点编组修改为基于 **完整描述** 而非原始描述。
按您选择的其他 **预定义类别**(例如,“地面快照”、“碑界”等)对点进行分组。
为某些组中的点自动创建三角网曲面。
为间隙验证开发运动包络是轨道设计的重要部分。Dynamo 可用于为包络生成实体,而不是创建和管理复杂的道路子部件来执行该作业。
使用道路要素线
在坐标系之间转换几何图形
通过放样创建实体
使用连缀设置控制节点行为
此图形将在 **Civil 3D 2020** 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
从指定的道路基准线获取要素线
沿道路要素线以所需的间距生成坐标系
将轮廓块几何图形转换为坐标系
在轮廓之间放样实体
在 Civil 3D 中创建实体
开始吧!
我们的第一步是获取道路数据。我们将按名称选择道路模型、获取道路中的特定基准线,然后按点代码获取基准线中的要素线。
现在,我们将沿道路要素线在起点桩号和终点桩号之间生成坐标系。这些坐标系将用于将车辆轮廓块几何图形与道路对齐。
如果您对使用坐标系不熟悉,请参见 [2-向量.md](../../../5\_essential\_nodes\_and\_concepts/5-2\_geometry-for-computational-design/2-vectors.md "mention")部分。
请注意节点右下角的小 XXX。这意味着节点的连缀设置设为_“叉积”_,这对于以相同桩号值为两条要素线生成坐标系而言是必要的。
如果您对使用节点连缀不熟悉,请参见 [1-什么是列表.md](../../../5\_essential\_nodes\_and\_concepts/5-4\_designing-with-lists/1-whats-a-list.md "mention")部分。
现在,我们需要以某种方式创建沿要素线的车辆轮廓的阵列。我们将使用 Geometry.Transform 节点来基于车辆轮廓块定义转换几何图形。这是一个难以可视化的概念,因此在我们查看节点之前,这里有一张图显示了将要发生的情况。
实际上,我们基于_单个_块定义获取 Dynamo 几何图形,然后移动/旋转该几何图形,同时沿要素线创建阵列。酷炫!节点序列如下所示。
这将从文档中获取块定义。
这些节点获取块中对象的 Dynamo 几何图形。
这些节点本质上定义了我们将转换几何图形的_来源_坐标系。
最后,此节点执行转换几何图形的实际工作。
注意此节点上的_“最长”_连缀。
以下是我们在 Dynamo 中获取的内容。
好消息!艰苦的工作已完成。我们现在只需在轮廓之间生成实体。这可以通过 Solid.ByLoft 节点轻松完成。
结果如下所示。请记住,这些是 Dynamo 实体 - 我们仍需要在 Civil 3D 中创建它们。
我们的最后一步是将生成的实体输出到模型空间中。我们还会为这些实体赋予颜色,以使它们易于区分。
以下是一个使用 Dynamo 播放器运行图形的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 [Dynamo 播放器.md](../../dynamo-player.md "mention")部分。
以下是一些有关如何扩展此图形功能的想法。
添加为每个轨迹单独使用 **不同桩号范围** 的功能。
**拆分实体** 为可以单独分析其是否发生碰撞的较小段。
检查以查看包络实体是否 **与要素相交**,并为发生碰撞的实体标注颜色。
为每个唯一的几何空间点描述创建点编组。
任务完成!
使用车辆轮廓块来沿道路生成间隙包络三维实体。
任务完成!