Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamo for Civil 3D 为从事土木基础设施项目的工程师和设计师提供了 可视化编程 范例。可以将 Dynamo 视为一种面向 Civil 3D 用户的数字多功能工具 - 无论任务如何,它都有适合该工作的合适工具。Dynamo 的直观界面使您无需编写一行代码即可创建强大且可自定义的例程。您不需要 成为 一名程序员就可以使用 Dynamo,但您确实需要能够以程序员的逻辑 思考。结合该 Primer 中的其他章,本章将帮助您培养逻辑技能,以便您能够以计算设计思维模式来处理任何任务。
Dynamo 是在 Civil 3D 2020 中首次引入的,自此以后不断发展。它最初是通过软件更新单独安装的,现在随所有版本的 Civil 3D 一起提供。根据您正在使用的 Civil 3D 的版本,您可能会注意到 Dynamo 界面看起来与您在本章中所见的示例略有不同。这是因为在 Civil 3D 2023 中对界面进行了重大改进。
建议您查看 Dynamo 博客,以了解有关 Dynamo 开发的最新信息。下表汇总了 Dynamo for Civil 3D 生命期中的关键里程碑。
Civil 3D 版本 | Dynamo 版本 | 注释 |
---|---|---|
2024.1
2.18
2024
2.17
Dynamo 播放器用户界面更新
2023.2
2.15
2023
2.13
Dynamo 用户界面更新
2022.1
2.12
添加了对象绑定数据存储设置
用于控制对象绑定的新节点
2022
2.10
已包含在 Civil 3D 主要安装中
从 IronPython 转换到 Python.NET
2021
2.5
2020.2
2.4
2020 Update 2
2.4
添加了新节点
2020.1
2.2
2020
2.1
初始发布版本
虽然 Dynamo 最初是在考虑与 Revit 结合使用的情况下构建的,但 Dynamo 作为一款可视化编程工具的多功能性超越了 Revit。Dynamo 还集成到 Civil 3D 中,使用户能够为土木基础设施项目创建功能强大的自动化例程。它是一款非常有用的工具,用于处理从常见任务到最复杂设计工作流的所有事务,从而最终帮助您节省时间、优化设计并做出更好的设计决策。Dynamo 提供了专为 Civil 3D 设计的一整套节点,以及来自繁荣社区的第三方库。
Primer 的本章将重点介绍 Dynamo for Civil 3D,从基础知识开始,然后介绍更高级的主题。
随着时间的推移,您可能会发现自己需要超越基础知识,深入了解 Dynamo 的内部运作。本部分中的页面将为您提供一个用于解锁 Dynamo for Civil 3D 中高级功能的蓝图,以便您可以将图形处理提升到更高级别。
我们之前提到,节点是 Dynamo 图形的核心构建块,它们在库中组织为逻辑组。在 Dynamo for Civil 3D 中,库中有两个类别(或工具架),其中包含用于处理 AutoCAD 和 Civil 3D 对象(如路线、轮廓、道路、块参照等)的专用节点。库的其余部分包含实际上更通用的节点,这些节点在 Dynamo 的所有“规格”(例如,适用于 Revit 的 Dynamo、Dynamo Sandbox 等)之间保持一致。
有关如何组织 Dynamo 核心库中节点的详细信息,请参见 库部分。
用于处理 AutoCAD 和 Civil 3D 对象的特定节点
通用节点
可以单独安装的第三方软件包中的节点
使用在 AutoCAD 和 Civil 3D 工具架下找到的节点,即表示您的 Dynamo 图形将仅在 Dynamo for Civil 3D 中运行。如果在别处(例如,在适用于 Revit 的 Dynamo 中)打开 Dynamo for Civil 3D 图形,则这些节点会被标记并显示警告,并且不会运行。
为什么 AutoCAD 和 Civil 3D 有两个单独的工具架?
此组织方式将用于原生 AutoCAD 对象(直线、多段线、块参照等)的节点与用于 Civil 3D 对象(路线、道路、曲面等)的节点区分开来。从技术角度而言,AutoCAD 和 Civil 3D 是两个独立的应用程序 - AutoCAD 是基础应用程序,而 Civil 3D 是在其基础上构建的。
要使用 AutoCAD 和 Civil 3D 节点,请务必全面了解每个工具架中的对象层次结构。还记得生物学的分类法吗?界、门类、类别、等级、族、属、种?AutoCAD 和 Civil 3D 对象以类似方式进行分类。让我们通过一些示例来进行讲解。
让我们以路线为例。
假定您要更改路线的名称。在此处,您要添加的下一个节点是 CivilObject.SetName 节点。
起初,这看起来可能不太直观。CivilObject 有什么作用,为什么本库没有 Alignment.SetName 节点?答案与 可重用性 和 简便性 有关。如果您想一想,无论 Civil 3D 对象是路线、道路、轮廓还是其他对象,更改该对象名称的过程都是相同的。因此,与其使用本质上都执行相同操作的重复节点(例如,Alignment.SetName、Corridor.SetName、Profile.SetName 等),不如将该功能封装到一个节点中。这正是 CivilObject.SetName 的作用!
此情况的另一种思考方式是就 关系 而言。路线和道路都是 Civil 对象类型,就像苹果和梨都是水果一样。Civil 对象节点适用于任何类型的 Civil 对象,就像您可能希望使用单个削皮器来削苹果和梨一样。如果您为每种水果都配备单独的削皮器,那么您的厨房会变得非常杂乱!从这个意义上讲,Dynamo 节点库就像您的厨房一样。
现在,让我们再深入一步。假定您要更改路线的图层。您将使用的节点是 Object.SetLayer 节点。
为什么没有名为 CivilObject.SetLayer 的节点?我们前面讨论过的相同可重用性和简便性原则也适用于此。图层 特性是 AutoCAD 中任何可绘制或插入的对象(如直线、多段线、文字、块参照等)所共有的特性。Civil 3D 对象(如路线和道路)属于同一类别,因此适用于对象的任何节点也可用于任何 Civil 对象。
典型住宅开发的工程设计涉及使用多个地下公共设施(如生活污水管、雨水排水、饮用水等)。本例将演示如何使用 Dynamo 来绘制从配水总管到给定小块土地(即地块)的服务设施连接。每个地块都需要连接服务设施,这会导致放置所有服务设施的工作非常繁琐。Dynamo 可以通过自动精确绘制必要的几何图形,并提供可调整以符合当地机构标准的灵活输入,从而加快该过程。
使用 Select Object 节点进行用户输入
使用坐标系
使用几何操作(如 Geometry.DistanceTo 和 Geometry.ClosestPointTo)
创建块参照
控制对象绑定设置
此图形将在 Civil 3D 2020 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
获取配水总管的曲线几何图形
获取用户选定地块线的曲线几何图形,必要时反转
生成服务设施计量表的插入点
获取配水总管上距服务设施计量表位置最近的点
在模型空间中创建块参照和线
开始吧!
我们的第一步是将配水总管的几何图形输入到 Dynamo 中。我们将改为获取特定图层上的所有对象,并将这些对象一起连接为 Dynamo PolyCurve,而不是选择单条直线或多段线。
如果您对使用 Dynamo 曲线几何图形不熟悉,请参见 曲线部分。
接下来,我们需要将选定地块线的几何图形输入到 Dynamo 中,以便我们可以使用该几何图形。适合该作业的合适工具是 Select Object 节点,该节点使图形的用户能够拾取 Civil 3D 中的特定对象。
我们还需要处理可能会出现的潜在问题。地块线有起点和终点,这意味着它有方向。为了使图形能够生成一致的结果,我们需要所有地块线都有一致的方向。我们可以直接在图形逻辑中考虑此情况,这会使图形更具弹性。
获取地块线的起点和终点。
测量每个点到配水总管的距离,然后确定哪个距离更大。
所需结果是该线的起点距离配水总管最近。如果不是这种情况的话,则我们反转地块线的方向。否则,我们只需返回原始地块线。
现在应该确定服务设施计量表将放置的位置。通常情况下,放置位置由当地机构的要求确定,因此我们只需提供可以更改以适应各种情况的输入值。我们会将沿地块线的坐标系用作创建点的参照。这使得定义相对于地块线的偏移非常容易,而无需考虑地块线的方向。
如果您对使用坐标系不熟悉,请参见 向量、平面和坐标系部分。
现在,我们需要获取配水总管上距服务设施计量表位置最近的点。这将使我们能够在模型空间中绘制服务设施连接,以便它们始终垂直于配水总管。Geometry.ClosestPointTo 节点是完美解决方案。
这是配水总管 PolyCurve
这些是服务设施计量表插入点
最后一步是在模型空间中实际创建对象。我们将使用之前生成的插入点来创建块参照,然后使用配水总管上的点来绘制到服务设施连接的线。
当运行图形时,您应该会在模型空间中看到新的块参照和服务设施连接线。尝试更改某些输入,并观察所有内容自动更新!
您可能会注意到,在为一条地块线放置对象后,选择其他地块线会导致对象被“移动”。
这是 Dynamo 的默认行为,在许多情况下非常有用。但是,您可能会发现需要按顺序放置多个服务设施连接,并让 Dynamo 使用每个管路创建新对象,而不是修改原始对象。可以通过更改对象绑定设置来控制此行为。
有关详细信息,请参见对象绑定部分。
更改此设置会强制 Dynamo“忘记”它使用每个管路创建的对象。以下是一个使用 Dynamo 播放器运行图形(其对象绑定已关闭)的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 Dynamo 播放器部分。
以下是一些有关如何扩展此图形功能的想法。
同时放置 多个服务设施连接,而不是选择每条地块线。
调整输入以改为放置 污水管清扫口,而不是放置水表。
添加开关,以允许在地块线的特定侧(而不是两侧)放置单个服务设施连接。
道路、铁路、土地、公共设施、勘测、GIS...
土木基础设施包括但不限于所有这些内容!本部分包含多个实用的相关示例图形,有助于您熟练掌握 Dynamo,并充分挖掘 Dynamo for Civil 3D 的潜力。每个图形都完整提供(其中包含创建该图形时所用逻辑的详细描述),因此您不仅可以 使用 它,还可以 了解 它。
此外,这些示例还体现了用于构建强图形的最佳实践,这些实践都已经受时间的考验。当您完成学习示例后,建议您还要让自己熟悉 最佳实践部分,以了解有关如何构建功能强大、灵活且可维护的图形的更多想法。
为间隙验证开发运动包络是轨道设计的重要部分。Dynamo 可用于为包络生成实体,而不是创建和管理复杂的道路子部件来执行该作业。
使用道路要素线
在坐标系之间转换几何图形
通过放样创建实体
使用连缀设置控制节点行为
此图形将在 Civil 3D 2020 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
从指定的道路基准线获取要素线
沿道路要素线以所需的间距生成坐标系
将轮廓块几何图形转换为坐标系
在轮廓之间放样实体
在 Civil 3D 中创建实体
开始吧!
我们的第一步是获取道路数据。我们将按名称选择道路模型、获取道路中的特定基准线,然后按点代码获取基准线中的要素线。
现在,我们将沿道路要素线在起点桩号和终点桩号之间生成坐标系。这些坐标系将用于将车辆轮廓块几何图形与道路对齐。
请注意节点右下角的小 XXX。这意味着节点的连缀设置设为_“叉积”_,这对于以相同桩号值为两条要素线生成坐标系而言是必要的。
现在,我们需要以某种方式创建沿要素线的车辆轮廓的阵列。我们将使用 Geometry.Transform 节点来基于车辆轮廓块定义转换几何图形。这是一个难以可视化的概念,因此在我们查看节点之前,这里有一张图显示了将要发生的情况。
实际上,我们基于_单个_块定义获取 Dynamo 几何图形,然后移动/旋转该几何图形,同时沿要素线创建阵列。酷炫!节点序列如下所示。
这将从文档中获取块定义。
这些节点获取块中对象的 Dynamo 几何图形。
这些节点本质上定义了我们将转换几何图形的_来源_坐标系。
最后,此节点执行转换几何图形的实际工作。
注意此节点上的_“最长”_连缀。
以下是我们在 Dynamo 中获取的内容。
好消息!艰苦的工作已完成。我们现在只需在轮廓之间生成实体。这可以通过 Solid.ByLoft 节点轻松完成。
结果如下所示。请记住,这些是 Dynamo 实体 - 我们仍需要在 Civil 3D 中创建它们。
我们的最后一步是将生成的实体输出到模型空间中。我们还会为这些实体赋予颜色,以使它们易于区分。
以下是一个使用 Dynamo 播放器运行图形的示例。
以下是一些有关如何扩展此图形功能的想法。
添加为每个轨迹单独使用 不同桩号范围 的功能。
拆分实体 为可以单独分析其是否发生碰撞的较小段。
检查以查看包络实体是否 与要素相交,并为发生碰撞的实体标注颜色。
现在,您对整体情况有了更多了解,让我们开始在 Civil 3D 中构建您的第一个 Dynamo 图形!
这是一个简单示例,旨在演示 Dynamo 的基本功能。建议您在新的空 Civil 3D 文档中完成这些步骤。
首先,在 Civil 3D 中打开一个空文档。进入后,导航到 Civil 3D 功能区中的 “管理” 选项卡,然后查找 “可视化编程” 面板。
单击 “Dynamo” 按钮,这即会在单独窗口中启动 Dynamo。
Dynamo 和 Dynamo 播放器之间有何区别?
Dynamo 是用于构建和运行图形的工具。Dynamo 播放器是一种运行图形的简单方法,无需在 Dynamo 中打开这些图形。
Dynamo 打开后,您会看到开始屏幕。单击 “新建” 以打开一个空白工作空间。
有哪些样例?
您现在应该看到一个空的工作空间。让我们看一看 Dynamo 的实际应用!我们的目标是:
很简单,对不对?但在开始之前,我们需要先介绍一些基础知识。
Dynamo 图形的核心构建块称为 “节点”。一个节点就像一台小型机器 - 您将数据输入到该机器中、它对该数据进行一些处理,然后输出结果。Dynamo for Civil 3D 有一个节点 库,可以使用 导线 将这些节点连接起来以形成一个比单个节点本身的作用更大更好的 图形。
等一等,如果我以前从未使用过 Dynamo,该怎么办?
您可能对其中的一些操作并不完全熟悉,没关系!以下部分会有所帮助。
好,让我们来构建图形。下面列出了我们需要的所有节点。
可以通过以下方式来找到这些节点:在本库的搜索栏中键入节点名称,或者在画布中的任意位置单击鼠标右键并在其中搜索。
如何知道要使用哪些节点以及在何处找到它们?
您的最终图形应该如下所示。
让我们总结一下执行了哪些操作:
我们选择了要使用的文档。在这种情况(以及许多情况)下,我们希望在 Civil 3D 中的活动文档中工作。
我们定义了应创建文字对象的目标块(在本例中为模型空间)。
我们使用了 String 节点来指定应放置文字的图层。
我们使用 Point.ByCoordinates 节点创建了一个点来定义应放置文字的位置。
我们使用两个 Number Slider 节点定义了文字插入点的 X 和 Y 坐标。
我们使用了另一个 String 节点来定义文字对象的内容。
最后,我们创建了文字对象。
让我们看一看闪亮新图形的结果!
返回到 Civil 3D 中,确保 “模型” 选项卡处于选中状态。您应该会看到 Dynamo 已创建的新文字对象。
如果您看不到文字,则可能需要运行“ZOOM”->“EXTENTS”命令来缩放到正确的位置。
酷!现在,让我们对文字进行一些更新。
返回到您的 Dynamo 图形中,继续更改一些输入值(如文字字符串、插入点坐标等)。您应该会在 Civil 3D 中看到文字自动更新。另请注意,如果断开连接其中一个输入端口,文字会被删除。如果重新连接所有内容,则会再次创建该文字。
为什么 Dynamo 不在每次运行图形时插入一个新的文字对象?
本例仅对 Dynamo for Civil 3D 的作用进行了简要介绍。继续阅读以了解更多信息!
当将管道和结构添加到管网时,Civil 3D 会使用模板自动指定名称。通常,这在初始放置期间已够用;但随着设计的展开,这些名称在将来不可避免地需要更改。此外,可能还需要许多不同的命名模式;例如,从最远的下游结构开始按顺序命名管道管路中的结构,或遵循与本地机构的数据模式保持一致的命名模式。本例将演示如何使用 Dynamo 来定义任何类型的一贯应用的命名策略。
使用边界框
使用 List.FilterByBoolMask 节点过滤数据
使用 List.SortByKey 节点对数据排序
生成和修改文字字符串
此图形将在 Civil 3D 2020 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
按图层选择结构
获取结构位置
按偏移过滤结构,然后按桩号对结构排序
生成新名称
重命名结构
开始吧!
首先,我们需要选择要处理的所有结构。为此,我们只需选择特定图层上的所有对象,这意味着我们可以选择不同管网中的结构(假定它们共享同一图层)。
此节点确保我们不会意外检索到任何可能与结构共享同一图层的并不需要的对象类型。
现在,我们已有这些结构,我们需要确定它们在空间中的位置,以便可以根据它们的位置对它们进行排序。为此,我们将利用每个对象的边界框。对象的边界框是完全包含该对象几何范围的最小大小的框。通过计算边界框的中心,我们会获取结构插入点的较佳近似值。
我们将使用这些点,来获取结构相对于选定路线的桩号和偏移。
以下是事情开始变得有点棘手的地方。在此阶段,我们已有一个包含指定图层上所有结构的大列表,然后选择我们要对沿其的结构排序的路线。问题是列表中可能有我们不想要重命名的结构。例如,它们可能不是我们感兴趣的特定管路的一部分。
选定的路线
要重命名的结构
应忽略的结构
因此,我们需要过滤结构列表,以便我们不必考虑大于与路线的特定偏移量的结构。最好使用 List.FilterByBoolMask 节点完成此操作。过滤结构列表后,我们使用 List.SortByKey 节点以按其桩号值对结构进行排序。
检查以查看结构的偏移量是否小于阈值
将任何空值替换为 false
过滤结构和桩号列表
按桩号对结构排序
最后,我们需要为结构创建新名称。我们将使用的格式是 <alignment name>-STRC-<number>
。此处有一些额外节点,可用于根据需要为数字填充额外的零(例如,“01”而不是“1”)。
最后但同样重要的是,我们重命名结构。
以下是一个使用 Dynamo 播放器运行图形的示例。
它有助于利用 Dynamo 的三维背景预览来可视化图形的中间输出,而不仅仅是可视化最终结果。我们可以轻松地显示结构的边界框。此外,此特定数据集在文档中包含“道路”,因此我们可以将“道路要素线”几何图形导入 Dynamo,以便为结构在空间中的位置提供一些上下文。如果图形用于没有任何道路的数据集,这些节点将不会执行任何操作。
现在,我们可以更好地了解按偏移过滤结构的过程是如何工作的。
以下是一些有关如何扩展此图形功能的想法。
根据结构的 最近路线 来重命名结构,而不是选择特定路线。
除了结构外,还 重命名管道。
根据结构的管路,来 设置其图层。
Dynamo 软件包是第三方为扩展 Dynamo 的核心功能而开发的工具集。所有用户都可以访问这些软件包,只需单击相应按钮即可下载它们。
有关如何开始使用软件包的详细信息,请参见 部分。
下面列出了一些最受欢迎的软件包,这些软件包可将 Dynamo for Civil 3D 图形处理提升到更高级别。
Civil 3D Toolkit 是一个 Dynamo for Civil 3D 软件包,该软件包通过大量的附加节点显著增强了 Dynamo 的功能。
Camber 是一个开源的 Dynamo for Civil 3D 软件包,其中包含数百个用于处理标签、外部参照、数据快捷方式、样式等的节点。
CivilConnection 是一个开源的适用于 Revit 的 Dynamo 软件包,该软件包支持在 Civil 3D、Dynamo 和 Revit 之间交换信息。
Arkance Systems Nodes 是一个 Dynamo for Civil 3D 软件包,其中包含各种用于处理标注、表、视图、钻孔控制等的有用节点。
Dynamo 的许多绝佳用例之一是沿道路模型动态放置离散对象。通常情况下,需要将对象放置在与沿道路插入的装配无关的位置,手动完成这项任务非常繁琐。当道路的水平或垂直几何图形发生更改时,会引入大量返工。
从外部文件读取数据(在本例中为 Excel)
组织词典中的数据
使用坐标系控制位置/比例/旋转
放置块参照
在 Dynamo 中可视化几何图形
此图形将在 Civil 3D 2020 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
最好将 Excel 文件和 Dynamo 图形保存在同一目录中。
下面概述了此图形中的逻辑。
读取 Excel 文件并将数据输入到 Dynamo 中
从指定的道路基准线获取要素线
沿道路要素线以所需的桩号生成坐标系
使用坐标系将块参照放置在模型空间中
开始吧!
在本示例图形中,我们将使用 Excel 文件来存储 Dynamo 将用于放置灯杆块参照的数据。该表如下所示。
使用 Dynamo 从外部文件(如 Excel 文件)读取数据是一个很好的策略,尤其是当数据需要与其他团队成员共享时。
Excel 会如下所示输入到 Dynamo 中。
现在,我们已有数据,需要按列(“道路”、“基准线”、“点代码” 等)对数据进行拆分,以便可以在图形的其余部分中使用该数据。执行此操作的常见方法是使用 List.GetItemAtIndex 节点并指定我们所需每列的索引号。例如,“道路” 列位于索引 0 处,“基准线” 列位于索引 1 处,依此类推。
看起来不错,对吧?但这种方法有潜在问题。如果 Excel 文件中列的顺序将来发生更改,该怎么办?在两列之间添加新列,又该怎么办?然后,图形将无法正常运行,需要更新。我们可以通过将数据放入到词典中、将 Excel 列标题作为 键、将数据的其余部分作为 值,来使图形适应未来变化。
由于这允许灵活更改 Excel 中列的顺序,从而使图形更具弹性。只要列标题保持不变,即可使用 键(即列标题)从词典中检索数据,这是我们接下来要执行的操作。
现在,我们已输入 Excel 数据并准备就绪,让我们开始使用该数据以从 Civil 3D 中获取有关道路模型的一些信息。
按名称选择道路模型。
获取道路内的特定基准线。
通过点代码获取基准线内的要素线。
现在,我们将沿道路要素线以我们在 Excel 文件中指定的桩号值生成坐标系。这些坐标系将用于定义灯杆块参照的位置、旋转和比例。
请注意,在此处使用代码块可旋转坐标系,具体取决于坐标系位于基准线的哪一侧。这可以使用多个节点序列来实现,但这是一个很好的例子,说明只需编写代码块即可。
我们即将完成!我们已有能够实际放置块参照所需的所有信息。首先,使用 Excel 文件中的 块名称 列获取我们所需的块定义。
在此处,最后一步是创建块参照。
当运行图形时,您应该会在模型空间中看到新的块参照沿道路显示。以下是一个很酷的部分 - 如果图形的执行模式设置为“自动”,然后您编辑 Excel 文件,则块参照会自动更新!
以下是一个使用 Dynamo 播放器运行图形的示例。
在 Dynamo 中可视化道路几何图形以提供上下文可能会很有帮助。此特定模型已在模型空间中提取了道路实体,因此让我们将这些道路实体输入到 Dynamo 中。
但我们还需要考虑其他一些事项。实体是一种较“重”的几何图形类型,这意味着此操作会降低图形的运行速度。如果有一种简单方法来_选择_我们是否需要查看实体,那就太好了。显而易见的答案是,只需断开连接 Corridor.GetSolids 节点,但这会对所有下游节点产生警告,这有点乱。在这种情况下,ScopeIf 节点的作用确实显著。
请注意,Object.Geometry 节点的底部有一个灰色条。这意味着节点预览处于关闭状态(可通过在节点上单击鼠标右键进行访问),从而使 GeometryColor.ByGeometryColor 节点能够避免与其他几何图形“争抢”后台预览中的显示优先级。
ScopeIf 节点基本上使您能够有选择地运行整个节点分支。如果 test 输入为 false,则连接到 ScopeIf 节点的每个节点都不会运行。
以下是 Dynamo 后台预览中的结果。
以下是一些有关如何扩展此图形功能的想法。
将 旋转 列添加到 Excel 文件中,然后使用该列来驱动旋转坐标系。
将 水平或垂直偏移 添加到 Excel 文件中,以便灯杆可以根据需要偏离道路要素线。
直接在 Dynamo 中使用起点桩号和典型间距生成桩号值,而不是使用具有桩号值的 Excel 文件。
虽然 Dynamo 是一款功能非常强大的工具,但也可以越过节点和导线,以文本形式编写代码。有两种方法可以执行此操作:
使用代码块编写 DesignScript
使用 Python 节点编写 Python
本部分将重点介绍如何在 Civil 3D 环境中利用 Python,来利用 AutoCAD 和 Civil 3D .NET API。
有关如何在 Dynamo 中使用 Python 的更多常规信息,请参见 部分。
AutoCAD 和 Civil 3D 都提供了多个 API,使像您这样的开发人员能够使用自定义功能扩展核心产品。在 Dynamo 的上下文中,相关的托管 .NET API 可用。以下链接对于了解 API 的结构及其工作方式至关重要。
在您浏览此部分时,可能会有一些您不熟悉的概念(如数据库、事务、方法、特性等)。其中许多概念是使用 .NET API 的核心,并不是 Dynamo 或 Python 特有的。本 Primer 的此部分不会详细讨论这些项目,因此建议您经常参见上述链接以了解详细信息。
当第一次编辑一个新的 Python 节点时,该节点会预填充模板代码以便于您快速开始。以下是模板的详细介绍,其中包含有关每个块的说明。
输入
sys
和clr
模块,这两个模块都是 Python 解释器能够正常运行所必需的。特别是,clr
模块使 .NET 名称空间能够基本上被视为 Python 软件包。加载标准程序集(即 DLL),以使托管 .NET API 能够用于 AutoCAD 和 Civil 3D。
添加对标准 AutoCAD 和 Civil 3D 名称空间的引用。这些引用分别相当于 C# 或 VB.NET 中的
using
或Imports
指令。可使用名为
IN
的预定义列表来访问节点的输入端口。可以使用特定端口的索引号来访问该端口中的数据(例如,dataInFirstPort = IN[0]
)。获取活动文档和编辑器。
锁定文档并启动数据库事务。
在此应放置脚本的大部分逻辑。
在主要工作完成后,取消注释此行以提交事务。
如果要输出节点中的任何数据,请在脚本末尾将该节点指定给
OUT
变量。
要自定义?
可以通过编辑位于 C:\ProgramData\Autodesk\C3D <version>\Dynamo
中的 PythonTemplate.py
文件,来修改默认 Python 模板。
让我们通过一个示例来演示在 Dynamo for Civil 3D 中编写 Python 脚本的一些基本概念。
以下是可以在本次练习中参照的示例文件。
下面概述了此图形中的逻辑。
查看 Civil 3D API 文档
按图层名称选择文档中的所有汇流
“展开”Dynamo 对象以访问 Civil 3D API 内部成员
从 AutoCAD 点创建 Dynamo 点
从点创建 PolyCurve
开始吧!
现在,我们可以开始构建图形逻辑。首先,获取文档中所有汇流的列表。有节点可用于此操作,因此我们不需要将其包含在 Python 脚本中。使用节点可以为可能读取图形的其他人提供更好的可见性(而不是在 Python 脚本中隐藏大量代码),它还使 Python 脚本能够专注于一件事:返回汇流的边界点。
请注意,All Objects on Layer 节点的输出内容是 CivilObject 的列表。这是因为 Dynamo for Civil 3D 当前没有任何用于处理汇流的节点,这正是我们需要通过 Python 访问 API 的原因。
根据经验,通常使用 InternalObjectId
特性获取对象 ID,然后在事务中访问包裹对象更安全。这是因为 InternalDBObject
特性会返回一个不处于可写状态的 AutoCAD DBObject。
以下是一个完整的 Python 脚本,用于访问内部汇流对象以获取其边界点。亮显行表示基于默认模板代码修改/添加的行。
单击脚本中带下划线的文字,可了解每行的说明。
根据经验,最好将大部分脚本逻辑包含在事务中。这可确保安全访问脚本正在读/写的对象。在许多情况下,忽略事务可能会导致出现致命错误。
在此阶段,Python 脚本应该会输出可在后台预览中看到的 Dynamo 点列表。最后一步是从这些点创建 PolyCurve。请注意,这也可以直接在 Python 脚本中完成,但我们有意将其放置在脚本之外的节点中,以便它更明显。最终图形如下所示。
以下最终的 Dynamo 几何图形。
在我们结束之前,作一个简短说明。根据您正在使用的 Civil 3D 版本,Python 节点的配置可能会有所不同。在 Civil 3D 2020 和 2021 中,Dynamo 使用名为 IronPython 的工具在 .NET 对象和 Python 脚本之间移动数据。但在 Civil 3D 2022 中,Dynamo 转变为使用标准的本地 Python 解释器(也称为 CPython),而不是使用 Python 3。此转变的好处包括能够访问常用现代库和新平台功能、基本维护和安全修补程序。
此行从 Dynamo 几何图形库中获取我们需要的特定类。请注意,我们在此处指定 import Point as DynPoint
而不是 import *
,因为后者会引发命名冲突。
在此处,我们准确指定哪个输入端口包含我们需要的数据,而不是使用默认的 IN
,后者指的是所有输入的整个列表。
将水表块参照放置在距地块线的指定偏移处,并为垂直于配水总管的每个服务设施连接绘制一条线。
任务完成!
使用车辆轮廓块来沿道路生成间隙包络三维实体。
如果您对使用坐标系不熟悉,请参见 部分。
如果您对使用节点连缀不熟悉,请参见 部分。
如果您对使用 Dynamo 播放器不熟悉,请参见 部分。
任务完成!
准备好尝试以后,转到 部分。
Dynamo for Civil 3D 附带了一些预构建的图形,有助于激发更多有关如何使用 Dynamo 的想法。建议您在某个时候查看这些内容,以及在本 Primer 中此处参见部分。
构建一个会将文字插入到模型空间中的 Dynamo 图形。
库中的节点根据它们的作用分组为逻辑类别。如需更深入浏览,请参见部分。
默认情况下,Dynamo 会“记住”它创建的对象。如果更改节点输入值,则 Civil 3D 中的对象会更新,而不是创建全新的对象。有关此行为的详细信息,请参见部分。
任务完成!
根据路线的桩号标注按顺序重命名管网结构。
如果您对操作列表不熟悉,请参见 部分。
如果您对使用 Dynamo 播放器不熟悉,请参见 部分。
任务完成!
沿道路在 Excel 文件中指定的桩号值处放置灯杆块参照。
如果您对使用词典不熟悉,请参见 部分。
如果您对使用坐标系不熟悉,请参见 部分。
如果您对使用代码块不熟悉,请参见 部分。
可以在 部分中,了解有关图形执行模式的详细信息。
如果您对使用 Dynamo 播放器不熟悉,请参见 部分。
任务完成!
获取图形中所有汇流的边界几何图形。
在我们开始构建图形和编写代码之前,最好先查看 Civil 3D API 文档,了解 API 的可用内容。在这种情况下,,该特性会返回汇流的边界点。请注意,此特性会返回一个 Point3dCollection
对象,而 Dynamo 并不会知道该如何处理该对象。换句话说,我们将无法从 Point3dCollection
创建 PolyCurve,因此最终需要将所有内容都转换为 Dynamo 点。稍后会对此进行详细介绍。
在进一步介绍之前,我们需要简要介绍一个重要概念。在部分中,我们讨论了 Objects 和 CivilObject 之间的关系。对此详加说明,Dynamo Object 是 AutoCAD Entity 的包裹器。同样,Dynamo CivilObject 是 Civil 3D Entity 的包裹器。可以通过访问对象的 InternalDBObject
或 InternalObjectId
特性来“展开”该对象。
Dynamo 类型 | 包裹 |
---|
任务完成!
可以在 上,详细了解此转变以及如何升级旧脚本。如果要继续使用 IronPython,只需使用 Dynamo Package Manager 安装 DynamoIronPython2.7 软件包。
Object Autodesk.AutoCAD.DynamoNodes.Object | Entity Autodesk.AutoCAD.DatabaseServices.Entity |
CivilObject Autodesk.Civil.DynamoNodes.CivilObject | Entity Autodesk.Civil.DatabaseServices.Entity |
在 Civil 3D 中使用几何空间点和点编组是许多现场完成过程的核心要素。Dynamo 在数据管理方面非常出色,我们将在本例中演示一个潜在用例。
使用列表
使用 List.GroupByKey 节点对类似对象进行分组
在 Dynamo 播放器中显示自定义输出
此图形将在 Civil 3D 2020 及更高版本上运行。
首先下载下面的样例文件,然后打开 DWG 文件和 Dynamo 图形。
下面概述了此图形中的逻辑。
获取文档中的所有几何空间点
按描述对几何空间点进行编组
创建点编组
将摘要输出到 Dynamo 播放器
开始吧!
我们的第一步是获取文档中的所有点编组,然后获取每个编组中的所有几何空间点。这将为我们提供 嵌套列表 或“列表的列表”(稍后如果我们使用 List.Flatten 节点将所有内容都向下展平为单个列表,将更易于使用它们)。
如果您对操作列表不熟悉,请参见 使用列表部分。
现在,我们已有所有几何空间点,需要根据这些几何空间点的描述将它们分成多个组。这正是 List.GroupByKey 节点的作用。它本质上是将共享相同键的任何项目分组在一起。
艰苦的工作已完成!最后一步是从分组的几何空间点创建新的 Civil 3D 点编组。
当您运行图形时,由于我们不在处理任何几何图形,因此在 Dynamo 后台预览中看不到任何内容。因此,查看图形是否正确执行的唯一方法是检查“工具空间”,或查看节点输出预览。但是,如果我们使用 Dynamo 播放器运行图形,则可以通过输出已创建的点编组的摘要来提供有关图形结果的更多反馈。您只需在节点上单击鼠标右键,然后将其设置为 “为输出”(Is Output)。在本例中,我们使用重命名的 Watch 节点来查看结果。
以下是一个使用 Dynamo 播放器运行图形的示例。
如果您对使用 Dynamo 播放器不熟悉,请参见 Dynamo 播放器部分。
以下是一些有关如何扩展此图形功能的想法。
将点编组修改为基于 完整描述 而非原始描述。
按您选择的其他 预定义类别(例如,“地面快照”、“碑界”等)对点进行分组。
为某些组中的点自动创建三角网曲面。
Dynamo for Civil 3D 包含一个非常强大的机制,用于“记住”每个节点创建的对象。此机制称为 “对象绑定”,它使 Dynamo 图形能够每次在同一文档中运行时生成一致的结果。尽管这一机制在许多情况下都是非常需要的,但在其他情况下,您可能希望更好地控制 Dynamo 的行为。本部分将帮助您了解对象绑定的工作方式以及如何利用它。
请考虑此图形,该图形会在模型空间中的当前图层上创建一个圆。
注意半径发生更改时会出现什么情况。
这是正在进行对象绑定。Dynamo 的默认行为是_修改_圆的半径,而不是每次半径输入发生更改时都创建一个新圆。这是因为 Object.ByGeometry 节点“记住”:每次运行图形时,它都创建此_特定_圆。此外,Dynamo 会存储此信息,以便下次打开 Civil 3D 文档并运行图形时,它将具有完全相同的行为。
让我们看一个示例,在其中您可能希望更改 Dynamo 的默认对象绑定行为。假定您要构建一个将文字放置在圆中间的图形。但您使用此图形的目的是,该图形可以反复不断地运行,并每次为选定的任何圆都放置新文字。该图形可能如下所示。
但是,当选择其他圆时,实际上会发生这种情况。
似乎每次运行图形时都会删除并重新创建文字。实际上,文字的位置会根据选择的圆进行_修改_。如此一来,就是文字相同,位置却不同!为了每次都创建新文字,我们需要修改 Dynamo 的对象绑定设置,以便不保留绑定数据(请参见下文的#binding-settings)。
进行更改后,我们会获得所需的行为。
Dynamo for Civil 3D 允许通过 “Dynamo” 菜单中的 “绑定数据存储” 设置来修改默认对象绑定行为。
请注意,“绑定数据存储”选项在 Civil 3D 2022.1 及更高版本中可用。
默认情况下,所有选项都处于启用状态。以下是每个选项的作用摘要。
启用此选项后,Dynamo 将“忘记”上次运行图形时创建的对象。因此,图形可以在任何情况下在任何图形中运行,每次都会创建新对象。
何时使用
如果希望 Dynamo“忘记”以前运行时所执行的所有操作并每次都创建新对象,请使用此选项。
此选项意味着对象绑定元数据会在保存时序列化到图形(.dyn 文件)中。如果关闭/重新打开图形并在同一图形中运行该图形,则所有操作都应与离开时相同。如果在其他图形中运行图形,则绑定数据会从该图形中删除,并创建新对象。这意味着,如果打开原始图形并再次运行图形,则除了旧对象外,还会创建新对象。
何时使用
如果希望 Dynamo“记住”上次它在特定图形中运行时创建的对象,请使用此选项。
此选项最适合在 特定图形 和 Dynamo 图形之间保持 1:1 关系的情况。选项 1 和 3 更适用于设计为在多个图形上运行的图形。
此选项类似于选项 2,不同之处在于对象绑定数据在图形中序列化,而不是在图形(.dyn 文件)中序列化。如果关闭/重新打开图形并在同一图形中运行该图形,则所有操作都应与离开时相同。如果在其他图形中运行图形,则由于绑定数据保存在图形 (drawing)(而不是图形 (graph))中,因此该绑定数据仍保留在原始图形中。
何时使用
如果要在多个图形中使用相同的图形,并让 Dynamo“记住”它在每个图形中执行的操作,请使用此选项。
使用此选项时,首先要注意的是,当通过主 Dynamo 界面运行图形时,该选项对图形与图形的交互方式没有影响。_仅_当使用 Dynamo 播放器运行图形时,此选项才适用。
如果您对使用 Dynamo 播放器不熟悉,请参见 Dynamo 播放器部分。
如果使用主 Dynamo 界面运行图形,然后关闭并使用 Dynamo 播放器运行同一图形,则它将在之前创建的对象之上创建新对象。但是,Dynamo 播放器执行一次图形后,该播放器将序列化图形中的对象绑定数据。因此,如果通过 Dynamo 播放器多次运行图形,则该播放器会更新对象,而不是创建新对象。如果通过 Dynamo 播放器对其他图形运行图形,则由于绑定数据保存在图形 (drawing)(而不是图形 (graph))中,因此该绑定数据仍保留在原始图形中。
何时使用
如果要在多个图形中使用 Dynamo 播放器运行图形,并让它“记住”在每个图形中执行的操作,请使用此选项。
Dynamo 播放器提供了一种在 Civil 3D 中运行 Dynamo 图形的简化方法。创建了图形后,无需任何 Dynamo 专业知识即可使用播放器并运行图形。这方便与可能不想深入了解节点和导线的细节的其他人共享图形。
有关 Civil 3D 中 Dynamo 播放器的详细信息,请参见 Civil 3D 帮助站点上提供的文档。
为每个唯一的几何空间点描述创建点编组。
任务完成!