CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD大学

相关分类

土木工程师计算设计

2023-1-13 00:35| 发布者: admin| 查看: 121| 评论: 0|来自: AutoCAD

摘要: 了解如何使用 Dynamo 和 Civil 3D 为铁路、公路和站点开发创建自动化工作流。

Roads

发电机和计算设计

Dynamo 是一个平台,使设计人员能够探索可视化编程、解决问题和创建自定义工具。

可视化编程是建立规则的过程,这些规则可以描述设计各部分之间的关系。规则和关系被形式化为算法。

算法是执行任务时要遵循的一组指令。这些说明可以是简单的英语、意大利语或法语等文本,也可以以图形方式表达,例如使用 UML 或 BPMN 等语言。

为了使计算机能够理解这些指令,需要采用一种人类可读但计算机也可以理解的中间语言。有几种可能的传统脚本语言,如C#,Python,JavaScript。

Dynamo 是一个可以直观地定义算法的平台,并且指令序列是使用称为节点的块生成的,这些块执行预定义的任务,使用连接器按顺序连接在一起。Dynamo 算法称为图形,用于强调可视化编程方法,这是 Dynamo 与任何其他脚本语言之间的主要区别之一。

Visual programming example
在 Dynamo 中进行可视化编程,以使用节点和连接器创建圆。

Dynamo是某种数字瑞士刀,可以包含恰到好处的刀片,即使它的使用方式非常直观,它也非常有效。Dynamo的另一个重要特征是,无论出于何种原因,如果缺少刀片,它支持多种方法,要么从外部包的公共存储库添加一个刀片,要么使用传统的脚本语言(如Python或C#)创建更复杂的功能。

Dynamo is a platform for automation
Dynamo 是一个支持自定义的自动化平台。

Dynamo 将编程商品化,使其更接近设计人员,负责复杂的操作,例如处理数据库和事务、序列化更改和更新模型,而不是执行“即发即弃”的自动化。Dynamo处于交互式工具(如Civil 3D或Revit)和更传统的脚本语言之间,以利用产品API。

Automation tools
Dynamo是自动化工具之树上唾手可得的果实。

Dynamo可以作为称为沙盒的独立应用程序找到,但也与Revit或Civil 3D等主机应用程序集成。有关 Dynamo 集成以及从何处获取它的更多信息,请访问 https://dynamobim.org/download/

对于与主机应用程序(如 Revit)的更成熟的 Dynamo 集成,Dynamo 附带了一个称为 Dynamo Player 的可选简化界面,允许您从列表中选择图形,通过动态界面提供必要的用户输入,并运行图形的执行。Dynamo Player 可以将 Dynamo 图形转换为在许多方面类似于主机应用程序的自定义加载项的内容,其优点是无需深入了解主机应用程序 API 即可开发它们。

为什么使用 Dynamo

Dynamo 允许设计人员执行更多操作并控制复杂的建模,否则使用主机应用程序的开箱即用功能手动完成这些建模是不可能的、极其困难或耗时的。

Dynamo 可以提供一种方法来实现更高级别的模型数据一致性,以确保跨多个项目和团队获得更好的质量,而无需依赖个人的技能,捕获最佳实践并通过自动化在整个业务中扩展它们。

Dynamo 允许重复性任务的自动化,减少实现相同结果所需的工作量,并允许设计师专注于需要批判性思维的工作部分。

Dynamo 特别通用,允许没有编码背景的设计人员对解决方案进行原型设计,以解决眼前的问题,并以专业开发人员易于理解的语言表达他们的需求。开发人员有可能专注于充足的开发和实施,而不会冒成为其他部门瓶颈的风险。如有必要,经验丰富的开发人员可以扩展 Dynamo 中的节点,甚至可以覆盖或向应用程序添加新行为,以满足公司需求和项目要求。此外,Dynamo 还提供开箱即用的功能,例如读取和写入 Excel 电子表格或实现创建-读取-更新-删除范例。Dynamo 还减少了发布新 API 时更新代码的需求,因为可视化编程方法几乎不受弃用周期的影响。

Dynamo 文件的结构为 JSON 文件,这是 Dynamo 应用程序用来实现动态解释此文本中的内容的逻辑的有组织的数据集合。这意味着 Dynamo 文件不能像用 C# 编写的插件那样“兼容”或锁定以防止有人摆弄节点的逻辑,归根结底它只是一个任何人都可以打开的文本文件文本编辑器。

CivilConnection 和 CivilPython

CivilConnection 是 Dynamo for Revit 的 Dynamo 自定义包的名称,它为 Autodesk Consulting 项目启用 Civil 3D - Dynamo - Revit 技术堆栈,这些项目被称为“线性结构”。它允许使用在打开的Civil 3D文档中定义的线性参考系统(例如,道路,路线,要素线等)来创建和/或更新Revit文档中的图元。它还使您能够将图元从 Revit 文档导入和更新到 Civil 3D 文档中。

CivilConnection and CivilPython
CivilConnection和CivilPython通过Dynamo动态连接Civil 3D和Revit。

自动化在基础设施领域并不是什么新鲜事。过去有过几次尝试,反复使用基于约束表单的插件来执行非常具体的任务。尽管它们不需要用户了解自动化步骤,但这些插件不够灵活,无法满足所有项目要求和需求。最重要的是,一些插件已经退役,留下了需要解决的技术差距。在考虑了所有这些因素之后,设计师直接为设计师开发的定制工具仍然是最佳解决方案。

CivilConnection通过工具包理念简化了原型的定义:它包含一系列通用的功能,足以涵盖大多数用例,可以组合起来解决非常具体的项目挑战。所有这些都使用可视化编程方法,而不是传统的脚本语言。

Linear structures use cases
通过CivilConnection和CivilPython启用的线性结构用例。

CivilConnection主要基于一种称为组件对象模型或COM的技术。多年来,Civil 3D和大多数Autodesk产品都引入了基于.NET的更高效API。

CivilPython背后的意图是启用与Revit中的Dynamo用户相同的原型设计方法,使用Python语法来利用.NET Revit API。CivilPython是一个自定义命令,可以在AutoCAD和Civil 3D中选择和执行Python脚本。它还具有命令的命令行版本,可以通过COM从CivilConnection启动。就是这样,现在CivilPython还包含一些命令,这些命令是CivilConnection使用.NET而不是COM访问数据所必需的。

CivilPython
CivilPython进一步扩展了CivilConnection的功能。

CivilConnection和CivilPython是开源的,可以在此链接中找到,以及设计自动化 https://github.com/Autodesk/civilconnection 示例和文档 传统上,设计师运用他们的直觉来定义建筑物或桥梁的设计。设计意图在详细的图纸中捕获,并使用尺寸、文本注释等说明设计部件之间的关系、质量和数量。我们可以将这种过程称为“静态设计”。

Examples of static design
道路交叉口或桁架的静态设计示例。

借助专用的建模软件和智能参数化对象,设计过程发生了根本性的变化。设计师现在可以更快地探索更多选项;该软件负责更新三维零件之间关系的复杂系统,这要归功于以分析方式(例如,更改子装配体中的“厚度”)或图形方式(例如,使用目标覆盖子装配体中的“宽度”或“高程”参数)表示的参数。例如,在Civil 3D中,设计人员定义以下输入:对齐和垂直轮廓,基线区域并分配组件,指定采样频率并指定目标。然后,软件负责生成所有道路子元素(例如特征线、曲面、实体),并在任何用户输入发生变化时动态更新它们。

Civil 3D offers parametric tools
Civil 3D 为土木工作流程提供参数化工具。

设计演变的下一步是引入算法,一组指令,允许生成对象并可以产生可预测结果的规则系统的可能性。这种方法增强了设计人员在软件中引入新的动态关系的能力,这些关系最初不是为软件设计的。Civil 3D 中一个非常简单的应用是沿走廊创建离散元素(例如,沿铁轨的混凝土连接),以便将离散对象的位置和方向连接到走廊中的要素线。

Concrete ties
混凝土连接通过发电机动态连接到民用 3D 铁路走廊。

计算设计需要在设计师和软件之间有一个中间环境来原型化和组装这些新关系。它还需要在设计和软件之间使用一种中间语言,以将设计意图的规则转换为软件的说明。中间环境可以是VBA宏编辑器,Visual Lisp编辑器,MS Visual Studio等,以利用某种传统的脚本来定义指令序列。

Traditional scripting
通过传统脚本定义指令序列。

Dynamo是一个中间环境,允许设计人员通过Python利用可视化编程和传统脚本,并在日常工作中探索计算设计方法。

Dynamo and computational design
Dynamo作为计算设计的环境。

对于开始进行计算设计的人,无论编码的专业水平如何,我能给出的最好的建议是计划自动化。定义算法中的所有步骤,识别输入及其供应商,定义使用输入的过程,并创建合适的输出,以后可以使用这些输出用于其他BIM用途。

一个非常直观的工具,允许您以可视化方式起草任何算法,称为业务流程建模表示法或BPMN。这种方法允许您抽象和分析手头的问题,并将其细分为可以在稍后阶段解决的较小问题,但不会失去对总体目标的关注。

这使您能够识别自动化的机会,以更少的努力提高效率。例如,如果输入的提供方式与通常略有不同,则可以大大简化流程(例如,减少步骤数,减少要处理的决策数量等),输入供应商可以毫不费力地做到这一点(例如,在子组件中采用点代码的命名约定),但在获取时可以带来很大的好处, 解释和处理数据。

BPMN还可用于“调试”现有流程或算法(无论它们是使用传统的脚本还是可视化编程开发的)。有一个名为BPMN的免费基于Web的工具用于创建本文档中的关系图的 IO。强烈建议在任何设计过程中引入类似的东西,以捕捉想法,计划开发并构建问题,以便在寻求帮助时提出非常精确的问题。

继同年 4 月民用 3D 2020 全球发布后,2019 年 6 月首次在 Dynamo for Civil 3D 上举办了关于设计自动化的现场网络研讨会。在网络研讨会中,介绍了如何将自动化用于铁路、公路和现场开发的土木工作流程的示例。查看网络研讨会录像。网络研讨会中演示的示例中使用的演示文稿和数据集可以在 Dynamo 论坛的 Civil 3D 部分的这篇文章中找到。

民用 3D 发电机

在Civil 3D 2020中,可以找到与Dynamo 的集成。最初,Dynamo for Civil 3D 作为单独的安装提供,可从 Civil 3D 2020 插件下的 manage.autodesk.com 访问。在Civil 3D 2020.1中,Dynamo直接随产品一起提供。

当工作区设置为Civil 3D时,可以从功能区上“可视化编程”面板下的“管理”选项卡访问Civil 3D的Dynamo for Civil 3D。当前有两个图标,一个用于启动 Dynamo 应用程序界面,另一个用于启动运行脚本的无外设 Dynamo 会话。

或者,可以在命令行中键入AECCLAUNCHDYNAMO命令启动Dynamo。

Dynamo for Civil 3D 附带一组示例用例,用于展示如何应用计算设计来通过自动化增强运输工作流程。需要考虑两个组件:AutoCAD 对象和 Civil 3D 对象。在 Dynamo for Civil 3D 的这些初始版本中,可用的节点主要集中在启用处理路线和走廊的运输模型创作工作流上。在未来,我们可以期待找到更多可通过Dynamo访问的对象,并实现可以实现其他土木学科和BIM使用的功能(例如,图纸制作,可视化)。

Dynamo 可以读取 DWG 文件中的数据,对于对象,它可以返回代理或表示 Dynamo 库中节点的“包装器”。Dynamo 还可以将一组给定的对象(例如直线、折线、圆、文本、块参考等)写回 DWG,并在此过程中跟踪通过 Dynamo 创建的对象。

AutoCAD 和 Civil 3D 节点

本节的目的不是列出 Dynamo for Civil 3D 中当前存在的节点 - 这将毫无意义,因为它们可以在版本之间发生很大变化。更重要的是了解节点在 Dynamo 库中的组织方式、对象类型之间的关系以及当前限制是什么。

Nodes structure
民用 3D 发电机的节点结构。

发电机绑定

当 Dynamo 应用程序可见并且图形在 DWG 中创建对象时,可以在 Dynamo 文件本身中序列化 Dynamo 拥有的对象的跟踪。此机制称为“绑定”:对于从 Dynamo 创建对象到 DWG 的每个节点,Dynamo 将其“指纹”存储在 Dynamo JSON 结构的“绑定”部分中,以便在输入发生更改时,Dynamo 可以放心地仅相应地更新图形拥有的对象。用户需要在执行后保存文件,以便 Dynamo 能够将跟踪数据存储到“绑定”部分中。

如果 Dynamo 图中没有有效的绑定(例如,绑定已从 JSON 文件中删除,或者有人手动删除了 Dynamo 生成的对象,或者 Dynamo 图以前用于其他 DWG 文件),则在执行后将创建新对象而不是更新现有对象,并且 JSON 文件中的绑定关系将在用户保存 Dynamo 文件后立即被覆盖。

根据设计,Dynamo for Civil 3D 一次连接一个 DWG 文档,并且在整个会话中仅与该文档交互。这是一个限制,它模仿了我们在 Dynamo for Revit 中找到的相同实现。这部分是由于 Dynamo 中的绑定的工作方式:仅当您确保 Civil 3D 模型和 Dynamo 文件之间存在 1:1 关系时,才能具有动态行为。

使用“运行脚本”选项时,Dynamo 界面不可见,这意味着在执行后,用户无法保存图形。这意味着 JSON 文件的绑定部分在执行后被清除,Dynamo 图更像是“即发即弃”,而不是动态更新现有对象。我们发现,如果对象是通过 Python 脚本而不是使用 Dynamo 节点创建的,则会发现类似的行为(无绑定)。因此,建议为 Dynamo 图定义一个命名约定,以显示图形与 Civil 3D 模型之间的关系。

发电机标准

当 Dynamo 在 2015 年允许创建节点组和颜色时 (0.8.1),我开发了一个标准来统一 Dynamo 图形的外观和感觉。该标准基于一个非常简单的事实:模型上的每个自动化,无论使用何种语言,都是一系列功能任务。我在 Dynamo 的调色板中为这些逻辑函数序列关联了一种颜色,从左到右,就像看书一样。

Table 1

采用标准可提高可读性,并支持在公司内采用 Dynamo 图形。此外,围绕逻辑留下详尽的评论是一种附加值和最佳实践,应始终应用于任何开发。

但是,对于节点组,最好非常简洁,并分配一个简短的句子来表达任务,例如Verb + Noun,它迫使开发人员传达组中节点集合应该做什么的高级想法。这就是为什么建议使用例如 BPMN 图来规划开发,以用作在 Dynamo 中重命名节点组的草稿。

Dynamo 中的自动化工作流

在非常高的级别上,Dynamo 图可以启用以下工作流的某种形式。

从模型中提取数据

自动化以编程方式读取模型对象数据,然后将其发送到另一个应用程序以供使用。要启用此工作流,自动化应提供以下功能:

  • 直接或基于属性或分类器选择对象(例如,选择模型中的所有线)
  • 获取属性,主机应用程序中的每个对象都不仅仅是一个抽象的几何图形,还包含诸如句柄/ID、类型和其他类型的相关元数据(例如行的长度、颜色、图层的名称等)等信息,需要提取和解释数据(例如,它是一段文本, 数字或其他对象等)
  • 将值写入外部存储,这可以采用任何形式,并且需要管理数据流的创建和对不同格式(例如文本,CSV,XLSX,XML,JSON,图像格式等)的序列化。此工作流的一个示例可能是以给定的站点间隔提取要素线的高程,并将结果信息写入 Excel 中的自定义报告。

Automation to extract data to Excel
将数据提取到 Excel 的自动化的可视化表示形式。

使用外部数据修改现有对象

自动化读取外部数据,访问模型对象属性,更新值,并将更改保存到数据库中(例如,Cogo Points的位置,路线的起始站等)。要启用此工作流,自动化应提供以下功能:

  • 直接或基于属性或分类器选择对象(例如,选择模型中的所有线)
  • 读取外部源或输入,例如用户指定的数值或外部源的位置(例如服务器、基于云的存储库等);自动化应该能够解释源/输入中包含的数据,并在自动化环境中返回值以供进一步处理。
  • 修改对象。自动化应该能够打开与主机应用程序的事务,查找需要按照用户预期(元数据和非)分配新值进行修改的属性,并将更改提交到模型数据库。

此工作流的一个示例可能是从 Excel 电子表格中读取属性集值,并更新模型中相应对象的值。

Logic for editing property sets
用于编辑属性的逻辑从 Excel 设置值。

创建或更新对象

自动化接收一些输入,按照计算规则处理数据,并在主机应用程序模型中创建对象。如果输入发生更改,则再次执行自动化会更新以前创建的元素的定义,它们是新的,或者如果有任何现有对象连接到先前的自动化执行,则更新其定义。要启用此工作流,自动化应提供以下功能:

  • 直接或从外部源获取用户输入。
  • 过程数据定义将输入转换为抽象 Dynamo 几何项的逻辑步骤,这些项目可用于驱动模型对象的创建。
  • 创建/更新模型对象,这是一组功能,可将 Dynamo 抽象对象转换为主机应用程序的具体模型对象。此工作流的一个例子可能是沿路边创建护柱。

Logic to create bollards
在路边创建护柱的逻辑。

土木工作流程的计算设计

上面提到的网络研讨会简要讨论了一些用例,以演示 Dynamo 在三个不同领域的设计自动化应用:铁路、公路和现场开发。本文的范围是提供一些上下文,并突出显示网络研讨会期间使用的图形背后的逻辑,并指出用于获取结果的 Dynamo for Civil 3D 功能。本文档中使用的方法解释了目标和用于实现目标的逻辑、所涉及的对象类型以及如何使用 Dynamo 节点查找将逻辑保持在一起的关系。

Civil 3D 2020 在支持铁路工作流方面进行了许多改进。有关这些改进的完整列表,请参阅发行说明下的Civil 3D联机帮助。在自动化方面,识别与其结果相关的任务组件总是很有用的,例如做得更多、做得更好或用更少的努力去做。

Civil 3D已经提供了一套工具来处理线性元素(如实际轨道)的建模和管理,那么自动化可以做些什么来改善建模工作流程呢?下面介绍的用例涵盖了不同的方面,从详细建模到通过可视化编程使用外部数据源,利用 Dynamo 实现 Civil 3D 功能。

混凝土枕木

此示例的主要学习内容是:

  • 如何从文档中获取道路要素线
  • 如何在道路要素线上获取坐标系
  • 如何创建一系列电台
  • 如何创建块参照

混凝土枕木或枕木是离散单元的典型示例,它参与在Civil 3D中难以定位和维护的铁轨的详细建模。在AutoCAD术语中,混凝土连接是块参照,可以是Revit或Inventor,然后导出为DWG。在自动化中使用块参照的本地原点和插入点及其名称之前,了解它非常重要。

Logic for concrete ties
具体关系的逻辑。

混凝土系带沿着铁路走廊轨道的中心线,块参考以 2' (ca 0.6m) 的固定间隔放置,与路线正交。在高级别上,相对容易考虑放置块参照所需的内容:名称、图层、X、Y 和 Z 中的位置(其中 Z 是线性参照的高程,例如基线或轨道要素线)以及围绕垂直轴的旋转。要放置块引用,需要更多数据,但可以安全地假设这些是默认值(例如比例因子,当然还有我们需要创建块引用的目标块,换句话说,文档的模型空间)。

Block reference
按名称选择文档中块参照的定义。

在自动化方面,这是一种有效的技术:从最终开始,可以说是构建“上游”的自动化。下一步是了解输入要提供给创建块引用等的函数。

Block system with coordinate system
使用坐标系创建块参照。

让我们关注位置:请求是定期细分线性参考(例如基线)。间隔可能与道路参数中定义的采样间隔一致,也可能不一致。这已经很强大了:可以考虑走廊及其基线,并即时查询一些可能不在走廊定义的站点,而无需重建走廊!

现在是时候看看混凝土关系的旋转了:要求是使这些元素与对齐正交。块参考的默认方向是已知的(例如,平行于全局 X 轴),因此要求计算使块参考与给定站的对齐正交所需的旋转。在 Dynamo 中,要计算角度,需要使用矢量进行操作。关于 DynamoPrimer.com,每个 Dynamo 用户都应该熟悉一些非常有用的三角函数概念,这里的假设是读者理解这是如何完成的。

在 Dynamo 的 2020.1 版本中,通过引入一个将坐标系作为输入的节点,块参考的创建得到了极大的简化 - 了解更多信息。该对象立即传达了位置和方向的信息,并为我们节省了很多麻烦,试图计算每个混凝土拉杆的旋转。

在几何术语中,要求是计算位于给定站点的基线或特征线曲线上的点(该站点沿用于创建走廊的路线进行测量)以及该点中的曲线方向。有一个 Dynamo 节点正是这样做的。

Coordinate system
按站点获取要素线上的坐标系。

遍历文档中的数据,可以按名称调用道路和基线,然后通过子组件定义中指定的点代码选择道路特征线。

Get a feature line from a corridor via its point code
通过点代码从走廊获取要素线。

这是用于放置单个块引用的逻辑,其他的呢?这是通过“循环”完成的,该循环告诉Dynamo在每次重复开始时重复一组提供正确输入的指令多少次。

Dynamo 中的循环通过几个称为系带策略和复制指南的范例进行处理。有关其工作原理的详细说明,请参阅Dynamo GitHub上的Wiki页面,从这里开始。

简而言之:节点上的每个输入端口都有一个默认的输入“等级”(单个输入、输入列表、输入列表列表等)。如果提供的输入的秩高于默认值,这将触发循环,节点定义的函数将重复多次。在每次重复时,函数将遍历输入列表。为了准确确定如何完成、多少次以及如何构建输出,用户可以通过右键单击和/或使用节点输入端口旁边的 V 形来指定节点上的系带策略。

因此,现在的问题是如何指定站点列表以计算要素线上的多个坐标系。为此,需要一个范围,Dynamo 提供了一个节点和几个代码块语法来生成数字范围,在本例中是特征线上的一系列电台。(注意:这些站点不是用于对走廊中的要素线进行采样的站点。

Calculate a range of stations
计算站点范围以检索要素线上的坐标系。

将它们放在一起会返回一种自动化,即在极少数节点中可以沿走廊放置离散块参照并动态更新模型以响应设计更改(例如,对齐、垂直轮廓、块定义、块参考间距等)。这使您可以使用 Civil 3D 执行更多操作,创建更好的模型,并在发生更改时以更少的工作量更新模型。

保罗·埃米利奥·塞拉(Paolo Emilio Serra)是一名建筑工程师。他曾在意大利米兰的一家建筑公司担任BIM经理5年。自2014年以来,他担任Autodesk的BIM实施顾问。在欧特克,他一直为工程公司提供客户成功服务,支持其业务流程中的BIM工作流程和数字化转型。Paolo的主要重点是自动化,创成式设计,AEC和ENI行业之间的集成。Paolo 自 2006 年以来一直是建筑爱好者和 Revit 用户。他开始发现使用Autodesk产品API和Dynamo实现自动化和定制的可能性。他开发了 CivilConnection Dynamo 包,用于在 Civil 3D 和 Revit 之间为线性结构 BIM 工作流创建动态关系。他还为Autodesk的产品团队提供支持,以引入Civil 3D的Dynamo。他拥有博客Punto Revit。

Safi Hage是一名结构工程师。自 2014 年以来,他是欧特克的指定支持专家,与专注于 AEC 行业的全球企业优先客户合作。在加入高级支持组织之前,他曾担任欧特克 BIM 技术顾问 6 年。

想要更多?下载完整的课程讲义以继续阅读。


路过

雷人

握手

鲜花

鸡蛋
群   号:715888130

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2025-6-5 13:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部