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

第一部分: 概述

1.1 BIM建筑信息模型

BIM是在建设工程及设施全生命期内,对其物理和功能特性进行数字化表达,并依此设计、施工、运营的过程和结果的总称,这些数据信息在模型的不同阶段,会被继承和迭代更新,以此来支撑项目的设计、施工和运营。

1.2 Dynamo可视化编程

自从2015年Dynamo横空出世后,便受到了业内的广泛关注,现在已成为BIM技术中的关键力量之一。Dynamo产品的设计初衷就是为了简化开发过程。以往软件的二次开发(API)的缺点是高度复杂,周期长,灵活度不够,但是Dynamo的问世,提供了另一种软件开发的思路,通过组织连接节点,形成一个可视化的,可执行的程序,它使得软件开发变得不再高深莫测。

1、节点是核心,每一个节点有各自的功能。节点有三部分构成:a)节点名称;b)输入项;c)输出项。

节点

2、节点与节点通过导线连接,从而形成逻辑关系。一个节点的输出项,通过导线连接,成为下一个节点的输入项。

节点的连接

第二部分:Dynamo管道预留孔洞的实现过程

2.1 需求背景

目前,Revit自带的开孔功能,需要人工绘制轮廓或者人工插入孔洞模型,在面对大批量的预留孔洞问题时,人工操作将会大大地降低工作效率。第二个痛点是Revit开孔和放置套管模型是彼此分开的步骤,这意味着必须在结束开孔任务后,才能进行后续布置套管模型的任务。如果在开孔操作的同时,在相应位置自动生成套管模型,那么必定会显著地提高工作效率!

2.2 开发思路

Dynamo可视化编程实现管道快速开孔及生成套管,大致可以分为三个过程:读取模型数据;求得管道与楼板、墙体等干涉的位置;生成孔洞模型以及套管模型。

1、读取模型数据

首先需要读取管道的通径和外径尺寸。要实现批量处理预留孔洞问题,因此,管道的尺寸数据应该是以数据集合(数组)的方式进行储存,在Dynamo中即是List(列表)形式储存。其次,需要读取楼板或者墙体等模型的结构厚度尺寸,以确定孔洞的深度。

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

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

3、生成孔洞模型以及套管模型

生成孔洞模型以及套管模型,并且定义其尺寸参数。

2.3 Dynamo实现方法

1、获取模型

Dynamo有两种常用节点可以实现拾取Revit软件中的模型,分别是:Select Model Element和Select Model Elements。两者的区别是前者只能拾取单个模型,后者可以批量框选模型。在本案例中,需要批量拾取管道模型,显然后者Select Model Elements更符合需求。

选择模型

2、读取模型属性

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

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

实例属性

读取示实例属性值

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

读取管道通径及外径实例属性

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

读取类型属性

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

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

管道与楼板(或墙体)求相交图形

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

求得相交轮廓的中心坐标

4、生成孔洞模型以及套管模型

在Revit项目中插入族模型,使用FamilyInstance.ByFace节点。该节点有四个输入项:a)族类型(Family type), b)放置平面(Face),c)放置点(Location), d)参考向量(Reference direction)。输出项即为族实例(Family instance)。

放置套管族

族模型的属性赋值,使用Element.SetParameterByName节点。该节点有三个输入项:a)图元(Element), b)属性名(Parameter name),c)值(Value)。族实例(Family instance)可以直接转换为图元(Element)。

设置套管属性

将孔洞模型与楼板或墙体模型做剪切操作。用到Dynamo中一个特殊节点:Python节点,它是通过代码来实现更为复杂的操作,这极大地丰富了Dynamo的适用性。开孔需要调用AddInstanceVoidCut方法,实现孔洞模型与楼板或墙体模型的剪切。

孔洞与楼板或墙体剪切

第三部分:总结

Dynamo具有的最大特点是可视化,可视化指的是程序逻辑的可视,用户只需理清逻辑关系,找到合适的节点,就能实现开发目标。

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

效果图

Dynamo程序流程


近期推荐

Dynamo程序设计

又一重磅BIM标准开始实施!深圳市的 BIM发展走在前列

全网稀缺:Revit工艺设备干燥机族库(一)|附免费获取

举报
评论 0