刘颖华,解琳琳,李爱群,侯妙乐,刘浩宇
(1.北京未来城市设计高精尖创新中心,北京 100044;2.北京市建筑遗产精细重构与健康监测重点实验室,北京 100044;3.北京建筑大学测绘与城市空间信息学院,北京 100044;4.北京建筑大学土木与交通工程学院,北京 100044)
古木建筑作为人类文明留存的一种方式,具有重要的价值,随着时间的推移,会不可避免地产生以裂缝为典型代表的残损。如何面向保护需求直观记录古木建筑的残损现状,是其安全性能评估与提升的重要基础,是历史建筑科学保护与发展的重要前提。
近年来,建筑信息模型(building information modeling,BIM)的发展为建筑的科学表达和各类信息的集成提供了重要支撑[1-2]。结合BIM技术与文物遗产领域,在世界范围内逐渐形成了适用于历史建筑的 BIM,称为建筑遗产信息模型(historic building information modeling,HBIM)[3-4],HBIM 是如今历史建筑数字化保护趋势中的前沿技术[5]。鉴于古建筑残损类型繁多、残损程度不一的情况,在借用 HBIM 技术对残损信息表达与信息集成更新时,面临以下难题:
(1)残损信息表达方面。历史建筑在保存过程中会经受各种各样的破坏,构件出现了很多损伤[6-7]。理论上应尽可能对所有损伤信息进行详细表达,然而在实际保护中由于工作量巨大而往往无法得到有效实施,更重要的是不同保护需求下(如抢救性保护和预防性保护),对不同程度损伤存在不同的认知和表达需求。以应县木塔为例,其二层明层出现了一定程度的倾斜,各类构件出现了较大的裂缝,由于该类裂缝可能对结构安全性能影响较大,应予以精准的表达。对于其他楼层损伤则可采用相对简单但偏于保守的表达方法。BIM 中的多层级(level of detail,LoD)模型可以有效解决该问题。然而目前对于木构件,暂不存在相应的多层级裂缝模型。
(2)信息集成方面。了解到目前遗产从业人员大都将调研信息记录在外部数据库(如电子表格或电子文档)中,详细的文本记录有利于细致地了解历史建筑信息,但缺乏直观性。尽管BIM具有强大的信息集成功能,通过模型链接的属性电子表可实现数据、文本等信息的科学管理[4],实现二维数据与三维模型之间的连通,弥补传统方法的不足,但BIM自带的属性表不够丰富,有必要梳理残损特性,完善属性表内容,实现条理性的信息管理方法。
(3)信息持续更新方面。历史建筑信息一方面可以用于验证HBIM的合理性和可靠性,另一方面信息持续集成至模型中可服务于历史建筑的全生命周期管理。目前HBIM的属性电子表内容,通常是采用手动方式录入,自动化程度低。而古木建筑构件数量众多,并且由于价值极高需要持续采集数据,导致数据量大且更新周期短,既有手动方法无法满足古木建筑保护需求,因此亟需开发自动化算法实现古建筑信息在HBIM中的高效持续集成更新管理。
针对上述难题,本文以古木建筑裂缝损伤为例,基于《古建筑木结构维护与加固技术规范》(以下简称《规范》)明确了裂缝的重要性程度,建议了裂缝信息多层级表达方法及其多层级参数化数学模型;梳理裂缝重要属性,提出了基于Revit平台的裂缝信息集成方法;在此基础上,通过二次开发,实现了裂缝信息在 HBIM 中的自动化集成更新与可视化展示。最后通过对典型古木建筑的裂缝信息表达与集成实验验证了该方法的可靠性和高效性(图1)。
图1 裂缝信息表达与集成更新研究流程图
多层级表达方法是面向不同保护需求实现裂缝信息的留取和表达。以柱为例,我国《古建筑木结构维护与加固技术规范》规定木柱裂缝可以根据最大裂缝宽度分为3类[8],对于裂缝宽度小于3 mm的构件定义为轻度损伤,对于裂缝宽度介于3~30 mm之间的构件定义为中度损伤;对于裂缝宽度大于30 mm的构件定义为重度损伤。本文基于上述原则建议了一套裂缝损伤多层级表达标准(以下简称“标准”)及其参数化数学模型(表1)。
(1)LoD100,可表达所有残损程度裂缝,采用色块反映残损等级,方便统计古木建筑整体构件损伤程度情况,主要服务于预防性保护,分别采用蓝色、黄色和红色色块表达轻度、中度和重度裂缝。
(2)LoD200,用于表达中度和重度裂缝,偏于保守反映裂缝的最大宽度(wmax)、最大深度(dmax)和长度(h)信息,将裂缝表达为三棱柱,可用于预防性保护和抢救性保护,如古木建筑抗震性能安全性评估。
(3)LoD300,用于表达重度裂缝,依据中国文化遗产研究院提出的裂缝数据采集要求,提供沿裂缝长度方向多处的裂缝宽度和深度信息,如距裂缝顶端长度为hi处的裂缝宽度和深度分别为wi和di,尽可能详实的留存裂缝信息,主要用于抢救性保护。
表1 古木建筑柱子裂缝模型多LoD表达标准
对于历史建筑,应对其信息进行科学地集成管理。BIM的特色在于可集成丰富的信息,基于参数建立的三维 BIM 模型可以通过电子表格显示该模型所关联的所有对象及其相应的参数与特性。在Revit软件中,每个构件模型都关联了属性选项卡,可以通过电子列表的方式管理构件的详细信息。本文结合古木建筑保护从业一线人员的保护需求,梳理了裂缝信息需要管理的属性内容,包括:①构件的唯一识别码;②裂缝信息描述文本文件;③最大裂缝宽度;④裂缝损伤程度。结合已有属性选项卡选项和自定义属性选项,本文重新定义了古木构件的属性,图2为柱构件的新属性选项卡,即裂缝信息的集成方式。
图2 裂缝信息集成方式
对于任一构件,可按下述流程对其裂缝信息与HBIM模型进行集成管理:
(1)基于唯一构件识别码选取构件,即“标记”属性,在前期建立HBIM时需赋予每个构件唯一识别码;
(2)为构件增加裂缝“宽度”和“残损等级”属性选项;
(3)在“注释”属性内标注裂缝信息描述文本;
(4)提取“注释”属性中的裂缝最大宽度wmax(对于轻度损伤的构件从“注释”内直接提取裂缝宽度值,对于中度损伤的构件从“注释”内提取裂缝最大宽度值,对于重度损伤的构件从“注释”内提取沿着裂缝长度方向最宽处的裂缝宽度值),并添加至“宽度”属性;
(5)基于《规范》判定裂缝的损伤程度将结果添加至“残损等级”属性;
(6)以“残损等级”作为过滤条件,对所有损伤程度的构件按“标准”进行残损等级色块渲染。
图3为一古木亭子柱裂缝信息集成及LoD表达的示意,从图中可以看出基于HBIM技术可以直观的展示裂缝损伤程度,并系统集成裂缝的相关信息。然而该方法目前通过手动完成,对于小体量的古木建筑可以采用手动方法,但对于以应县木塔为典型代表的大型古木建筑则会难以处理。更重要的是,信息与HBIM的集成大都是手动复制外部数据库内容添加至属性,外部数据库信息的更新无法在HBIM构件属性中实现同步更新。为解决上述不足,有必要在 Revit平台上进行二次开发实现信息在HBIM 中的自动写入、提取和更新渲染[9],实现历史建筑信息的高效、持续更新集成。
图3 古亭局部木柱裂缝信息集成结果
通过对Revit软件进行二次开发,可创建满足裂缝信息自动更新需求的插件。插件使用时有3个应用条件:①为每个构件设定唯一识别码;②TXT格式残损信息文档,文档内容包括构件名称、构件唯一识别码、构件残损情况(固定格式描述了最大裂缝宽度、最大裂缝深度、裂缝长度、沿着裂缝长度方向各处的裂缝宽度和裂缝深度);③在 HBIM 所链接的电子列表中将构件识别码写入“标记”框中。二次开发的环境配置与算法流程如下。
环境配置方面需要 3个工具:Revit应用程序编程接口(application programming interface,API)、Revit软件开发工具包(software development kit,SDK)、开发工具。①API是Revit软件与外界交互的窗口[10],通过API可以访问Revit软件的每个功能,并且可以创建开发新的功能。②Revit SDK里有工具实现接口链接,还可以帮助用户了解API的用法。③需要完整的开发工具集VS(Microsoft visual studio)编译器[11],用于快速调用类集中算法和数据结构的NET Framework框架[12]以及C#语言。
针对Revit软件进行二次开发具有统一的基本架构:基于C#创建类库工程[13],添加RevitAPI引用,然后从 Iexternal-Command接口派生,重载Execute()方法,在Execute()函数中编写程序实现外部命令。针对本文要实现的信息更新功能,其算法设计流程如图4所示。
图4 裂缝信息自动更新算法设计流程
(1)构件类别选取与参数增加。历史建筑内含构件种类丰富,不同的构件在HBIM里表现为不同的类别,如柱构件属于柱类别、枓栱构件作为嵌套族属于常规模型类别等,因此先明确需要进行信息集成更新的目标构件,及其在模型中对应的类别,将之筛选出来。筛选构件类别是通过类的类型来进行元素过滤访问[14]。首先创建元素类别过滤器,将所有类别元素选中;再通过内建类别过滤器筛选目标,若目标类别为一种,如柱,则使用内建类别过滤器过滤出所有柱元素,若目标类别为多种,如柱和梁枋,则需使用逻辑过滤器将内建类别过滤器与常规模型过滤器进行合并,从而找到所有柱与梁枋的类别元素;最后在当前模型项目中构造收集器,其用来迭代以及过滤元素的主要类[14],将符合过滤条件的类别收集在收集器内,方便后续迭代遍历使用。
为目标类别增加参数,即扩充电子列表内容与数量。由于 BIM 中的“信息”存储,是通过“参数”设置并在项目中赋予实例参数值来实现的,因此可通过添加“共享参数”的设置为类别元素增加额外的参数[15]。梳理裂缝损伤的重要属性,决定创建“宽度”与“残损等级”共享参数。创建流程是新建共享参数组文件,在文件内定义“宽度”与“残损等级”参数,将之创建为实例参数,最后将参数的定义与上一步得到的目标类别绑定,就实现了新列表栏的自动扩充(图)。
图5 参数添加示意
(2)电子列表内容写入及解析。将裂缝信息TXT文档中第 3列“残损信息”内容批量自动写至“注释”栏。由于残损文档与HBIM都事先为构件对应了唯一识别码,因此将构件识别码作为传入参数,将文档信息与模型进行关联。首先遍历所有编号,再遍历每个编号构件的所有属性(所有列表内容),之后获取目标列表框“注释”;最后修改对应编号的注释信息,实现裂缝文本信息批量对应录入“注释”列表框。
电子列表中“宽度”栏内容的写入是通过解析注释信息而自动获取的。首先对“注释”框内容(即残损信息)进行分割,成为由逗号隔开的若干个分句,遍历所有分句,判断是否包含“宽”字符,若包含则遍历该分句,利用ASCII码查找到宽度值,需要注意的是有时会得到多个宽度值,取最大值作为结果;若不包含“宽”字符,则令宽度信息值为 0。最后将结果录入“宽度”列表框。“注释”框与“宽度框”内容写入结果如图6所示。
图6 电子列表内容写入示意
(3)残损等级判断与色块填充。“残损等级”的自动判断是基于《规范》中提到的木构件裂缝等级划分内容对“宽度”值进行范围判断而得;最后将判断结果匹配到相应构件的“残损等级”列表框。
确定残损等级后,为构件自动填充相应色块。Revit软件有多种填充样式可供选择,如交叉填充、分区填充等,本文使用实体填充样式。首先定义实体填充,并根据3类残损等级对应建立3个过滤器(轻度等级过滤器、中度等级过滤器、重度等级过滤器);获取共享参数组中的“残损等级”,过滤器依不同的残损等级进行过滤,记录每个残损等级对应的构件识别码;按“古木建筑柱子裂缝模型多LoD表达标准”中等级表达的配色方案,对每个等级所收集的识别码构件进行相应色块的实体填充。
将上述 3个流程进行代码编写,并生成 DLL动态链接库文件。编写过程中需要使用大量函数,表2列出部分关键函数。
表2 Revit二次开发关键函数使用列表
为方便外部命令程序的集成和调用[16],可通过编写外部应用来集成插件。从Iexternal-Application接口派生,重载OnStartup和OnShutdown方法,使外部应用随着 Revit 软件一起启动和关闭,载入已生成的 DLL文件,在附加模块栏内为此命令生成面板与“Update”按钮(图7),HBIM裂缝信息自动更新的开发工作结束。
图7 信息更新插件
为验证本文方法的可靠性,以图所示的HBIM 为例进行裂缝信息多层级表达与信息自动集成更新实验,实验环境配置参数见表3,此时柱子模型均为LoD100层级。首先为柱子设置唯一识别码,并写入构件的“标记”列表框;然后为柱子虚设裂缝残损信息,且录入TXT文档;最后在Revit软件中点击“Update”按钮,实现一键批量集成更新裂缝信息。本文实验涉及目标柱子构件数量是64个,该方法用时4 s完成了柱子裂缝信息集成更新,结果如图9(a)所示。之后以色块结果为快速索引在相应柱子模型基础上添加LoD200与LoD300裂缝模型,完成裂缝模型的多层级表达,结果如图9(b)所示。
由实验结果可得,本文算法快速实现了柱子模型和裂缝信息的链接,由色块填充结果直观反映出构件受损程度;由属性选项卡下电子列表框中的各项信息,可把握裂缝的详细情况;由单个模型的多细节层次表达,可直观得到构件的受损细节。
图8 实验对象
表3 实验环境配置参数
图9 裂缝信息自动集成与多层级模型表达结果
本文在古木建筑裂缝损伤表达与信息集成更新方面,针对模型构建的精细度划分问题,结合国家相关规范建议了裂缝模型多LoD表达标准;针对信息集成问题,考虑从业人员需求进行裂缝属性梳理,提出了基于Revit平台的裂缝信息集成管理方法;面对信息量庞大的问题,对Revit软件进行二次开发实现信息批量自动化集成更新。最后进行实验验证。
实验结果表明将模型多细节层级表达方法、HBIM技术与Revit二次开发相结合方法,应用在信息表达集成中,可以高效地完成一些工作量较大、规律性较强的工作,有利于历史建筑信息的全生命周期管理,便于安全性能评估,为后期运营管理与保护措施决策等工作提供参考。