郑跃群,王传林,关嘉琪,崔 飞
(1.汕头大学工学院土木与环境工程系,广东 汕头 515063;2.广东科艺普实验室设备研制有限公司,广东 佛山 528100)
聚合酶链式反应实验(PCR)实验室是对病毒进行PCR 实验的特殊生化场所,在近年来人类与新型冠状病毒的战役中发挥了举足轻重的作用.相较于其他工程项目,国内PCR 实验室建设项目的设计目前主要还是基于CAD 软件进行二维设计,这种工作效率低下的设计模式不利于应对日渐复杂的全球生化环境.
建筑信息模型技术(BIM)作为土木工程行业的重要工具,可以通过数字化的正向设计,实现项目各阶段信息的集成与共享,从而提高设计、施工和运营效率[1-2].然而,现有的BIM 核心软件Revit 在工程实际上还存在部分功能不够健全、在特殊项目上缺乏针对性等缺点.因此,广大学者针对具体功能要求的特点,通过二次开发等途径对Revit软件功能进行了不同程度优化与拓展.为解决一线土木行业从业者在Revit 二次开发上的信息差问题,宋强[3]对Revit API 二次开发工作中常见的基础代码类型,如族类型的访问、获取、编辑、创建等进行了提炼总结,为国内二次开发工作提供基础参考.在自动化建模方面,为解决Revit 软件在装饰方面不够自动化的弊端,欧阳春生等[4]通过对Revit进行二次开发,实现在已有建筑模型中自动识别房间边界并通过边界自动创建装饰模型.在参数化建模方面,为节省结构工程师在建模方面的时间与精力,薛忠华[5]提出通过对Revit 进行二次开发实现空间网格参数化建模的解决方案.在装配式构件设计方面,黄岩等[6]通过对Revit 软件进行二次开发,扩充了构件库内关于装配式构件的内容,减少了装配式构件设计的繁琐步骤,提高了装配式项目设计效率.Liu[7]以装配式地铁项目为例,通过二次开发改进了协同设计的功能,通过自动信息访问,提高了装配式项目设计效率.
在PCR 实验室项目的应用上,BIM 技术可以显著提高项目设计效率和质量,以提高PCR 实验室建设能力.然而,目前在PCR 实验室建设项目领域,BIM 技术尚未得到具有针对性的深入应用.在工程实际中,PCR 实验室设计工作中具有大量专业特殊性与流程重复性的设计要求与设计步骤[8].这些繁琐的设计要求与步骤使一线设计人员在提高出错率的同时也降低了工作效率.因此,本文拟利用C#面向对象语言基于Revit 软件进行二次开发研究,以某疾控中心PCR 实验室建设项目为例,提出一种针对PCR 实验室项目中墙体与地板两大经典构件进行参数化建模的解决方案.
Revit 是Autodesk 公司在BIM 领域推出的核心工具软件,因其具有功能强大且操作简单的优点已被广泛应用于各种工程设计工作中.但对于PCR 实验室建设项目而言,Revit 软件明显存在着以下两个方面不足:1)原构件库中不存在符合PCR 实验室设计要求的构件类型;2)对于常见构件的实例化无法通过与用户交互进行直接的一键参数化建模.
为解决上述两个问题,本研究拟基于一线设计工作中应用最广的2018 版Revit 进行二次开发研究,针对PCR 实验室构件特点在Revit UI 界面进行RibbonTab 功能区扩充,通过创建新的RibbonPanel 与PushButton 等控件,丰富预设构件类型;并在此基础上完成构件参数传递,实现构件模型的一键参数成模.通过执行本研究插件,最终可实现Revit 2018 UI 界面升级效果,如图1 所示.
图1 UI 界面升级效果
在Revit 软件中,每一个可以被选择和修改的对象都被称为元素,如墙体、门窗等构件.每个Revit 元素都有与之关联的属性和参数,这些属性和参数决定了元素的外观、位置和性能[9].Revit 软件提供了一系列应用程序接口(API)供用户对Revit 元素信息进行访问与修改,从而实现自定义功能扩展与软件优化[10].基于此原理,本研究工作将使用具有简洁、高效等优点的C#面向对象程序语言,在微软公司的Visual Studio 编程平台上,针对PCR 实验室项目建筑构件特点进行Revit 二次开发工作,并最终生成目标解决方案文件.Revit 软件通过加载解决方案文件,便可进行文档信息的访问以及功能的更新升级[11].
本研究对Revit 进行二次开发的技术路线如图2 所示.根据操作内容不同,技术路线中具体实现步骤可分四个步骤:1)创建.Net 类库项目;2)添加官方引用;3)编写核心代码;4)注册加载插件. 在添加官方引用的步骤中,添加引用的Revit 官方程序集RevitAPI.dll 与RevitAPIUI.dll 对Revit 软件功能丰富以及文档信息修改起到了至关重要的作用.其中,RevitAPI.dll 提供Revit 核心功能支持,RevitAPIUI.dll 则提供用户交互界面支持,二者缺一不可. 编写核心代码的步骤是Revit 二次开发中最主要的工作内容,该部分内容将在第2 节实验室构件参数化设计研究中详细阐述.
图2 Revit 二次开发技术路线
在Revit 二次开发工作中,一个最终文件称之为解决方案,其一般由多个程序集组成,不同程序集负责不同的功能执行.根据功能任务分类,在本研究中的程序集可以分为前端与后端两种类型,其中前端程序集负责与用户在界面上进行参数交互等功能,后端程序集负责在文档内进行信息访问与修改等功能.
本研究的解决方案内部程序集之间的调用逻辑如图3 所示.以墙体构件为例,UI.cs程序集负责在Revit 软件的界面上拓展RibbonTab 以及RibbonPanel、PushButton 等控件;MaterialsCreator.cs 程序集负责生成Revit 原有材质库内不存在的特殊材质,如彩钢板中的玻镁夹心等;WallProgram.cs 程序集负责实例化WallWindow.xaml 程序集从而打开WPF 窗口供用户进行建模参数交互;最终WPF 窗口将建模参数返回至CreateWall.cs程序集中,由CreateWall.cs 进行墙构件类型的实例化与放置.同理,楼板构件类型的逻辑也按此顺序调用.
图3 内部程序集调用逻辑
2.1.1 PCR 实验室常用材质
PCR 实验室由于其专业特殊性,对于建筑构件有着严格的材质要求,例如要求室内墙体内壁光洁,不吸附且易清洁;地板整体平整,无渗漏且不光滑[12].为满足以上专业需要,工程实际中隔墙材质一般采用玻镁夹心彩钢板、地板材质一般采用PVC 塑胶.然而,以上特殊构件类型的材质在Revit 原始材质库里并不存在,因此有必要通过二次开发工作,人为对Revit 材质库进行丰富.例如,在彩钢板墙类型中,彩钢板与夹芯玻镁这两种材质都需要特别预设.同时,彩钢板与PVC 的材质颜色由于工程实际中的款式运用较为灵活,在颜色设置上需要根据设计需求进行实时参数化设置.
2.1.2 在Revit API 中生成材质
在Revit 材质板块的研究工作中,解决方案里MaterialsCreator 程序集负责材质生成的功能实现,其通过继承API 中基础数据DataBase(DB)级别的Materials 类对当前文档的材质元素进行访问操作. 在Revit API 中,Materials 类代表Revit 项目中的材质元素.通过继承Materials 类进行编程,二次开发人员可以对Revit 当前文档的材质元素进行访问、创建、修改等相关操作.
在本解决方案中,MaterialCreator 程序集主要由Execute、CreateMaterial、FindMaterialsByName 三类函数组成,其主要功能由表1 所示. CreateMaterial 函数又根据彩钢板、玻镁夹心、PVC 三种自定义材质中材质的不同,具体分为CreateMaterial1、CreateMaterial2、CreateMaterial3 这3 个函数.这3 个CreateMaterial 函数各自独立,最后由Execute 函数统一进行实例化进行材质生成.其中,以创建彩钢板这一新材质为例的CreateMaterial1 函数如图4 所示.
表1 程序集MaterialsCreator 中各函数与功能
图4 在Revit API 中实现彩钢板新材质创建的CreateMaterial1 函数
基于以上函数之间的调用运行,MaterialsCreator 程序集可实现Revit 软件的材质文档内对于PVC、彩钢板、玻镁夹心等PCR 实验室常用材质的补充,为后续二次开发工作中PCR 实验室构件建模的实现做好准备.
2.2.1 PCR 实验室墙构件特点
根据相关规范,PCR 实验室等生物化学学科实验室的室内建筑构件在洁净与防火等方面要求会远高于其他普通建筑.以PCR 实验室项目为例,室内墙体构件要求具有防火性能好、表面光洁不易吸附、易消毒清洁等特性[12].为满足相关要求,工程实际中通常使用彩钢板或者铝合金材质的隔墙对不同工作区进行隔断.
基于此,本研究将针对设计工作中普遍利用的玻镁夹心彩钢板隔墙等墙类型进行参数化建模开发研究.
2.2.2 RevitAPI 墙构件参数化建模实现
在PCR 实验室墙体构件的二次开发研究中,将按照不同种类的墙类型编写不同独立的程序集,每个程序集负责生成一种预定义的墙类型供用户在Revit Ribbon UI 界面上进行选择.实现墙类型构件参数化建模的程序集代码逻辑与关键步骤如图5 所示.
图5 墙构件程序集代码逻辑与关键步骤
为进行系统性介绍,研究将以混凝土彩钢板内墙类型的实现为例进行研究分析.
首先,代码将对彩钢板这一新材质进行获取或创建.通过材质名称检索的形式,在Revit 当前的文档内使用foreach 循环对Revit 材质库进行检索筛选.若Revit 当前的文档内已经存在彩钢板材质,则直接进行调用;若Revit 当前文档内不存在彩钢板材质,则需对其进行创建生成.通过调用外部程序集MaterialCreator 中的CreateMaterial1 函数可实现对彩钢板材质生成.对于混凝土材质可直接使用FilteredElementCollector 在Revit 文档内进行访问获取.
然后,代码将在Revit 内创建新的墙类型.对于新墙类型的创建,由于Revit 无法直接生成墙类型元素,因此代码需对当前Revit 文档内默认的墙类型进行复制并创建的操作,从而间接地创建出一个新的墙类型.
接着,代码将对新墙构件类型的Compound Structure Layer 结构层进行修改. 在Revit API 中,Compound Structure Layer 是指由多个不同材料和厚度组成的墙、楼板、屋顶等构件的层结构.Compound Structure Layer 可以由不同的材料组成,如混凝土、砖块等.通过使用API,用户可以直接访问并修改复合结构层的厚度、材质类型、密度等各种属性.在彩钢板隔墙类型例子中,Compound Structure Layer 结构层代码与Revit 软件内墙构件属性信息的映射关系如图6 所示.
图6 API 结构层代码与Revit 软件墙构件信息的映射关系
在Compound Structure Layer 结构层中,材质层厚度(width)以及材质颜色(RGB)是程序代码的重点参数.其中,width 是指当前材质结构层的厚度,其数据格式为double双精度浮点数,用户通过设置width 数值可以改变材质结构层厚度.RGB 是国际工业界颜色标准格式之一,其通过调节红绿蓝三色代码(Red,Green,Blue)达到各种颜色的显示[13].在Revit 中,材质颜色属性也由RGB 格式进行设置.在插件中,用户可通过Revit 软件内设置即时弹出WPF 对话窗口进行参数输入,从而实现Compound Structure Layer 结构层的width 以及RGB 参数交互.Revit 内WPF 参数交互窗口设计效果如图7 所示.
图7 Revit 内WPF 参数交互窗口设计效果
为将用户在WPF 弹出窗口上输入的width、RGB 这两种参数接收到Compound Structure Layer 结构层对应的位置中,需要将参数定义为属性数据类型.通过使用C#代码中{get;set;}属性这一数据类型,可以将WPF 窗体上的width、RGB 参数赋值到结构层的代码上,从而实现Revit API 内墙体中不同Compound Structure Layer 结构层的参数化建模.
基于以上建模代码,可生成彩钢板隔墙构件结构层效果如图8 所示.
图8 彩钢板隔墙构件结构层效果
最后,代码将实现新墙类型默认放置方式.在Revit API 官方参考指南与以往其他Revit 墙构件的二次开发案例中,墙实例生成通常只能依托于三维坐标点(X,Y,Z)进行连线后放置.这种基于三维坐标点进行连线的墙实例生成方式,在实际设计工作中局限性较大,难以真正达到通过Revit 二次开发实现操作简便,工作高效的研究目的.为解决这种困难,本程序集的代码另辟蹊径,通过使用SetDefaultElementTypeId 函数将彩钢板隔墙设置为默认墙体类型,接着使用PostCommand 函数实现默认建筑墙类型放置,从而间接地使新墙类型实现鼠标跟随式放置.对于Revit API 新墙构件放置,官方代码与升级代码两种代码对比如图9 所示.
图9 关于Revit API 新墙类型官方代码与升级代码对比
对墙体放置代码的升级后,代码在内容上更为简洁,由于不存在水平坐标、标高、偏移等过多的变量而不易导致出错;从功能上看,可使Revit API 预设墙体具有与Revit UI界面默认墙体一致的跟随鼠标放置效果,实现真正意义上的便捷式参数化建模.
2.3.1 PCR 实验室地板构件特点
根据相关规范,PCR 实验室地板构件要求具备无缝隙、无渗漏、耐腐蚀等特点[11].相较于墙构件,PCR 实验室地板构件的选择相对单一,在工程实际中,通常将PVC 材质运用于地板构件表面上.作为一种新型轻质地面装饰材料,PVC 地板在结构上一般由耐磨层、印花膜层以及玻璃纤维层组成,其易清洁抗腐蚀的特性能够满足许多特殊场所的规范要求,因而被广泛运用于各种生化医疗专业场所中.
在PCR 实验室地板构件的应用上,PVC 地板结构较为简单,主要工艺为在混凝土上铺装一层PVC 塑胶板.基于此,本研究将以PVC 地板为例,对PCR 实验室地板构件进行参数化建模开发研究.
2.3.2 Revit API 地板构件参数化建模实现
在Revit API 中,地板构件与墙体构件的参数化建模实现方法基本一致,在代码思路上,两者都是通过获取或创建特殊材质、创建新构件类型和放置构件实例这三个步骤完成功能实现;在代码内容上,两者所调用的函数有其相似之处,如获取材质的FilteredElementCollector、结构层GetCompoundStructure 以及WPF 窗体交互等等. 由于篇幅限制原因,此处将不过多展开两者相似的概念与操作流程等内容.
在创建地板构件类型的步骤中,相较于墙体构件,地板构件对复合结构层信息进行访问操作时,除了设置材质厚度width 与材质颜色RGB 这两个参数与用户进行UI 交互,还需将EndCapCondition 端部条件设置为NoEndCap 无端部条件,从而使构件模型不受任何额外的材料或组件封装其端部.如果不对地板构件的端部条件设置为无端部条件,将会影响构件模型的可视化渲染、碰撞检测、几何测量等方面的效果,导致模型信息不准确.综上,地板构件建模代码实现如图10 所示.
图10 地板构件建模代码实现
在实现构件放置的步骤中,不同于墙体构件的跟随鼠标放置,地板构件将通过自动识别房间边界进行地板放置.在Revit 初始化的设置中,地板的放置一般需要自行绘画边界线,在操作上较为繁琐且容易出错.为了解决以上弊端,在本二次开发工作中将采用目前国内外Revit 二次开发案例中较为前沿的自动识别边界放置构件的编程思路,实现通过自动识别房间边界放置地板构件.具体实现步骤为房间元素获取、获取房间元素边界,以边界进行地板放置.地板构件放置代码实现如图11 所示.
图11 地板构件放置代码实现
其中,在房间元素获取的步骤上,由于房间元素较为特殊,属于SpatialElement 空间元素,因此FilteredElementCollector 元素过滤器需要在代码中针对空间元素进行过滤,若像普通元素直接进行筛选将导致过滤结果为空.在地板构件放置的步骤上,代码将通过foreach 循环对所有的房间进行遍历,若房间面积不为0,则使用GetBoundarySegments函数将每个房间的边界进行获取并设置为曲线数组.最终,通过使用Create.NewFloor 地板构件实例化函数,可将房间边界的曲线数组设置为地板边界线、房屋标高设置为地板标高,一键实现地板构件的放置.
某疾控中心PCR 实验室平面图如图12 所示,其室内面积总计154 m2,按功能分区可分为污物通道、中央过道、PCR 实验1 室、PCR 实验2 室共4 个区域,并设专门缓冲室.其中,PCR 实验1 室分为试剂准备室、样品制备室、扩增与分析室、缓冲室3 个工作间,PCR 实验2 室在1 室的基础上将扩增与分析室拆分为两个独立工作间.
图12 某疾控中心PCR 实验室平面图
按业主要求,该PCR 实验室墙构件采用厚度50 mm,颜色RGB 代码为(255,250,240)的花卉白色玻镁夹心彩钢板作为功能区隔墙,北面外墙为厚度200 mm 的轻质混凝土,需要在室内对其进行彩钢板铺装.地板构件采用厚度为10 mm,颜色RGB 代码为(0,139,69)的春绿色PVC 塑胶地板进行铺装.
通过使用加装本研究插件的Revit 对PCR 实验室进行建模研究,可得BIM 建筑模型如图13 所示.针对该PCR 实验室项目建模,可分为以下两个关键步骤:
图13 PCR 实验室建筑模型效果图
(1)墙体构件布置
在Revit 内完成轴网绘制之后,进入墙体构件布置环节.使用插件进行升级后的Revit可直接在“PCR 实验室建筑建模”选项卡下选择“彩钢板隔墙”墙类型进行参数化建模.通过在WPF 弹窗输入厚度50 mm 与RGB 颜色代码(255,250,240)这两个参数,将一键实现花卉色彩钢板的类型生成与实例布置.实现彩钢板隔墙在室内进行功能区隔断布置后,可再次点击“混凝土彩钢板外墙”针对北面混凝土外墙进行布置,此过程不必再进行彩钢板颜色参数交互.
(2)地板构件布置
在完成墙体构件与房间布置后,进入地板构件布置环节.类似于墙体构件的操作,在Revit 功能区选择“PVC 地板”按键即可进行WPF 弹窗参数交互,此处输入厚度10 mm,RGB 颜色代码(0,139,69)即可一键生成春绿色PVC 地板类型,并自动识别所有房间边界进行地板构件实例化布置.
为验证最终插件在PCR 实验室设计建模工作中的可用性,功能性以及高效性,可将其与未使用插件的原版Revit 进行性能对比分析如表2 所示,分析结果如下:
表2 使用插件升级前后Revit 性能对比
(1)在可用性上,使用插件后的Revit 界面更加直观友好,参数设置操作便捷;
(2)在功能性上,使用插件后的Revit 弥补了原本在PCR 实验室建模内容上的缺失,提供了最基础的建模能力,并可进行自定义建模参数,提供了更个性化的建模能力;
(3)在高效性上,使用插件后的Revit 在构件布置的操作方式上避免了繁琐的手动设置,在墙体构件的布置上克服了以往Revit API 二次开发案例中只能定点布置的局限性,在地板构件的布置上可自动识别房间边界进行布置,极大提高了建模效率.
本文采用C#程序语言对Revit 2018 进行二次开发,通过结合PCR 实验室建设项目的构件设计特点,开发出一款能够对PCR 实验室墙体与地板两种经典构件进行参数交互的建模插件.通过工程实例建模验证分析,可得以下结论:
(1)该插件扩充了Revit 材质库与构件库,在一定程度上解决了Revit 软件在PCR实验室建设项目设计工作上缺乏针对性材质类型与适用性构件类型的功能短板问题.
(2)该插件在墙体构件的放置功能上克服了以往Revit API 案例中只能基于坐标点连线进行放置的局限性,通过将API 新墙类型设置为默认墙类型并自动放置,从而实现与Revit 初始墙构件一样的跟随鼠标动态放置效果.
(3)该插件在一定程度上解决了BIM 技术在PCR 实验室建设项目这一方面的问题,可基于此进一步开发专属各类实验室领域的Revit 建模插件,或进行工程信息导出与模型效果渲染等方面研究.