基于Dynamo可视化编程技术在BIM管线预留孔洞中的应用

2020-10-20 05:22潘杰
砖瓦世界·下半月 2020年2期

潘杰

摘 要:本文主要阐述了Dynamo可视化编程在BIM(建筑信息模型中的应用)。目前,针对快速且准确建模是设计、施工等企业的一个首要需求。随着Dynamo技术的引入,使得工程师能更为便捷地重新设计Revit软件的功能,以便能实现快速且准确建模的目标。

关键词:Dynamo;可视化编程; BIM; Revit; 预留孔洞

一、概述

(一)BIM建筑信息模型

BIM建筑信息模型是现今工程行业中的一个热点话题,《GB/T51212-2016建筑信息模型应用统一标准》对BIM的定义是[1]:在建设工程及设施全生命期内,对其物理和功能特性进行数字化表达,并依此设计、施工、运营的过程和结果的总称。

从BIM的定义中不难看出,BIM最重要的特征是数字化,这也是与传统CAD最明显的区别之一。这里的数字化,指的是模型应该包含数据信息,且这些数据信息在模型的不同阶段,会被继承和迭代更新,以此来支撑项目的设计、施工和运营。

由Autodesk公司出品的Revit系列软件是当下最广为人知的BIM建模软件之一,本文中的BIM管道模型,指的是用Revit软件创建的管道模型。后文中涉及到模型图元的概念、属性等都是基于Revit语境下产生的。

(二)Dynamo可视化编程

BIM引领建筑行业的变革,Dynamo便是那火车头[2]。自从2015年Dynamo横空出世后,便受到了业内的广泛关注,现在已成为BIM技术中的关键力量之一。

Dynamo产品的设计初衷就是为了简化开发过程。以往软件的二次开发(API)的缺点是高度复杂,周期长,灵活度不够,但是Dynamo的问世,提供了另一种软件开发的思路,通过组织连接节点,形成一个可视化的,可执行的程序,它使得软件开发变得不再高深莫测。

1、节点

节点是核心,每一个节点有各自的功能。节点有三部分构成:

(1)节点名称:描述的是该节点的基本功能,节点名称是可以自定义的。

(2)输入项:传入的参数,例如节点Point.ByCoodinates中,需要传入x/y/z三个数值。

(3)输出项:传出的参数,例如节点Point.ByCoodinates中,传出一个坐标。

由此不难看出,节点Point.ByCoodinates的功能是:传入三个数值,传出一个坐标。

2、节点连接

节点与节点之间是通过导线连接,从而形成逻辑关系。节点意味着功能,导线连接意味着逻辑关系,两者结合,构成一个完整的程序。

二、Dynamo管道预留孔洞的实现过程

(一)需求背景

机电管道综合协调是BIM设计、施工中的一个重要环节。管道协调的过程中,必然会涉及到预留孔洞的问题。在实际项目中,机电管道的模型往往是较为复杂的,管道布置纵横交错,这在一定程度上增加了管道协调的难度。

具体到预留孔洞问题,笔者总结了目前Revit使用上的两方面痛点。第一,Revit自带的开孔功能,需要人工绘制轮廓或者人工插入孔洞模型,在面对大批量的预留孔洞问题时,人工操作将会大大地降低工作效率。

第二个痛点是Revit开孔和放置套管模型是彼此分开的步骤,这意味着必须在结束开孔任务后,才能进行后续布置套管模型的任务。如果在开孔操作结束的同时,在相应位置自动生成套管模型,那么必定会显著地提高工作效率!

(二)核心思路

Dynamo可视化编程实现管道快速开孔及生成套管,大致可以分为以下三个过程:

1、读取模型数据

具体来说,首先需要读取管道的通径尺寸和外径尺寸。其次,需要读取楼板或者墙体等模型的结构厚度尺寸,以保证后续孔洞模型最终能完全贯穿楼板或者墙体。

2、求得管道与楼板、墙体等干涉位置

给定模型插入点的坐标,是放置孔洞模型和套管模型的一个必要条件。因此,需要求得管道的中心线与楼板或墙体表面发生干涉的位置坐标,此坐標即是孔洞模型和套管模型的插入点坐标。

3、生成套管模型及开孔

生成套管模型,并且需要对其尺寸参数进行赋值。根据上述两个过程,已经获取了楼板或墙体的结构厚度,即可以确定出套管模型的深度尺寸。对于套管的内外径尺寸,可以根据管道的外径尺寸来确定。最后,需要在楼板或墙体上实现开孔。

(三)Dynamo实现方法

1、选择模型

Dynamo有两种常用节点可以实现拾取Revit系统中的模型,分别是:SelectModelElement和SelectModelElements。两者的区别在于,前者只能选取单个模型,后者能批量选取多个模型。本文中,SelectModelElements更符合实际需要。

2、读取模型属性

首先,需要明确Revit属性是分成两类:实例属性与类型属性。Dynamo读取这两类属性所用的方法是不同的。

实例属性只能影响单个模型图元。例如,套管的标高属性,显然,每个单独套管模型,可以有各自不同的标高,修改一个套管模型的标高,不会影响到其他套管的标高。Dynamo读取Revit的实例属性,需要用到两个核心节点:Parameter.ParameterByName和Parameter.Value。

管道的通径尺寸、外径尺寸皆属于实例参数范畴,因此用上述两个节点即可读取参数。

类型属性与实例属性不同,类型属性是同一类型图元所共有的属性。例如,同一种类型的套管模型,其材质属性即为类型属性。更改任意一个套管的材质,其他同类别套管的材质会同步更改。Dynamo读取Revit的类型属性,需要多用两个节点:Family.ByName,Family.Types。

3、求得管道模型与楼板、墙体干涉的坐标

第一步,得到管道与楼板、墙体表面相交的几何图形。需要用到Dynamo的节点是Geometry.IntersectAll。它有两个输入项,分别为几何图形(geometry)和实体(solids),输出项为几何图形(geometry)。

第二步,将相交的几何图形(geometry)转换为轮廓线,進而求得轮廓线的中心坐标。在此用到的节点是Curve.StartPoint,该节点的输入项是轮廓(Curve),输出项为坐标(Point)。

4、生成模型的方法

本文中套管模型是族模型,这里重点探讨Dynamo生成族模型的方法。

第一步,在Revit中插入族,使用FamilyInstance.ByFace节点。该节点有四个输入项:

(1)族类型(Familytype)是套管的族类型;(2)放置平面(Face)是楼板或者墙体的表面;(3)放置点(Location)是管道截面与楼板表面或墙体表面相交的几何图形的中心坐标(Point);(4)参考向量(Referencedirection),在本文中,套管模型的放置方向应与楼板或墙体的平面垂直,通过两点坐标可确定方向向量。

第二步,族模型的属性赋值,使用Element.SetParameterByName节点。这里,根据管道模型的尺寸,自动对套管模型进行属性赋值。

第三步,在楼板或墙体上开孔。这里用到Dynamo中一个特殊节点:Python节点,它是通过代码来实现更为复杂的操作,这极大地丰富了Dynamo的适用性。笔者调用AddInstanceVoidCut方法,实现楼板或墙体开洞的功能。

以上是Dynamo管道预留孔洞实现的主要过程。在本次开发中,还有一些其他的功能,例如,用户可以决定是否需要在开孔的同时生成套管模型,由于受篇幅限制的影响,不做展开。三维测试的效果图以及源代码见下图。

三、结语

对于BIM管道模型预留孔洞,笔者尝试使用了Dynamo编程手段对其进行开发。相比于传统的软件API开发,Dynamo具有的最大特点是可视化,可视化指的是程序逻辑的可视,用户只需理清逻辑关系,找到合适的节点,就能实现开发目标。

Dynamo拥有丰富的节点库,涵盖了软件开发的基础功能。此外,它还支持使用Python语言来自定义节点,以此实现复杂功能。Dynamo的缺点是程序运行的速度较慢,尤其是在执行复杂程序的情况下,会出现严重卡顿的现象。笔者认为,Dynamo更适合用于小型轻量化的开发。

参考文献:

[1]GB/T51212-2016,建筑信息模型应用统一标准[s].北京:中国建筑工业出版社,2016.

[2]罗嘉祥,宋珊,田宏钧.AutodeskRevit炼金术-Dynamo基础实战教程[M].上海:同济大学出版社,2017.