基于Dynamo 的族构件精准放置建模方法研究
2023-09-12王茹珍王庆国
王茹珍 王庆国
(武汉科技大学 汽车与交通工程学院,武汉430081)
引言
路桥BIM 是构建智慧交通的基础[1],高效率、智能化的路桥BIM 建模对于长周期、大任务量的生产设计与施工运营管理具有重要意义[2]。因此,探索一种路桥BIM 高效建模方法成为路桥工程领域数字化建设的研究热点[3]。
目前,根据标高与轴网进行定位放置常规族构件的传统路桥BIM 建模方式(下文简称传统手工建模方法M1)效率低,不具有构建与批量处理形体扭曲度高的复杂族功能,且在缓和曲线段建模过程中存在以直代曲的误差[4,5]。虽然部分学者利用Dynamo 编程技术对手工建模方式进行了改进,将族的放置点里程号进行了标识与分类识别(下文简称奇偶列分类建模方法M2),实现了族构件批量旋转放置建模,但其未考虑路拱坡度,族构件放置精度较低[6,7]。
针对以上问题,本文提出了由数据驱动的新型BIM 智能建模方法(下文简称智能建模方法M3),基于Dynamo 平台进行常规功能节点、DesignScript 代码块与自定义PythonScript 节点端口匹配,实现“族”精确放置程序设计。首先,通过DesignScript 代码块与常规功能节点结合进行数据读取,利用PythonScript 节点调用Revit.API 第三方库,将公用函数封装成函数节点进行参照点坐标系修正。然后通过PythonScript 节点遍历中心线里程列表,依次调整族的放置参照点,从而使族构件实现批量精确定位放置。
1 基于Dynamo 高精度定位的自适应族放置程序设计
本文基于自适应嵌套族的放置程序设计主要分为三个阶段:
(1)基于常规功能节点与代码块串接的路桥中心线数据源处理程序设计;
(2)基于常规功能节点与代码块串接的自适应嵌套族数据源处理程序设计;
(3)基于自定义Python Script 节点的嵌套族参照点坐标系修正程序设计。
1.1 路桥中心线数据源处理程序设计
路桥中心线数据源的创建及数据读取和处理程序是开展自动化离散放置族构件的BIM 设计工作基础[8,9]。
以Dynamo 为设计平台,利用File.Path 节点获取桥梁中心线桩号的数据源文件存储路径,并将文件路径作为参数传入Files.FromPath 节点,该节点通过文件路径获取并传出文件对象。利用Data.ImportExcel 节点获取文件对象逐桩坐标表中的坐标信息和对应桩号的高程信息,将其传入List.Deconstruct 节点,同时生成含每列数据字段名的第一项列表和含有设计数据的其余项列表两部分。
含有设计数据的列表通过List.Transpose 节点实现列表行列互换(设计数据转置为按列分类的数据列表),空值占位保证列表转化前后始终为矩形形态,避免后续节点读取数据失败而报错。由Code Block 节点根据占位符参数读取相应数据列表,由Point.By Coordinates节点读取x、y、z 参数相对应的笛卡尔坐标数据列表,并通过笛卡尔坐标系形成点规范表数据,按照桩号生成一系列路线中线点数据。
利用PolyCurve.Bypoints 节点将含有点数据列表的道路中线点拟合为多段线,再利用Curve.PointsAtEqualChordLength 节点等间距分割,并通过List.NormalizeDepth 节点实现起始与终点坐标整合,将其传入NurbsCurve.ByPoints 节点进行折线点间插值,最终在Revit 界面生成具有均匀局部坐标系的相对光滑桥梁中心线。
基于Dynamo 编程节点的中心线桩号数据处理程序如图1 所示。
图1 道路数据处理程序图
1.2 自适应嵌套族参数处理程序设计
在确定族构件沿路桥中心线放置的里程数据源后,还需分析路桥上部结构、下部结构和附属结构的族类型建造方式,确定其与路桥中心线正向沿线方向的旋转角度和距离参数,进行族类型参数数据源的读取与处理程序设计。
利用Files.fromPath 节点调取族类型设计数据,Data.ImportExcel 节点读取外部Excel 文件中处理完成的设计数据[10]。通过List.Deconstruct 节点生成含每列数据字段名的第一项列表和含有设计数据的其余项列表两部分。将含数据字段名的列表传入List.TakeItems节点,使Code Block 节点值为负一,读取倒数第一列编码数据字段名,随后将编码数据字段名通过String from Object 节点转化为字符串格式,作为参数名称传入Element.SetParameterByName 节点的ParameterName接口,从含有设计数据的其余项列表中读取编码数据,作为参数值传入Element.SetParameterByName 节点的Value 接口。
利用Code Block 节点读取经转置的设计数据其余项列表中起始桩号、里程号、族类型名称和族类型旋转角度,并设计里程号减去起始桩号的值为python 节点预放置的族实例距离起点的距离参数。
基于Dynamo 编程节点的族类型数据源处理程序如图2 所示。
图2 族类型数据处理程序图
1.3 自适应嵌套族局部坐标系旋转修正程序设计
根据族类型沿线放置里程及其与中心线正向沿线的旋转角度和距离参数进行排布放置的族构件精度较低[11,12]。本文在Dynamo 平台中进行python script 节点的自定义,批量计算每一里程桩号的局部坐标,使自适应族根据参照点局部坐标进行精确定位并放置。
旋转定位放置方法流程如图3所示,设计步骤如下:
图3 旋转定位放置方法流程图
(1)通过相邻旋转轴正方向一点(非原点)与原点坐标值之差判定族类型旋转方向,差值为正,则为顺时针方向,差值为负,则为逆时针方向;
(2)利用放置点处的平面坐标方位角、纵向倾角及其在对应局部坐标系与世界坐标系轴向量上投影的夹角,进行曲线方向方位角计算;
(3)通过族类型的ID 标识,将族实例绕世界坐标系对应轴进行自适应参照点旋转。
通过以上步骤,能够使自适应参数族在线性空间上通过捕捉自适应点坐标系实现自由旋转,从而根据道路中心线完成自动化布置任务。鉴于程序具有继承性、可移植性与稳定性等特性,对此算法进行封装处理。封装该节点时将输入接口设定为缓和曲线、族类型名称列表、族类型旋转角度列表、绕X 轴旋转布尔值和绕Y 轴旋转布尔值等参数,然后添加调整族参数,即输出接口设置为构件,并通过Element.SetParameterByName 将类型编码参数自动批量化添加至族类型属性信息。封装后的节点程序设计对比传统根据奇偶列分类标识放置族构件的Dynamo 程序解决了代码块冗余、族构件定位放置精度低等问题,传统奇偶列分类建模方法M2 的程序设计如图4 所示,本文所提智能建模方法M3 的旋转定位放置程序设计如图5 所示。
图4 基于奇偶列分类放置族的程序设计图
图5 旋转定位放置方法程序设计图
2 实验验证与分析
为验证所提智能建模方法M3 的建模放置精度与程序运行时间效率提升效果,本文以某桥附属结构BIM中路灯及护栏的参数化自适应嵌套族构建与放置为例,运用传统手工建模方法M1、奇偶列分类建模方法M2和智能建模方法M3 进行对比实验。程序运行硬件环境:CPU 为AMD R7-5800H;主频:3.20GHz;内存:16GB;运行软件:Revit2020_Dynamo2.5.0。
2.1 参数化自适应嵌套族的构建
本文在传统“公制常规模型”基础上,借助“自适应公制常规模型”模板创建桥梁附属结构路灯、护栏的嵌套族。即新建自适应公制常规模型样板项目,设置自适应参照点。基于连接空间中参考点放置线的设计方法,通过调整自适应参照点工作平面,对放置位置进行合理改变。鉴于实例坐标系自适应点的坐标不贴合体量环境的坐标系和贴合放置点处的坐标系,而是保持自适点自身的XYZ 轴方向不变,因此将常规族路灯、常规族护栏载入自适应常规族项目中,设定参照点1 为坐标系原点,使其自适应并定向为实例坐标系(xyz),添加材质,设定放置点为自适应点从而形成路灯、护栏嵌套族,分别如图6 ~图7 所示。由于自适应嵌套族的建模核心是参数的设计和绑定,参数设定的主要目的是通过调控相应参数,高效驱动族类型其位置、数量、空间尺寸等属性信息的改变,使模型有唯一对应解的过程[13,14]。因此本文采用连接空间中自适应参考点,将放置线参照对齐锁定,进行详图族中相关参数与构件参数关联交互,自适应路灯、护栏嵌套族参数关联图分别如图8 ~图9 所示。
图6 路灯嵌套族
图7 护栏嵌套族
图8 路灯参数关联图
图9 护栏参数关联图
2.2 由数据驱动的中心线生成
在初始数据读取与处理模块,本文设计的可视化节点程序采用控制点(路灯/护栏放置对应的中心线点)生成要素线,桥梁中心线确定桥梁走向的建模思路。首先对族的几何、位置等信息的逻辑关系及算法结构进行分析,创建了含有嵌套族的族名称、起始桩号、里程号、及偏转角度等关键信息的Excel 表格,自适应嵌套族路灯和护栏的部分族数据源创建分别如表1~表2 所示。其次通过某桥梁工程项目建筑平面施工图中的道路中心线桩号里程信息和高程信息,提取出控制点的x、z坐标值,然后通过对嵌套族的关联参数进行分析。由于本项目中嵌套族路灯放置点高程参数h1 为0.8m,放置点距中心线水平距离参数l 为9m,即自适应族放置点沿y 方向偏移x 轴规范距离9m,因此不需要读取参数L,即桥梁中心线南北方向偏移值默认取0,控制点y 坐标值为0;嵌套族护栏放置点高程参数h1 为0m,放置点距中心线水平距离参数l 为0m,即自适应族放置点沿y 方向偏移x 轴规范距离0m,因此需要读取参数L,即桥梁中心线南北方向偏移值默认取8.25m,控制点y 坐标值为0。创建桥梁中心线坐标表如表3 所示。
表1 路灯族数据表
表2 护栏族数据表
表3 桥梁中心线坐标表
通过桥梁中心线和自适应路灯、护栏嵌套族参数处理程序读取起始里程桩号、相邻族类型需放置的里程桩号、族类型名称及相对于道路中心线里程号增大方向的旋转角度,生成放置中心线效果分别如图10(a)~(b)所示。
图10 自适应嵌套族模型
2.3 基于旋转放置方法放置族类型
由于桥梁中心线与参数化自适应嵌套族路灯及护栏数据处理结果实现了X、Y 定位值准确,因此高精度定位调整仅需嵌套族绕Z 轴进行旋转放置。在自适应嵌套族参数处理程序设计中将绕X 轴旋转布尔值和绕Y 轴旋转布尔值调整为False;调用批量创建空间模型的Revit.API,运行程序使自适应族中的自适应点按照旋转放置算法逻辑与Dynamo 程序调整的Z 坐标一一映射,完成Dynamo 工作空间与Revit 指定图层的模型输出。因此由智能建模方法M3 驱动的路灯嵌套族和护栏嵌套族在Revit 工作空间中的局部自动化放置效果分别如图11(a)~(b)所示,所测试族构件均精确放置到定位点。
图11 基于M3 方法的放置图
2.4 实验分析与结论
传统手工建模M1 方法输出至Revit 内的部分路灯族和护栏族效果分别如图12(a)~(b)所示,由于传统手工建模不可避免会出现视觉偏差,从而导致三维建模精确度不足,因此由自适应嵌套族旋转放置程序设计的M3 方法,在一定程度上能够避免人工放置误差,提高建模精度。
图12 基于M1 方法的族放置图
为对比本文所提智能建模方法M2 与奇偶列分类建模方法M3 的程序设计时间,取10 次Dynamo 中Tune UP 节点所测的不同规模族构件放置程序运行所耗时间平均值作为主要评价指标,程序运行所耗平均时间的具体数值如表4 所示。可见相对于利用传统Dynamo程序实现奇偶列分类放置族构件的M2 方法,智能建模方法M3 的建模程序平均运行时间减少约60%;就不同BIM 建模方式的阶段性建模效率对比,智能建模方法M3 相对于人工建模方法M1 和利用传统Dynamo程序实现奇偶列分类放置族构件的M2 方法,其数据源构建与程序设计的高效性也使其在建模工作总进程中具备一定优势,如图13 所示。
表4 M2 与M3 程序运行时间数据表
图13 各阶段建模消耗时长对比图
3 结束语
针对大型复杂项目,利用自适应嵌套族的精准定位放置程序进行BIM 建模,可根据路桥中心线坐标表将构件自动放置,建模效率提高数倍以上。
本文采用以世界坐标系为基准旋转放置参照点局部坐标系的精准定位算法,借助于Python 语言在Dynamo 平台上完成了自适应常规模型嵌套族在Revit三维空间内的自动化批量精准放置,实现了以下三个方面的要求:
(1)建模技术路线方面,统一梳理了对于具有参数化,族类型的复杂工程建模过程中的数据处理逻辑;
(2)BIM 模型精度方面,通过数据驱动实现族构件自动化批量放置,保证了模型精度,解决了复杂线性工程的建模难点;
(3)建模效率方面,利用Python Script 自制节点,实现模型的参数快速更新,有效减少人机交互,提高同类型模型修改重建的效率。